[OSM-dev] Rendering of long roads

marcus.wolschon at googlemail.com marcus.wolschon at googlemail.com
Mon Jan 5 12:27:31 GMT 2009


I am currently trying to implement rendering very low zoom-levels
on the client in my navigation-app "Traveling Salesman".
I would like to gather some feedback on how to do this best.

== What has been done==

What I have done so far is to store 3 additional
simplified maps LOD1, LOD2 and LOD3 on the client.
(Compared to the full map LOD0 they need only insignificant
storage.)

* LOD1 only basically contains secondary and higher roads.
* LOD2 only basically contains primary and higher roads.
* LOD3 only basically contains motorways

* each level has a minimum for the allowed bounding-boxes of ways
* each level simplifies detailed curves by course-error with increasing
thresholds

See here for details:
http://travelingsales.svn.sourceforge.net/viewvc/travelingsales/libosm/src/org/openstreetmap/osm/data/LODDataSet.java?view=markup

== The issue ==

Long motorways and coastlines are broken up into
small fragments. It seems that filtering on the
length of the individual way is not enough as
large parts of important motorways are filtered out.

== What I intend to do ==

I would like to combine split-up roads before simplifying them.
This is what I am currently working on and where I am not sure
if my aproach is the best that can be done.

requirements:
* Ways, relations and nodes can be updated incrementaly
  without importing the complete planet/continent/country again.
* Rendering must happen offline and realtime. No tile-rendering.

my aproach:
* I want to use existing "type=composite"-relations that already
  group long motorways and create them where they are missing
  (e.g. on long secondary ways for LOD1).
* Add a simplified way(/ways) that combines all the ways of the relation
  as a new way to the relation using a special role-tag.
* This simplified way is only used internally, never exported or uploaded
  and recreated whenever the releation or any contained way is changed,
  added or removed.
* LOD1-3 store only the relation and the simplified way but not the
  individual ways referenced by the relation. (No referential integrity
required.)
* Also extend the simplification-algorithm to also remove nodes that are
too
  near each other even of they introduce a significant course-error.

pro:
* realtime-rendering ways like the european costline should be possible
* renderer need not care about anything but rendering all ways in the
  bounding-box at the current LOD-level and zoom-level.
con:
* may be slow while importing new ways (e.g. simplifying the european
coastline)
** this may be relativated by only incremental updates to the simplified
way

What do you guys think of this aproach?
It it a good way to do this?




More information about the dev mailing list