[OSM-dev] Cartagen - client-side vector based map renderer, dynamic maps

Stefan de Konink stefan at konink.de
Thu May 7 01:51:34 BST 2009


Jeffrey Warren wrote:
  > c) trying to serve partial polygons... I'd like to try plotting only
> every 3rd or 10th node... do the polygons collapse? Can i cull nodes in 
> a more intelligent way? Someone on this list or geowanking pointed to a 
> company that can serve lower-res polys over an API. I'm sure folks have 
> worked on this in tile systems, so if you know anything about it and are 
> willing to share, I'm all ears. This becomes really relevant as you zoom 
> out... don't want to render every node for the coast of Argentina, for 
> example.

I have currently an alternative data format storing the Planet. I 
personally consider it the best method to store data for rendering and 
routing and only requires a single table table to store all geoconcepts.

The basic functionality is build on the concept we had here, in OSM, 
before called segments. Each segment is materialized by the database, 
thus will return a segment that can be directly plotted. For all *non* 
areas this is sufficient. If you want on the other hand render an area 
you will be forced to create a list of the results that come back. [In 
GIS terms a circular linestring]. Using the data also used for routing 
the exact sequence can be restored by the renderer.

Since an area will always be closed any segment can be taken to be build 
upon [as start point]. Even without the routing data the object can be 
fully connected, based on the start and endpoints.


For the visual people:

n1-------------------n2

n1 is stored as lat,long
n2 is stored as lat,long


For a renderer this is more than enough. The extra database features 
come with constraints to make the following possible:


n1--------v---------n2
           |
           |
           |
           |
           |
          n3

Where v is actually a constraint that line n3 is constrainted to the 
center (50%) of line n1..n2.


...what is available is done in plain SQL. [Commercial break]Ofcourse 
MonetDB was used for storing the data[/Commercial break].


I was looking at implementing native rendering using javascriptsockets 
(aka just fetch tuples directly from the database), because I want live 
editing :)



Stefan




More information about the dev mailing list