Early notes on map editing tools are here:
. The initial implementation of MapConfig and associated UI classes are basically functional, but have several problems:
  • Data file URLs are exposed
  • Shared region ObjectIDs are exposed
  • There is no way to move/copy layers from one map to another
  • Management of world bounds is problematic

Proposed revisions include:
  • Change MapConfig from a SharedList to an ObjectRecordList
    • Or possibly WebSite (might make web views easier)
  • Add a repository of static map layer objects in the directory structure. These objects would store:
    • URL or ObjectID
    • Default color
    • "Native" bounds of the data (which could be modified by a projection when displayed)
    • Whether or not layer contains building data
  • The MapConfig UI would include a list (using the same list renderer classes used elsewhere in bridge) into which static map layers and region objects could be dragged. Drops would result in linking, to allow (e.g.) data files to be relocated.
  • Default properties could be overidden by properties in the layer's ObjectRecord. "Presentation" properties could include:
    • Colors (map and thumbnail)
    • Display name
    • Render style (open/closed polygons)
    • Whether or not layer should be included on thumbnail
    • Projection

The following updates were made on 030427:
  • Added map.builder.ShapefileLayer class for replicated data describing a shapefile. ShapefileLayerComponentView provides a UI for editing these.
  • Added map.builder.SharedRegionComponentView for editing a cove.place.SharedRegion. (This should probably be moved to the same package.)
  • For both kinds of layers, presentation configuration info is stored in properties within the layer object's EmbeddedObjectDescriptor. The goal is to allow layers to be shared across different maps, but allow the layers to be rendered differently.
  • Updating map configuration panel (LayerList, in particular) to support drag-and-drop of objects into a list. Currently this does not do any type checking of objects that are dropped into the list.
  • SharedRegions are currently init'd with a 1-by-1 grid, and their bounds are updated to the world bounds each time the map is opened. This needs to be fixed.
  • The map configuration dialog in MapComponentView needs a number of changes:
    • The world bounds setting should be removed, or an option should be added to allow user to specify bounds instead of using the union of all of the layer bounds.
    • Map properties (such as scroll constraints) should take effect immediately

We will eventually have a central library of map layer objects (possibly accessible from the "Add To..." menu item?), but until then, here are the steps for setting up a map:
  1. Use "Edit" - "Temp admin tools" - "New" - "Map shapefile layer" to make a layer object for each shapefile.
  2. Make a map object, choose "Map Configuration", choose the "Layers" tab, then drag the layer objects into the list.
  3. Make a "Editable map layer" object, then drag it into the layer list.

Coordinate translation (Projection)


Given the emerging emphasis on GPS activities, all of our data should probably be expressed in latitude/longitude. We could do this translation prior to publishing shapefile data, but this is not practical for image data. A solution would be to introduce a generic mechanism for performing coordinate translations between a given layer's native coordinate system and a projected coordinate system.

Issues include:
  • Where should the translation be stored? Since the same dataset may be translated in different ways on different maps, it seems likely that a reference to the translator should be stored in the layer's descriptor, rather than in the layer's replicated data.
  • Common operations (and details like null translator checks) should be encapsulated in a utility class. FloatRectangle translation is an example, since checks will need to be made to handle the case where a translation flips the data horizontally and/or vertically.
  • Translation configuation. Options include:
    • Specifying bounds (x, y, w, h)
    • Specifying coordinates of two points within the data

Translator objects will be used by:
  • RenderableSetFactory "wrappers" that translate Viewpoint objects on calls to getRenderableSet(...)
  • Renderer "wrappers" that translate Viewpoint objects (passed into the render(...) method) from projected coordinate systems to native coordinates?
    • This will not support point-by-point translation, only moving/scaling data.
  • Individual ObjectRenderer and ObjectComponentSource implementations
    • Could be added in a setCoordinateTranslation(...) method or passed as a parameter to render(...) and layout(...) methods.


/public/projects/bridge/design/Map editing tools Login | Web Editor | Full Editor
Last modified 9/11/03 1:18 PM by isenhour (history)
Site contents