[OSM2PGSQL] zusätzliche Tabelle

Mal ne Frage an die OSM2PGSQL-Spezialisten hier:

Ich hätte die Anforderung, zusätzlich zu den “normalen” Tabellen eine Lookup-Tabelle (1:n) zu erstellen. In dieser sollten alle osm_id aller highway=* in einer Spalte und in der 2ten Spalte alle osm_id alle Nodes des highway stehen.

Also z.B:


osm_id line osm_id node
408910462   343576189
408910462   345059492
408910462   345059489
...

Hintergrund: In OSRM bekomme ich die Node-IDs zurück und würde gerne die osm_id des highway abfragen, zu der dieser Node gehört. Mit so einer LookUp-Tabelle wären die Abfragen rasend schnell im Gegensatz zu spatialen Abfragen (welche dann u.U. auch das falsche Ergebnis liefern).

Ist das irgendwie machbar? Oder gibts ne andere (fertige) Möglichkeit, so eine Tabelle aus einem .pbf zu erstellen?

Hoffnungsvoll…

Frank

Du musst eigentlich gar nichts machen, wenn du im slim - Mode importiert hast, hat planet_osm_ways das schon.

Siehe

gis=> \d planet_osm_ways
Table "public.planet_osm_ways"
 Column |   Type   | Modifiers
--------+----------+-----------
 id     | bigint   | not null
 nodes  | bigint[] | not null
 tags   | text[]   |

Ah deine Tabelle hat mich verwirrt, du willst node id → way id

Das ist tatsächlich komplizierter. speziell muss du auf irgendeiner Art so eine Tabelle uptodate halten, was etwas fitzelig ist. Alternativ mit spatialer Abfrage die in Frage kommenden Wege bestimmen und dann die entsprechenden Ways aus obiger Tabelle auf den Node überprüfen, dass sollte halbwegs erträglich schnell gehen.

Wieso, Simon, Du hast doch recht:


osm=# select id from planet_osm_ways where nodes @> array[123]::bigint[];
   id    
---------
 5121760
(1 row)

:smiley: Danke!

Ich hatte tatsächlich die Testdaten ursprünglich ohne slim importiert. Da steht ja alles drin, was ich brauche.

Gruß, Frank

Ja ich hatte vergessen dass es auf nodes ein Index hat (sonst wäre es doch etwas viel Gerödel, sprich nicht “rasend” schnell :-).