Speicherung und Verarbeitung von Geodaten mit Oracle Spatial DOAG Webinar am 10.02.2017 Andreas Jordan, ORDIX AG info@ordix.de http://www.ordix.de
Agenda Einführung Der Datentyp Spatial Queries ohne Index Der räumliche Index Spatial Queries mit Index Nützliche Links
Einführung
Was sind räumliche Daten/Geodaten? Beschreiben Teil der Erdoberfläche Die darauf befindlichen technischen und administrativen Einrichtungen Beantworten die Fragen Wo sich ein Objekt im Raum befindet (Lage im Raum) Wie seine physische Struktur geschaffen ist (Geometrie) Werden in einem geografischen Referenzsystem mittels Koordinaten verortet
Besonderheiten Nicht so einfach vergleichbar Numerische Werte können getestet werden, ob sie größer, kleiner oder gleich sind Zeichenketten können auf Übereinstimmungen getestet werden Viele Operationen nicht auf Geodaten ausführbar Summenbildung Durchschnittsberechnung
Typen (1/2) Punkt Linie Polygon (Fläche) Wiesbaden Kreuzberger Ring ORDIX AG
Typen (2/2) Punkt Einzelnes Koordinatenpaar Linie Verbindung zwischen mehreren Punkten Wenn Startpunkt = Endpunkt geschlossene Linie (Ring) Polygon (Fläche) Geschlossener Linienzug Dürfen Löcher besitzen (die dann auch durch Polygone dargestellt werden) Sammlung Multipunkt, -linie, -polygon Kombination Kombiniertes Element aus verschiedenen Typen
Der Datentyp
Informationen über Geodaten Typ, z.b. Punkt Linie Polygon (Fläche) Informationen zum Typ, z.b. Linie durch Kreisbögen verbunden Linie durch gerade Streckenzüge verbunden Geografisches Bezugssystem Koordinaten Speicherung in einem zusammengesetzten Datentyp
Der Typ SDO_GEOMETRY Zentraler Datentyp zur Speicherung von räumlichen Daten SDO_GEOMETRY( SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES ); NUMBER, NUMBER, MDSYS.SDO_POINT_TYPE, MDSYS.SDO_ELEM_INFO_ARRAY, MDSYS.SDO_ORDINATE_ARRAY
Punkte (1/2) Einzelnes Koordinatenpaar X: 8.2264 Y: 49.9838 Position des Stadions vom 1. FSV Mainz 05
Punkte (2/2) SDO_GEOMETRY( 2001, 4326, SDO_POINT_TYPE(8.2264, 49.9838, NULL), NULL, NULL ); SDO_GEOMETRY( SDO_GTYPE, SDO_SRID, SDO_POINT, SDO_ELEM_INFO, SDO_ORDINATES );
Polygone (1/2) Geschlossener Linienzug Fläche Stadion des SV Darmstadt (bestehend aus mehreren Polygonen)
Polygone (2/2) SDO_GEOMETRY( 2003, 4326, NULL, SDO_ELEM_INFO_ARRAY (1, 1003, 1), SDO_ORDINATE_ARRAY (x1, y1, x2, y2, x3, y3, x1, y1) ); SDO_GEOMETRY( SDO_GTYPE, SDO_SRID, SDO_POINT, SDO_ELEM_INFO, SDO_ORDINATES );
Spatial Queries ohne Index
Toleranz Bei der Verwendung von Funktionen ist meist die Angabe einer Toleranz notwendig Die Toleranz gibt an, ab wann zwei Geometrien als gleich angesehen werden Höhere Toleranzen bedeuten nicht weniger Rechenaufwand (Performance- Vorteil) Zu hohe Toleranzen führen zu ungültigen Geometrien Toleranzen müssen zu Geometrien passen
SDO_DISTANCE (1/2) Berechnet den Abstand zwischen zwei Geometrien Eintracht Frankfurt 1. FSV Mainz 05
SDO_DISTANCE (2/2) Syntax: SDO_GEOM.SDO_DISTANCE ( geometry1 IN SDO_GEOMETRY, geometry2 IN SDO_GEOMETRY, tolerance IN NUMBER [, unit IN VARCHAR2] ) RETURN NUMBER; SELECT SDO_GEOM.SDO_DISTANCE( v1.geometrie, v2.geometrie, 1, 'UNIT=KM' ) FROM vereine v1, vereine v2;
SDO_INTERSECTION (1/2) Liefert die Schnittmenge zwischen zwei Geometrien zurück
SDO_INTERSECTION (2/2) Syntax: SDO_GEOM.SDO_INTERSECTION ( geometry1 IN SDO_GEOMETRY, geometry2 IN SDO_GEOMETRY, tolerance IN NUMBER ) RETURN SDO_GEOMETRY; SELECT SDO_GEOM.SDO_INTERSECTION( he.geometrie, rlp.geometrie, 1 ) grenze_he_rlp FROM bundeslaender he, bundeslaender rlp WHERE he.name = 'Hessen' AND rlp.name = 'Rheinland-Pfalz';
Der räumliche Index
Allgemein Indizes Ermitteln relevante Datensätze Beschleunigen die Suche Basieren auf Sortierung Räumliche Daten sind nicht so einfach zu sortieren! R-Tree Indizes
Funktionsweise von R-Tree Indizes X 1 D A 2 B 3 E 4 B A C 5 F 6 C 7 G 8 D E F G 1 2 3 4 5 6 7 8
Spatial Queries mit Index
SDO_NN (1/2) Identifiziert den nearest neighbour (nächsten Nachbarn) einer Geometrie Schalke 04 Borussia Dortmund Borussia Mönchengladbach Bayer Leverkusen FC Köln
SDO_NN (2/2) Syntax: SDO_NN( geometry1 IN SDO_GEOMETRY, geometry2 IN SDO_GEOMETRY, param IN VARCHAR2 [, number IN NUMBER] ) RETURN VARCHAR2; SELECT v1.name, v2.name FROM vereine v1, vereine v2 WHERE SDO_NN( v1.geometrie, v2.geometrie, 'sdo_num_res=2' ) = 'TRUE';
SDO_RELATE (1/2) Gibt an, ob zwei Geometrien eine bestimmte räumliche Beziehung zueinander haben Rheinland-Pfalz Rheinland-Pfalz
SDO_RELATE (2/2) Syntax: SDO_RELATE( geometry1 IN SDO_GEOMETRY, geometry2 IN SDO_GEOMETRY, param IN VARCHAR2 ) RETURN VARCHAR2; SELECT v.name, b.name FROM bundeslaender b, vereine v WHERE SDO_RELATE ( b.geometrie, v.geometrie, 'mask = contains' ) = 'TRUE';
Nützliche Links
Nützliche Links Spatial Developer's Guide https://docs.oracle.com/database/121/spatl/toc.htm Locator Spatial https://docs.oracle.com/cd/e11882_01/license.112/e47877/options.htm#dblic157
ORDIX AG Aktiengesellschaft für Softwareentwicklung, Schulung, Beratung und Systemintegration Zentrale Paderborn Karl-Schurz-Straße 19a 33100 Paderborn Tel.: 05251 1063-0 Fax: 0180 1 67349 0 Seminarzentrum Wiesbaden Kreuzberger Ring 13 65205 Wiesbaden Tel.: 0611 77840-00 Vielen Dank für Ihre Aufmerksamkeit! mailto:seminare@ordix.de http://seminare.ordix.de