Falls mir das jemand auch auf postgis ausdrücken kann, kann ich das gerne mal versuchsweise einbauen. Falls ich das mache, hat das aber den Nachteil, dass das nur für ein sehr exotisches System gebaut wird. pgrouting ist zwar schon ein bisschen verbreitet, aber im OSM-Umfeld eigentlich eher nicht so…
Vielviel schöner wäre natürlich ein generelles Werkzeug, das .osm-Dateien frisst und .osm-Dateien ausspuckt, die alles aus der Eingabedatei enthalten und zusätzlich die virtuellen Wege.
Bei pgrouting sieht ein Routing-Graph so aus:
(Die Zahl vor dem + bei Kanten ist die Länge, der Rest ist Gewichtungszeug.
Die Punkte sind die Verbindungsknoten)
Oder ein bisschen weniger anschaulich:
osm=> select gid,source,target,length,the_geom from routing_ways where osm_id=10071036;
gid | source | target | length | the_geom
-------+--------+--------+-----------+------------------------------------------------
40107 | 15371 | 51862 | 23.566894 | 0102000020E6100000040000006....
40108 | 51862 | 37460 | 98.79034 | 0102000020E6100000040000000....
40109 | 37460 | 51864 | 118.51488 | 0102000020E61000000400000 ....
40110 | 51864 | 37497 | 53.28253 | 0102000020E6100000030000007.......
40106 | 37497 | 15371 | 105.84595 | 0102000020E6100000030000008...
Dass die Verbindung (51864, 37460, 51862, 15371, 37497, 51864) ursprünglich mal eine Fläche war, weiss der Router nicht mehr. Das kann er aber rausbekommen, die ursprüngliche OSM-ID steht bei den Wegen dabei und die Nachbartabelle kennt die Tags dazu. Der umgekehrte Weg (ich kenne eine Fläche und suche die dazu passenden Kanten) ist auch einfach. Die Geometrie der Wege steht ebenfalls im Graphen.
Über Plätze mit Löchern muss ich mir gar keine Gedanken machen. Die Importer für pgrouting (früher wars mal osm2pgrouting, jetzt nehme ich osm2po), können nicht mit Relationen umgehen (seufz). Das ist kein grosses Problem, die meisten Hindernisse auf Plätzen bestehen aus Gebäuden, die einfach über den highway=* gesetzt wurden und sind damit sowieso für Router unsichtbar. Schön ausgeschnittene Löcher sind aber leider in meinem Router ebenfalls einfach nicht vorhanden…
Grüße, Max