Grenzen in Shapefiles umwandeln

Hallo,

Ich bin neu in der Welt von OSM und habe gleich mal ein erstes Problem:

Im OSM Inspector der geofabrik werden die Grenzen schön dargestellt und sind auch über den WFS Service als Vektordateien abrufbar.

http://tools.geofabrik.de/osmi/?view=kreisgrenzen&lon=7.83032&lat=49.01914&zoom=9

Wie kann ich ich denn die Grenzen, die in OSM ja als Relations sind, selbst in Shapedateien umwandeln, wie genau macht dies die geofabrik ?

Ich bin mittlerweile soweit, dass ich die OSM Daten in eine PostgreSQL schreiben kann, daraus dann die Pfade der Grenzen extrahieren kann, aber halt nur als Linien, nicht als komplette Fläche der einzelnen Gemeinden, Kreise oder Länder.

Für eine einzelne Grenze, z.B eine Kreisgrenze mache ich das per Hand in JOSM, wähle die entsprechende Relation aus, exportiere sie als GPX Datei und mache daraus dann z.B in qgis eine Fläche.

Allerdings möchte ich das gerne automatisieren, wie das die Geofabrik macht, nur da komme ich nicht weiter. Kann mir da jemand evt. weiterhelfen ?

Grüsse

Andreas

Hallo Andreas

erstmal herlich willkommen bei OpenStreetMap!

Es ist schon einige Zeit her, dass ich das gemacht habe, aber grob läuft dass wie folgt ab:

1.) Grenze als .OSM (XML) File erstellen. Ich habe dazu die Relation in JOSM heruntergeladen uns ALLES ausser den Ways gelöscht. Dazu hehören auch die Attribute aller Nodes und Ways und auch die Relation selber. Danach die einzelnen Wegstücke zu einem Poigon Verbinden (alle selektieren und “verbinden” - eine Kleinigkeit für JOSM). Zum Schlusss als Datei speichern. (Bitte nicht hochladen ;))

2.) Eventuell die Datei in einem Text-Editor säubern (alles bis auf den Grenz-Way und die Nodes entfernen)

3.) Mit Osm2Poly (siehe http://wiki.openstreetmap.org/wiki/Osmosis/Polygon_Filter_File_Format)) in ein Poligon-File umwandeln.

Viel Spass

mdk

ups…

Ich habe wohl Shape-File und Polygon-File durcheinander gebracht - sorry.

Ich fürchte da muss dir ein anderer helfen.

Grüsse

mdk

Hallo,

Ja das mit der Handarbeit in JOSM habe ich schon gemacht, wie gesagt das funktioniert, aber eben nur mit Handarbeit. Wenn ich nun alle Kreise in Deutschland haben möchte, wäre das ja viel zu viel Arbeit.

Ich hatte bisher die OSM Datei mit osmosis in meine postgresql/postgis Datenbank importiert. Damit hatte ich als GIS Neuling allerdings meine Probleme, dann die Daten auch entschrechend abzufragen in Quantum GIS, das hat irgendwie nicht funktioniert.

Ich bin gerade über dieses Blog Bericht gestolpert:

http://blazejaksgis.wordpress.com/category/gis/quantum-gis/

Nun habe ich mal die OSM Datei mit osm2psql eingelesen und siehe da, das Programm wandelt scheinbar die relations beim Einlesen in die Datenbank schon in Polygone um. Damit konnte ich dann problemlos die Grenzen, z.B. die Kreiskrenzen mit adminlevel=6 abfragen und in qgis importieren als Polygone und dann dort als shapedatei speichern.

Prima!

Da ich aber neugierig bin will ich das mit der über osmosis hergestellten Datenbank auch hinbekommen. Kann mir da jemand weiterhelfen. Wenn ich das richtig verstanden habe, speichert osmosis die Daten eher so wie in der OSM Datei in den Tabellen der Datenbank, also auch als relations und eben nicht als Polygone wie osm2psql.

Meine SQL Kenntnisse sind da noch nicht so gut, aber da gibt es doch sicher auch einen Weg, die Daten so abzufragen, dass ich Polygone habe für die Kreise in Deutschland z.B.

Grüsse

Andreas

analog dazu gibts auch osm2shp…3 verschieden Versionen

http://wiki.openstreetmap.org/wiki/Shapefiles

da warst Du 1 Sekunde schneller als ich :wink: genauso wie Du die Daten mit osm2pgsql in die DB reinbekomme hast, gibt es eine Funktion pgsql2shp in PostGIS.

Ja die Programme habe ich auch schon entdeckt, die funktionieren auch mit nodes und ways aber irgendwie nicht so richtig mit den Relations der Grenzen.

Ja wie schon gesagt mit der von osm2psql erstellten Datenbank funktioniert es ja perfekt. Einfach die Polygone nach admin-level=6 filtern und ich habe schnell alle Kreise oder bei admin-level=8 alle Gemeinden in Deutschland als Polygone, perfekt.

Wie gesagt interessiert es mich aus Neugier ob dies mit der mit osmosis hergestellten Datenbank auch funktioniert, scheinbar aber nicht so einfach.

Was mich dann halt zu den Unterschieden zwischen osmosis und osm2psql führt, die ich momentan noch nicht so ganz verstehe.

Die mit osmosis erstellte Datenbank kann ich ja wieder abfragen mit osmosis und dann auch wieder eine osm Datei erstellen. Das geht aber scheinbar nicht mit der mit osm2psql erstellten Datenbank oder wie kann ich daraus wieder ein OSM erstellen ?

sieht so als, als wäre das noch ein offenes Problem.

http://code.google.com/p/osm2shp/issues/detail?id=4#c7

hier auch

http://wiki.openstreetmap.org/wiki/Osm2shape

Aber einen Trumpf habe ich noch…melde mich dann nochmal

Wie schon gesagt das eigentliche Ziel, aus den OSM Dateien schnell und einfach POlygone der Grenzen (also z.B der Gemeinde oder Kreisgrenzen) zu bekommen, ist ja mittlerweile erledigt über osm2pqsl und funktioniert ja auch schnell und perfekt.

Allerdings habe ich dann scheinbar das Problem, dass ich 2 verschiedene Datenbanken haben muss. Eine, die ich mit Osmosis erstellt habe, um daraus dann wieder osm Dateien zu erstellen und eine zweite Datenbank mit osm2psql erstellt um die Daten dann mit GIS Programmen wie qgis oder für Mapnik weiter zu verarbeiten.

Eine einzige aktuell gehaltene Datenbank wäre mir da lieber.

das was Du mit osmsosis erstellt hast, ist keine Datenbank sondern eine xml Datei. Ich kann das Telefonbuch auch als xml Datei ablegen oder in eine Datenbank schieben.

Nein, sicher ist das eine Datenbank die ich mit osmosis erstelle, hier die Anleitung dazu im Wiki

http://wiki.openstreetmap.org/wiki/Osmosis/PostGIS_Setup

sorry, das habe ich wohl zu schnell gelesen. Wie dem auch sei, die Software wäre wahrscheinlich keine Option für Dich
http://www.safe.com/products/desktop/product-overview.php

Die kann das direkt osm xml in shp umwandeln. Ich hätte auch gedacht, dass es da was einfacheres bzw kostenloses gibt.

Die Grenzen als Polygon gehen damit wohl auch nicht ebenso wie mit den anderen Programme (osm2shp) auch nicht oder zumindest noch nicht. Einfach weil die Grenzen ja nicht in der osm Datei als Polygon gespeichert sind sondern eben nur als relation, also nur mit der Bezug auf die ways, die daran beteiligt sind. Bisher scheint das nur osm2psql zu können und das ist wohl auch die Methode wie die Geofabrik das beim OSM Inspektor macht:

http://tools.geofabrik.de/osmi/?view=kreisgrenzen&lon=7.51584&lat=49.27515&zoom=10

Allerdings habe ich jetzt das Problem wenn ich meinen Datenbestand aktuell halten möchte, dass ich 2 Datenbanken brauche. Eine (mit osmosis erstellt) um daraus wieder osm Dateien zu erstellen und eine (mit osm2pqsql erstellt) um die Daten für qgis oder für mapnik bereitzustellen.

Bei einem recht großen Interessengebiet ist der Aufwand bei 2 entsprechend großen Datenbanken so natürlich enorm, daher wäre mir eine einzige Datenbank lieber, aber das scheint nicht zu gehen ?

Hallo Misterboo,

wenn ich mich nicht täusche, so ist der Unterschied zwischen den beiden Datenbanken kleiner als mal denkt. Denn auch osm2pgsql benutzt Ossmosis. Die Datenbanken wiederum unterscheiden sich durch das Schema, welches ihnen beim anlegen mitgegeben wurde.
Wenn dein Problem also nur im aktualisieren der Datenbank besteht und du keine weiteren Schweinereien mit den Daten vorhast, so empfehle ich dir den Artikel: http://wiki.openstreetmap.org/wiki/DE:HowTo_minutely_hstore
darin beschrieben ist wie die Datenbank auf einer Linuxmaschine mit pg2sql initialisiert wird und anschließend mit Ossmosis aktuell gehalten werden kann. Diff-Files gibt es aber wohl nicht für Deutschland separat, sondern nur weltweit oder für ausgewählte andere Regionen.

Mir wurde gesagt, es geht und hier steht “polygon support yes” http://docs.safe.com/fme/html/FME_ReadersWriters/ReadersWriters.htm#osm.htm.

Aber selber probiert habe ich es nicht und Du hast ja zumindest dafür eine Lösung. Für Dein anderes Problem wird sich auch noch jemand finden. Wenn nicht, würde ich auf der Mailingliste fragen. Aber warte noch ein wenig bis die Leute ausm Mittagsschlaf erwachen :wink: