Thema5_Folien_Winter - Informatik

Werbung
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?
Herunterladen