Nutzen von OpenStreetMap-Daten in GIS

Aus Geoinformation HSR
Version vom 18. September 2018, 17:58 Uhr von Stefan (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
 *** OUTDATED ***

Wichtige Weblinks:

Auf dieser Seite werden Anwendungsbeispiele mit Arbeitsabläufen (Workflow) mit Szenarien gezeigt, um Daten von OpenStreetMap (OSM) in GIS als Vektordaten-Layer oder als Geo-Webservice für Karten nutzen zu können. Die Nutzer sind u.a. technische Sachbearbeiter CAD-Operateure, Raumplaner, Landschaftsplaner, Naturschützer oder Förster.

Überblick

Folgendes ist wichtig für das Verständnis von OpenStreetMap-Daten:

  • Das Datenschema ist nur lose vorgegeben; dafür gibt es die sog. Tags.
  • Die Geometrie besteht aus einem topol. Netzwerk mit Nodes und Way (keine eigentlichen Areas/Polygone):
    • Linien (Ways) verweisen auuf Nodes (haben selber also keine Koordinaten).
    • Flächen in OSM sind entweder geschlossene Ways (mit entsprechendem Tag, z.B. natural=water oder building=yes) oder sog. "Multipolygone", d.h. Relationen zu Ways (Testcases for converting OpenStreetMap data into GIS world formats: [1])

Es gibt folgende Möglichkeiten aus Sicht GIS um OSM-Daten zu kommen:

  • OSM-Rohdaten exportieren (vgl. unten) und ein weiteres Tool verwenden um die Daten in ein GIS-Format zu konvertieren.
  • Direktes Exportieren mittels Webdienste
  • Selber programmieren.

Vgl. dazu auch einzelne Beispiele unten.

OSM-Rohdaten herunterladen

Es gibt folgende Export-Möglichkeiten inkl. Webservices für das Rohdaten-Format von OSM (RAW OSM-XML), d.h. in OSM-Datenstruktur:

  • XAPI-basierte Webservices: Siehe v.a. den XAPI URL Builder mit entsprechendem Osmosis-Befehl für das Overpass-API, das jxapi.openstreetmap.org und für rabler.ru (die MapQuest-Daten seien alt).
  • Die Startseite von OpenStreetMap hat eine Export-Funktion im OSM/XML-Format (reiner Download).
  • Mit derJOSM-Desktopapplikation gibt es einen Export nach OSM/XML.
  • OpenStreetMapData.com - Speziell geeignet für die Extraktion für Länder-, Gewässer- und Küsten-Grenzen der Welt.

Zuerst eine .OSM-Datei in ein lokales Verzeichnis kopieren, d.h.

  1. Kleinere Bereiche können online über die OSM-Startseite (d.h. das API) heruntergeladen werden.
  2. Grössere Ausschnitte können über Webdienste oder die JOSM-Desktopapplikation als OSM/XML oder direkt in einem GIS-Format exportiert werden (vgl. unten).
  3. Ansonsten gibt es noch ganze vorbereitete Datensätze...
    1. solche die in Mirrors mit Snaphsots nach Kontinent und Land geordnet angeboten werden. Siehe Planet.osm Snapshots.
    2. Bereits aufbereitete Shapefiles herunterladen von Geofabrik: Siehe OSM#OSM_zu_Shapefiles_konvertieren
    3. Der gesamte OSM-Datensatz kann ebenfalls über Planet.osm Snapshots heruntergeladen werden.

Dann muss man die Daten in ein GIS-Format konvertieren (z.B. mit OGR oder GeoConverter), falls die Daten im OSM/XML-Format sind. Man beachte auch, dass man die Daten direkt analysieren kann, vgl. dazu unten HowTo_OpenStreetMap#OSM-Daten_analysieren oder das PostGIS-Terminal.

Tipps zu OSM-Daten exportieren:

Tipp 1: Das Overpass-API ist ein schnelles und aktuelles API für den Online-Zugriff/Export von OSM-Daten (ganzer Planet); siehe dazu Overpass Turbo und die Overpass API-Doku. mit Verweis auf Server.

Tipp 2: siehe dazu XAPI mit demden XAPI URL Builder.

Tipp 3: Es gibt eine OSM2WEB-Instanz [2] auf http://www.gis-hosting.lu/examples/de/ (ganzer Planet). Hier ein Beispiel mit folgenden 'Parametern' (z.T. als URL-Subdirectories):

  • Geometrie = points (es gint noch lines und polygons)
  • Exportformat = GeoJSON
  • bbox = (Region Zürichsee min/max im selben SRID wie der SRID-Parameter,
  • SRID = 4326 (d.h WGS84, Default SRID/CRS ist EPSG 3857/9009l3)
 Beispielaufruf: http://www.gis-hosting.lu/osm2web/export/points/amenity/hospital.geojson?bbox=8.420,47.072,9.088,47.431&srid=4326 (*)

Soll auch für Webapplikationen geeignet sein, ist aber auf eine einzige key=value-Bedingung beschränkt, ie z.B. http://www.gis-hosting.lu/osm2web/export/points/cuisine/pizza.geojson?bbox=8.420,47.072,9.088,47.431&srid=4326 (vgl. [3] und die Tipps unten).

OSM-Daten (lokal) in ein GIS-Format konvertieren

Die meisten der folgenden Konverter werden im SVN-Repository des OSM-Projekts verwaltet:

  • osm2pgsql - Ein OSM-Daten to PostgreSQL/PostGIS-DB Converter und Loader. Siehe OSM-Technisches.
  • Osmosis - Importiert OSM planet files (OSM, MySQL, PostgreSQL). Siehe OSM-Technisches.
  • Osm2Csv - Converts an OSM planet file to files nodes.csv, ways.csv and waytags.csv (und dann...?).
  • Osmxapi (siehe unten).

Weitere:

  • Ein OSM-zu-GML-Skript (XSLT), das dann weiter z.B. nach Shapefile verarbeitet werden kann, z.B. mit OGR und GeoConverter: Siehe [4]
  • Osm2Csv - Converts an OSM planet file to files nodes.csv (id,lat,lon,timestamp,taglist) and ways.csv (id,timestamp,taglist) and waytags.csv (way-id,key,value). It does not use more memory if planet.osm is larger. It uses Java and the MinXML parser.
  • SQLite/SpatiaLite mit Hilfe der SpatiaLite-Tools 'spatialite_osm_map' und QGIS
  • FME

OSM-Daten direkt als GIS-Format herunterladen

Vektordaten von OSM können in GIS genutzt werden, gegeben man hält die ODbL-Lizenz ein und kennt die Besonderheiten von [[OSM], d.h. das spezielle Geometrie- und Tags-Schema. Für den Download der ganzen Welt in diesem Format siehe 'Downloading Data' im offiziellen OSM Wiki.

Es gibt inzwischen immer mehr Werkzeuge, mit denen man OSM-Daten selektieren (mind. räumlich) und als GIS-taugliches Format exportieren kann.

Direktes Exportieren mittels Webdienste in verschiedene GIS-Formate, wie z.B. Spatialite, Shapefile, GeoJSON, KML etc.:

  • OSMaxx
  • OSM2GIS - Webapplikation mit direktem Download und optionaler Transformation in die Formate Shapefile, MapInfo, KML, GML, SQLite (beschränkt auf einen Bereich von der Breite des Zürichsees und eine Konversion alle 30 min.)
  • OSM2WEB (Repository) - Python-basierter RESTfull Webservice mit einer Datenbankstruktur analog EOSMDBOne (osm2pgsql, PostGIS), der GeoJSON und KML zurückliefern kann. Siehe oben.

Nachfolgend ein Beispiel "Rollstuhlparkplätze der Schweiz":

  • Das Tagging-Schema dafür ist
 "amenity=parking" - und (logisch) 
 "capacity:disabled" ~* "[0-9]|yes|unknown" (das ist rechts ein sog. "regulärer Ausdruck"). 
 (es gibt nicht nur "capacity:disabled=yes" sondern auch "capacity:disabled=2" etc.) 

Variante PostGIS-Terminal (nur WKT und Schweiz)

1. Aufrufen von http://labs.geometa.info/postgisterminal, dann Copy&Paste folgender SQL-Anfrage in das Query-Fenster:

 SELECT ST_AsText(way) geom,
 COALESCE(name, )||' '||osm_id AS label
 FROM osm_poi
 WHERE tags @> hstore('amenity', 'parking')
 AND hstore("tags")->'capacity:disabled' ~* '[0-9]|yes|unknown'
 LIMIT 9999

2. Dann anschauen.
3. Falls Daten (im WKT-Format) gewünscht sind, den SELECT-Teil ersetzen mit "SELECT name, osm_id, gtype FROM ..." und Copy&Paste des Konsolen-Inhalts machen.

Daten der Schweiz (Stand Vorgestern). Kennt Punkte (POIs), Linien und Flächen; POI-Tabelle enthält sowohl Punkte wie auch Flächen. Kennt kein Export und kann höchstens GeoJSON. Mehr zum PostGIS_Terminal#Help.

Variante OSMaxx

  1. OSMaxx
  2. Download z.B. als GeoPackage.

Variante Overpass Turbo (nur im Browser und BBox)

  1. Query (Permalink): http://bit.ly/WCd6RK
  2. Interaktive Karte: http://bit.ly/X8pcmK
  3. OpenLayers-Karte: http://bit.ly/XRN6kD
  4. Download als GeoJSON und als Bild.

Schweiz ist nur als BBox abgegrenzt, gibt also mehr Daten zurück als gewünscht; JSON ist grössenmässig beschränkt (Browserkapazität) nur in Overpass Turbo verfügbar (per Copy&Paste). Etwas gewöhnungsbedürftige Query-Syntax. Hier mehr zu Overpass.

POI-Daten nutzen mit OpenPOIMap

Überblick:

  • Benutzer erfassen POIs im öffentlichen OpenStreetMap (OSM, siehe unten).
  • Am folgenden Tag sind die neuen Daten in OpenPOIMap verfügbar (in EOSMDBOne und zwar ab ca. 8 Uhr diejenigen Daten, die in OSM vor ca. 19:00 Uhr erfasst wurden).
  • Benutzer können POIs in OpenPOIMap direkt anschauen und interaktiv abfragen
  • Benutzer können die POIs direkt ins GIS integrieren mit Hilfe des OpenPOIMap Geo-Webservice (WFS)
  • Benutzer können POIs von OpenPOIMap herunterladen und je nach Format nutzen z.B. in...
    • Google Earth (KML)
    • GIS (Shapefile)
    • Navi/GPS (GPX)

Arbeitsschritte:

  • POIs in OpenPOIMap visualisieren und interaktiv abfragen (=> Tab 'Home')
    • Schritt 1: In OpenPOIMap Tab 'Home' einen Ausschnitt auf der Karte auswählen (Zoom, Pan & Geogr. Suche).
    • Schritt 2: Query-Beispiel auswählen (z.B. Hospitals/Spitäler) oder mit Hilfe von Tab 'Query Builder' eine Query selber definieren.
    • Schritt 3: Mit 'Show' das Resultat auf der Webkarte direkt ansehen.
    • Hinweis: Die POIs auf der Webkarte lassen sich durch Klicken auf ein Punktsymbol interaktiv abfragen. Ev. muss man näher hineinzoomen.
  • POIs herunterladen (=> Tab 'Download'):
    • Schritt 1: In OpenPOIMap Tab 'Home' einen Ausschnitt auf der Karte auswählen (Zoom, Pan & Geogr. Suche).
    • Schritt 2: Query definieren (z.B. in key 'Spital' eingeben und 'amenity=hospital' bestätigen).
    • Schritt 3: Export-Format wählen.
    • Schritt 4: Mit 'Download' Datei lokal speichern und damit selber weiterverarbeiten.
    • Hinweis: Es wird hier gemäss Vorgabe nur der Ausschnitt heruntergeladen. Durch Klick auf eine Checkbox kann auch der Bereich der ganzen Datenbank, d.h. die Schweiz, verwendet werden.
  • POIs als Webservice (WFS) nutzen (=> Tab 'Webservices'):
    • Schritt 1: Zuerst in Tab 'Home' die Query definieren, (z.B. in key 'Spital' eingeben und 'amenity=hospital' bestätigen).
    • Schritt 2: In Tab 'Webservices' die Basis-URL des WFS-Webservices kopieren und im eigenen System eingeben.
    • Hinweis: Es wird hier immer die ganze Datenbank, d.h. die Schweiz, verwendet.

Routing-Daten nutzen mit ArcGIS oder QGIS

  • QGIS: Import in SQLite/SpatiaLite mit Hilfe der SpatiaLite-Tools 'spatialite_osm_net'.
  • ArcGIS: tbd.

Upload nach OSM

  • Sog. Imports unterstehen strengen Bedingungen
  • Software-Libraries:
    • Python wrapper for the OSM API osmapi (github)
    • "OGR-to-OSM" - Erweiterung von OGR (OSM Import) für den OSM Export: ogr2osm