Hallo zusammen,
derzeit bin ich auf der Suche nach der besten Art OSM-Daten in einer eigenen Datenbank (postgis) zu speichern.
Ziel soll es sein, einige Daten aus den OSM-Files mittels osmfilter zu extrahieren und diese in die postgreSQL Datenbanl zu speichern.
Auf diesen Daten möchte ich dann Queries laufen lassen, die sowohl Tags einbeziehen als auch GEO-Filter benutzen. Eine Abfrage könnte also in pseudo-text so lauten:
SELECT * FROM xyz WHERE tag(natural=water) in bbox(13.3453,52.6006,13.3496,52.6038)
Meinen Datenimport habe ich mit osmosis im “snapshot” DB-Schema erstellt. Auch habe ich die Erweiterungen “bbox” und “linestring” erstellt, die entsprechend gefüllt werden. Was leider nun verloren geht sind die Informationen (Tags, Attribute etc.) aus den Relation-Knoten der osm.xml.
Ich frage mich, was nun der beste Weg ist, die OSM-Daten so zu importieren, dass ich alle Daten in einer Tabelle habe und diese entsprechend mit tags und allen attributen versehen sind. Auf die DB zugreifen möchte ich später mit den java geotools, sodass ich möglichst die Tags und Attribute der Features auslesen kann.
Ich verstehe nicht, was genau fehlt, aber gerade beim Snapshot Schema müssten eigentlich alle Informationen aus der osm.xml übernommen werden. Mein Setup ist schon etwas veraltet, aber bei mir gibt es die Tabellen nodes, ways und relations (+ Beziehungstabellen), jeweils mit Attributen (Spalten id, version, user_id, tstamp, changeset_id) und Tags (Spalte tags).
Die tags Spalte ist halt etwas speziell, da vom Typ hstore. Den kann - soweit ich weiß - GeoTools nicht lesen, da hilft z.B. der Umweg über eine View oder die Tags in einem String auszulesen: “tags::text”.
Deine Abfrage läuft bei mir so:
select *
from ways
where tags->'natural' = 'water'
and bbox @ ST_SETSRID('BOX(8.894 47.423, 9.805 47.853)'::BOX2D,4326)
Was das Snapshot Schema nicht hat, sind Geometrien für Relationen, also z.B. Flächen die als Multipolygon-Relation gemappt sind. Das müsste man sich über Joins selbst zusammenbauen.
Multipolygone sind beim osm2pgsql (oder Imposm) Schema enthalten, das sich fürs Rendering besser eignet. Damit hatte ich mal mit GeoTools experimentiert. Die wichtigsten Tags werden als Spalten importiert, damit entfällt auch erst mal das hstore Problem.