OSM-Datenbeschaffung

Werbung
Datenbeschaffung über OSM
Stefan Maihack Dipl. Ing. (FH)
Datum: 21.04.2015
1
MySQL – Datenbeschaffung
1. Möglichkeit - Osmosis
•
•
•
•
•
•
Osmosis ist ein Commandoline-Tool zum Verarbeiten von OSM-Daten
Anwendungsbeispiele:
Erstellen von Dumps (Datenbankauszüge) aus einer Planet.osm (OSM.Datei der
ganzen Erde).
Importieren von Planetendumps in eine Datenbank
Änderungs-Datensätze (Change Sets) unter Benutzung der Datenbank „history
tables“ (Tabellen von Änderungen) erzeugen.
Change Sets auf eine lokale Datenbank anwenden.
Zwei Planet-Dateien vergleichen und Änderungs-Datensätze (Change Set) daraus
erstellen.
Neusortieren von Daten in einer Planet Datei.
Daten aus einem rechteckigen Kartenausschnitt (Bounding Box) oder einem
Polygon extrahieren.
2
MySQL – Datenbeschaffung
1. Möglichkeit - Osmosis
•
Die folgenden Schritte erläutern einen Weg, wie man Daten von OpenStreetMap in
eigene MySQL-Dateien überträgt.
1. Das Datenbankmodell muss vorhanden sein.
2. Daten von OpenStreetMap downloaden.
Über OSM-Homepage: über OSM-Homepage XML-Daten eines Kartenausschnitts
herunterladen.
Planet-Datei: Die Datei „planet-latest.osm.bz2“ downloaden.
Länder-Extrakte: Firmen, wie z.B. „geofabrik“ bieten Länderextrakte auf ihrer
Downloadseite an.
OSM-Datei selbst zuschneiden: Das Programm „OSMOSIS“ dient dazu
OSM-Dateien zu bearbeiten, so kann man Dateien
umwandeln, Teile (geographisch und/oder thematisch)
herauskopieren.
http://wiki.openstreetmap.org/wiki/Osmosis
3
MySQL – Datenbeschaffung
1. Möglichkeit - Osmosis
OSMOSIS-Befehl der alle Arztadressen aus der Boundingbox von Bruchsal heraus sucht.
time /t
..\osmosis\bin\osmosis --read-xml file="baden-wuerttemberg.osm.bz2„
--bb left=8.3294 right=8.8684 bottom=49.0235 top=49.2364
--tf accept-nodes amenity=doctors
--write-xml "aerzte_Bruchsal.osm„
time /t
(Zeitpunkt ausgeben)
(Datenquelle)
(Rechteckausschnitt)
(Schlüssel)
(Schlüsselwert)
(Zeitpunkt ausgeben)
4
MySQL – Datenbeschaffung
OSM-Datentypen
•
•
Grundlegende Datentypen:
Die Daten bestehen entweder aus Punkte, Linien (Sammlung von Punkten) oder
Relationen (Gruppen von Objekte). Auch kann jedes Objekt noch sogenannte Tags
haben.
Eigenschaften der Daten:
Punkte (nodes) werden durch ihre Koordinaten (in WGS-84) verortet und können
alle möglichen „Points of Interest“ beschreiben, z. B. Geschäfte, Sehenswürdigkeiten
etc.
Linien (ways) beschreiben linienhafte Objekte, z.B. Straßen. Wenn Linien
geschlossen sind, so können sie als Polygone angesehen werden (hängt von dem
Tag ab) und können dadurch alle Art von Flächen beschreiben (Gebäude und
Wasserflächen).
Relationen gruppieren Objekte thematisch zusammen, wobei jedes Objekt eine
Rolle zugewiesen bekommt.
5
MySQL – Datenbeschaffung
Eigenschaften der OSM-Daten
•
•
•
OSM lässt prinzipiell alle möglichen Schlüssel und Werte zu.
Alle Elemente sollten in Englisch eingetragen werden.
Folgende Themengebiete sind in den Daten enthalten:
Wege, Barrieren, Fahrradwege, Wirtschaftswege,
Wasserläufe, Eisenbahn, Flughafen, Seilbahnen,
Energieversorgung, Zivilisationsbauten/Kunstbauten,
Freizeit, Nutzung/Einrichtung, Amt / Büro / Dienststelle / Geschäftsstelle,
Geschäfte, Handwerk, Notfall, Tourismus, Historisch, Landnutzung,
Militär, Natur, Geologie
• Link zu den möglichen Schlüssel-Werte-Paare
http://wiki.openstreetmap.org/wiki/DE:Map_Features
6
MySQL – Datenbeschaffung
Eigenschaften der OSM-Daten
•
•
Ein Tag ist eine Beschreibung eines Objektes in der OSM zur Kategorisierung und
zur Auszeichnung mit zusätzlichen Informationen.
Beispiele: (http://wiki.openstreetmap.org/wiki/DE:Map_Features)
Das Tag highway dient der Weise, um Straßen zu kennzeichnen. Es gibt
Vereinbarungen über ihre Verwendung in den einzelnen Ländern, die auf der WikiOSM Steite beschrieben sind.
Das Tag highway fallen auch die ganzen Wasserwege; Bäche, Flüße,etc.
Das Tag landuse wird benutzt für Wohngebiete, Mischgebiete. Unter dieses Tag
fallen auch die Einkaufszentren, die dann als Polygon gekennzeichnet werden.
Das Tag leisure werden Orte beschrieben, die Hauptsächlich mit der Gestaltung
der Freizeit zusammenhängen.
Das Tag natural beschreibt natürliche Elemente, wie z.B. Landschaften oder
geologische Gegebenheiten.
7
MySQL – Datenbeschaffung
Eigenschaften der OSM-Daten - Beispiele
8
MySQL – Datenbeschaffung
OSMOSIS
•
•
•
•
Osmosis dient dazu OSM-Dateien zu bearbeiten, so kann man Dateien umwandeln,
Teile (geographisch und/oder thematisch) extrahieren, u.s.w.
Osmosis ist ein Kommandozeilen-Programm.
Installation:
1. Das Programm herunterladen (http://wiki.openstreetmap.org/wiki/Osmosis)
2. Die Datei entpacken, man erhält folgende Verzeichnisse:
/bin
/config
/lib
/script
changes
copying
readme
Beispiel: Die Stadt Wien aus den Komplettdaten von Österreich herausschneiden:
osmosis-0.38/bin/osmosis --read-pbf file=austria.osm.pbf --bounding-box top=48.502
left=15.479 bottom=48.325 right=15.718 completeWays=yes --write-xml
file=map.osm
9
MySQL – Datenbeschaffung
Die wichtigsten OSMOSIS-Befehle
•
•
•
•
•
•
–read-xml file: Input osm-file
–bb: Befehl zum Extrahieren
left, right, bottom, top: Begrenzungen der bounding box
–tf: Filtern von Tags (key=value). Hier: highway=bus_stop für alle Bushaltestellen.
accept-nodes: Nodes werden für die Filterung akzeptiert. Hier könnte auch noch „–tf
reject-ways“ bzw. „–tf reject-relations“ stehen. Dies würde bedeuten, dass ways und
relations nicht beachtet werden.
–write-xml: extrahierte und neu geschriebene Ausgabedatei
Befehle zum extrahieren aller Bushaltestellen der Heidelberger Altstadt:
osmosis --read-xml file="baden-wuerttemberg.osm" --bb
left=8.69661 right=8.71781 bottom=49.40548 top=49.41488
--tf accept-nodes highway=bus_stop --write-xml "busstop_hd_altstadt.osm"
10
MySQL – Datenbeschaffung
OSMOSIS-Beispiele
•
Zwei Beispiele, die Nürnberg und einen kleinen Bereich darum aus einer
Deutschland-OSM-Datei oder möglicherweise einer Planet.osm-Datei extrahieren:
osmosis \ --read-xml enableDateParsing=no file=germany.osm.bz2
\ --bounding-box top=49.5138 left=10.9351 bottom=49.3866
right=11.201 \ --write-xml nürnberg.osm.bz2
bzcat planet.osm.bz2 | osmosis \ --read-xml
enableDateParsing=no file=/dev/stdin \ --bounding-box
top=49.5138 left=10.9351 bottom=49.3866 right=11.201 \ --writexml file=-\ | bzip2 > nürnberg.osm.bz2
•
Der zweite Ansatz verwendet bzip2 direkt zum extrahieren und komprimieren, weil es
effektiver ist als der eingebaute Archivierer.
•
bzcat ist das Werkzeug, dass man auch unter Windows einsetzen sollte, wenn man
gute Performance haben möchte. Nur ist /dev/stdin kein gültiger Dateipfad in
Windows. Aber man kann CONIN$ als Pfadangabe verwenden.
11
MySQL – Datenbeschaffung
OSMOSIS-Beispiele
Alle administrativen Grenzen in Baden-Württemberg werden extrahiert.
osmosis --read-xml baden-wuerttemberg.osm --tf accept-relations
boundary=administrative --used-way --used-node --wx admin_grenzen.osm
Nürnberg und einen kleinen Bereich darum aus der Deutschland-OSM-Datei extrahieren
osmosis \ --read-xml enableDateParsing=no file=germany.osm.bz2 \
--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 \
--write-xml nürnberg.osm.bz2
12
MySQL – Datenbeschaffung
OSMOSIS-Beispiele
Erstellen von 16 individuellen BZ2-OSM-Files
osmosis \ --rx full/planet.osm.bz2 \ --tee 16 \ --bp
file=polygons/europe/germany/baden-wuerttemberg.poly \ --wx badenwuerttemberg.osm.bz2 \ --bp file=polygons/europe/germany/bayern.poly \ --wx
bayern.osm.bz2 \ --bp file=polygons/europe/germany/berlin.poly \ --wx
berlin.osm.bz2 \ --bp file=polygons/europe/germany/brandenburg.poly \ --wx
brandenburg.osm.bz2 \ --bp file=polygons/europe/germany/bremen.poly \ --wx
bremen.osm.bz2 \ --bp file=polygons/europe/germany/hamburg.poly \ --wx
hamburg.osm.bz2 \ --bp file=polygons/europe/germany/hessen.poly \ --wx
hessen.osm.bz2 \ --bp file=polygons/europe/germany/mecklenburgvorpommern.poly \ --wx mecklenburg-vorpommern.osm.bz2 \ --bp
file=polygons/europe/germany/niedersachsen.poly \ --wx
niedersachsen.osm.bz2 \ --bp file=polygons/europe/germany/nordrheinwestfalen.poly \ --wx nordrhein-westfalen.osm.bz2 \ --bp
file=polygons/europe/germany/rheinland-pfalz.poly \ --wx rheinlandpfalz.osm.bz2 \ --bp file=polygons/europe/germany/saarland.poly \ --wx
saarland.osm.bz2 \ --bp file=polygons/europe/germany/sachsen-anhalt.poly \
--wx sachsen-anhalt.osm.bz2 \ --bp
file=polygons/europe/germany/sachsen.poly \ --wx sachsen.osm.bz2 \ --bp
file=polygons/europe/germany/schleswig-holstein.poly \ --wx schleswigholstein.osm.bz2 \ --bp file=polygons/europe/germany/thueringen.poly \ --wx
13
thueringen.osm.bz2
MySQL – Datenbeschaffung
OSMOSIS
•
Der einfachste Weg, um die Koordinaten für einen Rechteck-Ausschnitt zu
bestimmen, ist der "Export"-Reiter auf www.openstreetmap.org - dort kann man ein
Rechteck markieren, dabei werden die Koordinaten angezeigt.
14
MySQL – Datenbeschaffung
OSMOSIS - Datengröße
•
•
•
Europe-latest.osm
Karlsruhe
Karlsruhe_tram
•
Koordinaten Bruchsal
49,2389
8,3898
49,0093
8,8062
196 GB (als bz2 nur 18GB)
245 MB
7,6 MB
15
Datenbeschaffung
2. Möglichkeit – overpass-turbo.eu
• Tool um die enormen Datenmengen von OpenStreeMap zu
durchsuchen.
• Overpass-turbo benutzt eine eigene Abfragesprache.
• Funktionsweise:
Der overpass-Client setzt direkt Abfragen an die OSM-Karten.
Zurück kommen dann die Daten, die durch die Abfrage
abgesprochen wurden.
• Welche Abfragen sind z.B. möglich?
Abfrage nach Timestamps (z.B. letzte Änderungen)
Abfrage nach User
Suche in einem Polygon
…
Datenbeschaffung
2. Möglichkeit – overpass-turbo.eu
• Seitenaufrufe/Benutzer
17
Datenbeschaffung
2. Möglichkeit – overpass-turbo.eu
• Exportdatenformate von Overpass-Turbo
GEOJSON
GPX
KML
Rohdaten
GIST
18
GIS-Formate
GeoJSON
• Das GeoJSON – Format (GEO JavaScript Object Notation)
• einfaches kompaktes Datenformat in einer einfach lesbaren
Textform zum Zweck des Datenaustauschs zwischen
Anwendungen.
• Jedes gültige JOSN-Dokument soll ein gültiges Javascript sein und
per „eval()“ interpretiert werden können.
• Die Funktionen umfassen:
Punkte (z.B.: Adressen, Standorte)
Linienzüge (z.B.: Straßen, Autobahnen, Grenzen)
Poilygone (z.B.: Länder, Provinzen, Landflächen)
• Unterschied zu XML: XML ist eine Auszeichnungssprache dadurch
vielseitiger einsetzbar als JOSN (Nur Datenaustauschformat).
JOSN hat XML aufgrund seiner Einfachheit zurückgedrängt.
• Sinnvoll für direkte JavaScript-Nutzung.
19
GIS-Formate
GeoJSON
Im Vergleich ist in diesem Beispiel die XML-Datei 29% größer als die JOSN-Datei
JOSN
XML
20
GIS-Formate
GPX
• GPX – GPS Exchange Format: Datenformat zur Speicherung von
Geodaten (ursprüngliche für GPS-Daten).
• Entwickelt von der Firma TopoGrafix.
• Basiert auf dem allgemeinen XML-Standard. Ein XML-Schema
beschreibt die Elemente und den Aufbau des GPS Exchange
Formats.
• Das Daten-Schema ist erweiterbar. Normalerweise nur Wegpunkte,
Routen und Tracks. Erweiterbar um z.B.: Autor, Beschreibung etc.
• XML-Daten lassen sich nicht gut in Standard-Datenbanken
speichern und verarbeiten.
21
GIS-Formate
KML
• KML ist eine Auszeichnungssprache zur Beschreibung von
Geodaten.
• Bekannt wurde sie durch die Anwendung im GoogleEarthProgramm.
• KML befolgt die XML-Syntax, liegt in der Version 2.2 vor und ist ein
Standard des Open Geospatial Consortium.
• KML-Dokumente können Geodaten sowohl in Vektor- wie auch in
Rasterform beinhalten.
• Vektorobjekte wie Punkte, Linien, lineare Ringe, Polygone oder
COLLADA-Modelle werden als Placemark-Elemente und Luft- und
Satellitenbilder als GroundOverlay-Elemente modelliert.
• Da es sich um XML-Daten handelt, lassen sich auch nur schlecht
mit herkömmlichen Datenbanken verarbeiten.
22
GIS-Formate
Rohdaten
• Beim Rohdatenformat handelt es sich um das OSM-Format XMLDaten.
• Da es sich auch hier um XML-Daten handelt, lassen sich auch nur
schlecht mit herkömmlichen Datenbanken verarbeiten.
23
GIS-Formate
Umwandeln der XML-Geodaten
• Da es sich bei den Overpass-Turbo-Formaten fast ausschließlich
um XML-Daten handelt, müssen diese eine Tabellenähnliche
Struktur umgewandelt werden.
• Als Werkzeug dient z.B. Excel und ein Texteditor, der reguläre
Ausdrücke verarbeiten kann.
24
Aufbereiten der Daten mittels
Excel
1. Aus OVERPASS-TURBO heraus XML-Daten exportieren.
ACHTUNG: Die Datei muss die Endung XML besitzen.
2. Excel hat aus den XML-Daten eine Tabelle erstellt. Die nicht
notwendigen Spalten eliminieren.
25
MySQL – Datenbeschaffung
Aufbereiten der Daten mittels Tabellenkalkulationsprogramme (z.B. Excel) XML-Daten
aufbereiten:
26
MySQL – Datenbeschaffung
•
4. Ladedatei für MySQL mit den Daten aus OSM erstellen.
/* create table "aerzte_bruchsal" */
DROP TABLE IF EXISTS aerzte_bruchsal;
SHOW WARNINGS;
CREATE TABLE IF NOT EXISTS aerzte_bruchsal(
id INT(2),
Stadt VARCHAR(20),
Land VARCHAR(5),
Hausnummer VARCHAR(10),
Postleitzahl VARCHAR(5),
Straße VARCHAR(30,)
Arztart VARCHAR(30),
Name VARCHAR(20),
Rollstuhl VARCHAR(10),
lat Float(10),
lon Float(10),
PRIMARY KEY (id)
);
SHOW WARNINGS;
/*Insert values into table*/
INSERT INTO aerzte_bruchsal (id, Stadt, Land, Hausnummer, Postleitzahl, Straße, Arztart, Name, Rollstuhl, lat, lon) VALUES
(1,'Dettenheim', 'DE','137a','76706','Hauptstraße','Doktor','Dr. Wächter','limited',49.1655136,8.4151351),
(2,'Bad Schönborn-Mingolsheim','DE','3a','76669','Hebelstraße','Doktor','Dr. Zimmermann','limited',49.2237108, 8.6387469),
49,2237108
8,6387469
name
Dr. Wittek
49,2200384
8,6368942
amenity
doctors
49,2200384
8,6368942
name
Dr. D. Baierl und Dr. A. Grahmann-Baierl
49,2200384
8,6368942
wheelchair
no
49,1248666
8,5929033
amenity
doctors
49,1248666
8,5929033
healthcare
centre
49,1248666
8,5929033
name
Ärztehaus Postcenter
49,1248666
8,5929033
wheelchair
yes
27
MySQL – Datenbeschaffung
• Vorgehensweise:
1. Exportieren der Exceltabellen in CSV-Dateien (Comma-separatedValue)
2. CSV-Dateien in einem Texteditor bearbeiten, so dass für den
INSERT-Befehl eine fast korrekte Syntax entsteht. Am besten mit
Hilfe von Regulären Ausdrücken.
28
MySQL – Datenbeschaffung
Verwendung Regulärer Ausdrücke
•
Suche in allen Textstellen in einer Markierung, die
Groß- und Kleinbuchstaben enthalten
Suche nach: ([A-Z a-z]+)
Ersetze durch: ´\1´
•
Ein Komma statt einem Leerzeichen einfügen
Egal was noch kommt,
Es ist eine Gruppe
Suche nach: ([A-Z]+) ([A-Z]+) ([A-Z]+) ([0-9]+ (.*)
Ersetze durch: \1,\2,\3,\4,\5
•
Beginn des INSERT´s. Erstes Zeichen in einer Zeile
wird ´(
Suche nach: (^)
Ersetze durch: \(´\1
•
Ende des INSERT´s. Letzte Zeichen in einer Zeile wird
),
Suche nach: ($)
Ersetze durch: ´\), \1
29
MySQL – Datenbeschaffung
OSMOSIS - Beispiele
•
Extrahiert komplett Karlsruhe aus Europadaten:
osmosis --read-xml enableDateParsing=no file=europe-latest.osm --bounding-box
top=49.1310 left=8.2013 bottom=48.9008 right=8.6177 --write-xml file=karlsruhe.osm
•
Extrahiert aus den Daten von Karlsruhe Haltestellen und Bahnlinien
osmosis --read-xml karlsruhe.osm --way-key-value
keyValueList="railway.tram,railway.tram_stop" --used-node --write-xml
karlsruhe_tram.osm
•
Extrahiert alle Restaurants in Karlsruhe:
osmosis --read-xml karlsruhe.osm --way-key-value keyValueList=„amenity.restaurant"
--used-node --write-xml karlsruhe_tram.osm
•
Verwendung eines Packprogramms
bzcat downloaded.osm.bz2 | osmosis --read-xml enableDateParsing=no file=- -bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 --write-xml
file=- | bzip2 > extracted.osm.bz2
30
JOSM –
OSM-Daten visualisieren
31
MySQL – Datenbeschaffung
Linksammlung
•
•
•
•
•
•
OSMOSIS Download-Seite (enthält auch einige Beispiele)
http://wiki.openstreetmap.org/wiki/Osmosis
Liste aller möglichen Parameter von OSMOSIS:
http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage
OpenStreetmaps Datenextrakte
http://download.geofabrik.de/
OpenStreeMap-FAQ
http://www.openstreetmap.de/faq.html
Overpass-turbo
http://overpass-turbo.eu/
JOSM
https://josm.openstreetmap.de/
32
MySQL – Datenbeschaffung
Die Ladedatei
* Erstellen einer MySQL-Ladedatei
001 /* Data are taken from Dortmund but reduced and
002 changed to suit different aspects. */
003 DROP DATABASE IF EXISTS sample;
004 SHOW WARNINGS;
005 CREATE DATABASE IF NOT EXISTS sample
006 DEFAULT CHARACTER SET utf8 COLLATE
utf8_unicode_ci;
007 SHOW WARNINGS;
008 USE sample;
009 SHOW WARNINGS;
010 DROP TABLE IF EXISTS routes;
011 SHOW WARNINGS;
012 CREATE TABLE IF NOT EXISTS routes (
013 id INT2,
014 name VARCHAR(10) BINARY,
015 color VARCHAR(10) BINARY,
016 colorhex VARCHAR(10) BINARY,
017 PRIMARY KEY (id)
018 );
019 SHOW WARNINGS;
33
MySQL – Datenbeschaffung
Die Ladedatei - Constraints
Löschen einer Tabelle und Kreieren mit Schlüssel und Constraints
(Sql/sample.sql)
003 DROP DATABASE IF EXISTS sample;
005 CREATE DATABASE IF NOT EXISTS sample
006 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
008 USE sample;
056 DROP TABLE IF EXISTS s_r;
058 CREATE TABLE IF NOT EXISTS s_r (
059 s_id INT2,
060 r_id INT2,
061 seq INT2 UNSIGNED DEFAULT NULL,
062 spa INT4 DEFAULT NULL,
063 dur TIME DEFAULT NULL,
064 PRIMARY KEY (s_id, r_id),
065 FOREIGN KEY (s_id) REFERENCES stops(id),
066 FOREIGN KEY (r_id) REFERENCES routes(id)
067 );
Auflistung möglicher
Contraints:
•
•
•
•
•
NOT NULL:
der Skalar darf nicht Null sein.
PRIMARY KEY:
der Skalar muss einzigartig und
nicht NULL sein.
Foreign Key:
der Skalar muss auf referentielle
Integrität geprüft sein.
UNIQUE:
der Skalar muss innerhalb eines
Attributes einzigartig sein.
CHECK():
explizite Überprüfungsanweisung
34
MySQL – Datenbeschaffung
Übung 1
•
Aufgabe:
1. Erstellen Sie ein ER-Modell ihrer Studienarbeit
2. Extrahieren sie die Daten aus OpenStreetMap
3. Erzeugen sie analog zu den MySQL-Tabellen Excel-Tabellen und befüllen Sie
diese mit Daten.
4. Erstellen Sie die Datenbank mittels SQL-Script in MySQL.
5. Füllen Sie eine Tabelle davon mit dem SQL-Kommando INSERT.
35
Herunterladen