Files
iD/NOTES.md
Tom MacWright 75d9331233 Start traversing the graph, other changes
Adds GeoJSON viewing to features, unifies the way that features refer
to their children.
2012-11-01 10:55:33 -04:00

1.5 KiB

The Graph

iD implements a persistent data structure over the OSM data model.

To be clear, this data model is something like

root -> relations (-> relations) -> ways -> nodes
   \                             \> nodes
    \-  ways -> nodes
     \- nodes

Performance

Main performance concerns of iD:

Panning & zooming performance of the map

SVG redraws are costly, especially when they require all features to be reprojected.

Approaches:

  • Using CSS transforms for intermediate map states, and then redrawing when map movement stops
  • "In-between" projecting features to make reprojection cheaper

Memory overhead of objects

Many things will be stored by iD. With the graph structure in place, we'll be storing much more.

Connection, Graph, Map

The Map is a display and manipulation element. It should have minimal particulars of how exactly to store or retrieve data. It gets data from Connection and asks for it from Graph.

Graph stores all of the objects and all of the versions of those objects. Connection requests objects over HTTP, parses them, and provides them to Graph.

loaded

The .loaded member of nodes and ways is because of relations, which refer to elements, so we want to have real references of those elements, but we don't have the data yet. Thus when the Connection encounters a new object but has a non-loaded representation of it, the non-loaded version is replaced.