mobile GIS
Open Source Geodatenbanken
Benjamin Winter
Einführung
Internet auf Smartphones
integrierte GPS-Sensoren in vielen Geräten
→ einfache Möglichkeit seinen Standort
mitzuteilen
daher große Menge an Geodaten
Zur effizienten Verwaltung sind Datenbanksysteme notwendig
Open Source Systeme bieten guten Einstieg
Inhalt
Geschichte der Open-Source
Geodatenbankysteme
PostGIS
MySQL
SpatiaLite
Funktionsumfang
Anwendungsbeispiele
SpatiaLite
Geschichte
PostGIS
Entwicklung beginnt 2001
GEOS-Bibliothek entsteht
Portierung von JTS Topology Suite nach C++
2003 Simple Feature Access vollständig
implementiert
2006/2007 Fokus auf SQL/MM Standard
Beschreibt mehr geometrische Objekte
Geschichte
MySQL
Räumliche Erweiterungen seit 2003 (v 4.1)
Seit 2005 (v5.0.16) Unterstützung für mehr
Engines
Nur für MyISAM Storage Engine
InnoDB, NDB, BDB, Archive
Exakte topologische Prädikate seit v5.6.1 (11.
April 2011)
Intersects, Touches, Overlaps
Geschichte
SpatiaLite
Erweiterung von SQLite
Entwicklungsbeginn März 2008
Integration der GEOS-Bibliothek seit Juni 2008
Integration der PROJ.4 Bibliothek seit
September 2008
Standard ”Simple Feature Access” vollständig
implementiert
Ermöglicht Koordinatentransformationen
Seit Dez 2009 Optimierungen, neue Funktionen
Letzte Entwicklerversion Nov 2010
Funktionsumfang
MySQL
Kleinster Funktionsumfang
Simple Feature Access nur zu großen Teilen
umgesetzt
Keine Verschneidungsoperationen (Union,
Intersection)
SRID außer Speicherung keine
Berücksichtigung in Berechnungen
Zugrundeliegendes Koordinatensystem wird immer
als planar Betrachtet
Funktionsumfang
SpatiaLite
Aufbau auf SQLite
Eingeschränkte SQL-Funktionen:
ALTER TABLE: nur RENAME und ADD COLUMN
möglich
DELETE, INSERT, UPDATE nicht möglich auf
Views
Trigger: FOR EACH STATEMENT nicht
implementiert
Funktionsumfang
SpatiaLite
Nutzt GEOS und PROJ.4 Bibliotheken
Simple Feature Access vollständig implementiert
Transformation von Geodaten in verschiedene
Koordinatensysteme möglich
Unterstützt Module zum Zugriff auf beliebige
Datenquellen
Enthaltene Module:
VirtualShape: liest und schreibt Shapefiles
VirtualText: liest CSV-Dateien
VirtualNetwork: Routing mit Dijkstra-Algorithmus
Anwendungsbeispiele
Vorbereitungen
SpatiaLite als Datenbanksystem
Keine Installation und Einrichtung nötig
Benötigt:
spatialite-gui (direkt ausführbare Datei)
http://www.gaia-gis.it/spatialite/binaries.html
Beispieldatenbank: world.sqlite
http://www.gaia-gis.it/spatialite/world.7z (gepackt)
Anwendungsbeispiele
Anwendungsbeispiele
Geodaten anzeigen
Anwendungsbeispiele
Neueinträge
SQL-Statement:
SELECT WUP_AGGL,
AsText(Geometry)
FROM Cities
WHERE CNTRY_Name LIKE
'Germany';
Beispiel einer Zeile:
Munich | POINT(11.5833
48.1333)
Augsburg ist noch
nicht enthalten
Welche Koordinaten
hat Augsburg?
Anwendungsbeispiele
Neueintrag
In Wikipedia Stadt suchen
und auf den Link mit den
Koordinaten klicken
zweite Zeile sieht
brauchbar aus
Koordinaten von München
in Datenbank vertauscht
und nicht komplett
identisch
Analog: Well-Known-Text
von Augsburg ist
POINT(10.898333
48.371667)
Anwendungsbeispiele
Neueintrag
Anwendungsbeispiele
Neueintrag
Anwendungsbeispiele
räumliche Lagebeziehungen
Alle Städte innerhalb
Deutschlands suchen
SQL:
SELECT WUP_AGGL AS
Name FROM Cities, Countries
WHERE
Countries.CNTRY_Name LIKE
'Germany'
AND
Contains(Countries.Geometry,
Cities.Geometry);
Anwendungsbeispiele
Entfernungsmessung
Luftlinie zwischen Universität Augsburg und
Königsplatz soll gemessen werden
Diese Orte müssen noch eingetragen werden
Einfacher Weg, um an die Koordinaten zu
kommen: http://openrouteservice.org/
gesuchten Ort als Startpunkt eingeben
grünen Pfeil in Kartenansicht auf exakte Position
verschieben
Koordinaten aus dem Eingabefeld des Startpunktes
auselesen
Anwendungsbeispiel
Entfernungsmessung
Ansichtsausschnitt der Seite
http://openrouteservice.org/
Anwendungsbeispiel
Entfernungsmessung
gewünschte Positionen eintragen:
INSERT INTO Cities(WUP_AGGL, Geometry)
VALUES('Augsburg UNI',
GeomFromText('POINT(10.898868 48.333856)',
4326));
INSERT INTO Cities(WUP_AGGL, Geometry)
VALUES('Augsburg Königsplatz',
GeomFromText('POINT(10.894311 48.365317)',
4326));
Anwendungsbeispiel
Entfernungsmessung
Entfernung messen:
SELECT DISTANCE(
(SELECT Geometry FROM Cities WHERE
WUP_AGGL LIKE 'Augsburg UNI'),
(SELECT Geometry FROM Cities WHERE
WUP_AGGL LIKE 'Augsburg Königsplatz')) AS
'Entfernung';
Ergebnis: 0.031789
Was für eine Einheit?
Anwendungsbeispiel
Entfernungsmessung
Anwendungsbeispiel
Entfernungsmessung
Vorher in geeignetes Koordinatensystem
transformieren:
SELECT DISTANCE(
(SELECT Transform(Geometry,32632) FROM Cities
WHERE WUP_AGGL LIKE 'Augsburg UNI'),
(SELECT Transform(Geometry,32632) FROM Cities
WHERE WUP_AGGL LIKE 'Augsburg Königsplatz'))
AS 'Entfernung(m)';
Ergebnis: 3514.086873
Anwendungsbeispiel
Umkreisbestimmung
Ziel: alle Orte in einem bestimmten Umkreis
bestimmen
Beispiel: Städte herausfinden, die im Umkreis
von 130 km um ”Augsburg UNI” liegen
Zwei Möglichkeiten:
1. Messung der Entfernung von Augsburg UNI zu
jedem Ort in der Datenbank
2. filtern der Orte durch ”MBR, minimal bounding
rectangle” und nur Messung der Entfernung
innerhalb dieses Rechtecks
Anwendungsbeispiele
Umkreisbestimmung
Zweite Möglichkeit ist schneller, da MBRs
effizient von der Datenbank verwaltet werden
können
Exakte Entfernung muss trotzdem noch
gemessen werden, da MBR keinen Kreis
beschreiben
minimal bounding rectangle
En
t fe
rn
un
g
Anwendungsbeispiele
Umkreisbestimmung
Entfernung in Metern, Geodaten mit
geeignetem Koordinatensystem verwenden
Geodaten von Augsburg UNI in
Koordinatensystem mit SRID 32632
herausfinden
SELECT ASTEXT(Transform(Geometry,32632)) FROM Cities
WHERE WUP_AGGL LIKE 'Augsburg UNI';
Ergebnis: POINT(640727.734896 5355150.367024)
Anwendungsbeispiel
Umkreisbestimmung ohne MBR
SQL-Statement:
SELECT WUP_AGGL FROM Cities
WHERE DISTANCE(
PointFromText('POINT(640727.734896
5355150.367024)', 32632),
Transform(Geometry,32632)) <= 130000;
Ergebnis:
Augsburg, Augsburg UNI, Augsburg
Königsplatz, München und Nürnberg
Anwendungsbeispiel
Umkreisbestimmung mit MBR
Erstellen eines MBR mit Radius 130 km um
Augsburg UNI:
BuildCircleMBR(640727.734896, 5355150.367024,
130000, 32632)
finden der Städte in diesem Rechteck mit
MBRContains(...)
Exakte Entfernungsbestimmung mittels
Distance(...)
Anwendungsbeispiel
Umkreisbestimmung mit MBR
Komplettes Statement:
SELECT WUP_AGGL FROM Cities WHERE
MBRContains(
BuildCircleMBR(640727.734896,
5355150.367024, 130000, 32632),
Transform(Geometry,32632))
AND Distance(
PointfromText('POINT(640727.734896
5355150.367024)', 32632),
Transform(Geometry,32632)) <= 130000;
Ergebnis: Augsburg, Augsburg UNI, Augsburg
Königsplatz, München und Nürnberg
Anwendungsbeispiel
Zeitmessung
Kein subjektiver Geschwindigkeitsunterschied
zwischen beiden Varianten zur Umkreisbestimmung
Exakte Zeitmessung nur mit Kommandozeilenversion von SpatiaLite möglich
Befehl ”.timer on” wird schaltet Zeitmessung ein
Dauer einer Abfrage wird nach dem Ergebnis
dieser angezeigt
Anwendungsbeispiel
Zeitmessung - Beispiel
Verwendete Hardware: Netbook mit einer CPUTaktrate von 800 Mhz
Durchschnittliche Dauer der
Umkreisbestimmung ohne MBR
Durchschnittliche Dauer der
Umkreisbestimmung mit MBR
ca 0,4 Sekunden
ca 0,36 Sekunden
Geschwindigkeitsvorteil ca 11%
Vielen Dank für die
Aufmerksamkeit
Fragen?