<Insert Picture Here> Das Navi in der Datenbank Oracle11g has NAVTEQ on Board Carsten Czarski Oracle Deutschland B.V. & Co KG Oracle: Die offene Geodatenbank • Native Datentypen • Vektordaten und Rasterdaten (Satellitenbilder) • Offene Zugriffe mit SQL, Java, .NET, ... • Enge Integration zwischen Sachdaten und Geodaten • Offen und Standardkonform • Unterstützt von allen GIS-Systemen GIS 1 SQL SQL GIS 2 “Spatial enabled” Business Intelligence Eigene Abfragen Offene Geodaten – offene Plattform! Fachliche Komponenten Konkrete Lösungsapplikation Fachliche Lösungen Oracle Application Server MapViewer 3rd-Party Oracle Maps Kartendarstellung WMS Dienste Routenberechnung Web Service Oracle Application Server Geodaten Sachdaten Oracle Database andere Daten Geodaten / Räumliche Abfragen Räumliche Indizes Verschneidungen Daten-Manipulationen Oracle Spatial Objektrelationale Implementierung • Datentyp SDO_GEOMETRY Tabelle Gemeinde ID NUMBER NAME VARCHAR2 SDO_GTYPE SDO_SRID SDO_POINT SDO_ELEM_INFO SDO_ORDINATES GRENZE SDO_GEOMETRY NUMBER NUMBER SDO_POINT_TYPE SDO_ELEM_INFO_ARRAY SDO_ORDINATE_ARRAY ODF Dataset installieren Transportable Tablespace • NAVTEQ liefert Oracle-Datendateien aus • Betriebssystem-Copy auf den Datenbankserver • Spatial-Indizes vorberechnet • Installation der Metadaten (Data Dictionary) • 150GB ODF EU Dataset: ~ 15 – 20 Minuten NAVTEQ Download ODF Daten-Datei expdat.dmp Daten-Datei expdat.dmp ODF-Daten einspielen: Vorgehensweise • Dateien auspacken und kopieren • Meta-Daten importieren impdp dumpfile=expdat.dmp directory=dumpdest transport_datafiles=/space2/oradata/usercp.dbf logfile=odf_import.log • Tablespaces READ WRITE setzen • Zusätzliche Operationen (Installation Guide beachten) • Spatial Indizes initialisieren • Styles, Themes und Maps für Kartendarstellung kopieren • Netzwerk-Metadaten einrichten ODF Daten einspielen: Tipps • Von NAVTEQ vorgeschlagenes Schema akzeptieren • ODF_EU_Q310 für Dataset Q3/2010 • ODF_EU_Q111 für Dataset Q1/2011 Mehrere Datasets gleichzeitig möglich • Anderen Connect-User verwenden • Bspw. GEOCODE • SELECT-Privilegien vergeben (GRANT) • Private oder öffentliche Synonyme einrichten Austausch des Datasets damit transparent möglich ODF Teil I: Map Display • Daten für Kartendarstellung • Tabellen mit Präfix MAP, NTC und WOM • Darstellungsvorschriften für Oracle MapViewer enthalten • Oracle Locator auf Datenbankseite ausreichend ODF Daten Teil II: Geocoding • Umwandlung von Adressen in Koordinaten … • Tabellen mit Präfix GC • Geocoder ist Teil der Spatial Option select sdo_gcdr.geocode( 'ODF_EU_Q111', sdo_keywordarray('Riesstr. 25','München'), 'DE', 'DEFAULT' ) as geocode from dual / GEOCODE ----------------------------------------------------------------------------SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'Riesstrasse', NULL, NULL, 'München', 'München', 'BAYERN', 'DE', NULL, NULL, NULL, NULL, '25', 'RIES', 'STRASSE', 'F', 'F', NULL, NULL, 'L', ,5, 52901891, '????#ENUT?B281CP?', 1, 'DEFAULT', 11,536734, 48,1800773, ???10101010??401?') Geocoder Ablauf des Geocoding Referenzdaten NAVTEQ ODF Postalische Adresse Koordinaten und Adresskorrekturen Parsing Adressstrukturen Fehlertolerante Suche Straßen, Platz und Ortsnamen Erzeugung der Koordinate Geometrien PL/SQL Funktionen für den Geocoder • SDO_GCDR.GEOCODE Liefert ein Ergebnis als SDO_GEO_ADDR-Objekt zurück – dieses enthält … • die (korrigierte) Adresse, • die Koordinate • den Matchvektor mit Qualitätinformationen • SDO_GCDR.GEOCODE_ALL Empfohlene Funktion: Liefert ein SDO_GEO_ADDR-Array mit allen passenden Geocoding-Ergenissen zurück. • SDO_GCDR.GEOCODE_AS_GEOMETRY Liefert nur ein SDO_GEOMETRY-Objekt mit der ermittelten Koordinate. Qualitätssicherung mit dem Matchvector • String mit einer Länge von 17 Stellen • Jede Position entspricht einem Adresselement wie "Straße", "Hausnummer", "Ort", … Wert Bedeutung 0 MATCHED Angegebenes Adresselement passt zu den Daten 1 ABSENT Element nicht angegeben und nicht ersetzt 2 CORRECTED Angegebenes Element wurde durch orrigiertes ersetzt. 3 IGNORED Angegebens Element passte nicht und wurde ignoriert 4 SUPPLIED Element wurde nicht angegeben und vom Geocoder ermittelt. Point Adressing Feature • Geocoding anhand von Hauskoordinaten Position 3 im Matchvektor steht • Tabelle GC_ADDRESS_POINT_NVT für Point Adress. • Wird vom Geocoder genutzt, sobald vorhanden Eine "0" steht für eine gefundene Hauskoordinate • Für Deutschland: 19.160.328 Einträge (ODF Q1/2011) select sdo_gcdr.geocode( user, sdo_keywordarray('Adalperostr 80' ,'Ismaning'), 'DE', 'DEFAULT' ) as GEOCODE from dual; GEOCODE ---------------------------------------------------------------------------SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'Adalperostrasse', NULL, NULL, 'Ismaning', 'Ismaning', 'BAYERN', 'DE', '85737', NULL, '85737', NULL, '80', 'ADALPERO', 'STRASSE', 'F', 'F', NULL, NULL, 'R', ,5, 737273516, '??X?#ENUT?B281CP?', 1, 'DEFAULT', 11,68466, 48,22957, '??010101010??404?') Reverse Geocoding mit Oracle Spatial • Umwandlung einer Koordinate in eine Adresse ... SQL> select sdo_gcdr.reverse_geocode( 'ODF_EU_Q111', sdo_geometry(2001, 8307, sdo_point_type(11.5, 48.2, null), null, null), 'DE' ) as GEOCODE from dual; GEOCODE -----------------------------------------------------------------SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'Am Blütenanger', NULL, NULL, NULL, 'München', 'Bayern', 'DE', '80995', NULL, '80995', NULL, NULL, 'AM BLÜTENANGER', NULL, 'F', 'F', NULL, NULL, 'R', ,048815353, 782916555, '', 1, 'DEFAULT', 11,4998663, 48,2003543, '???11141114??404?') 1 Zeile wurde ausgewählt. Koordinaten Geocoder Ablauf des Reverse Geocoding Adresse Referenzdaten NAVTEQ ODF Finde Road Segment Geometries Ermittle Hausnummer Geometries Suche Adressdetails Street and place names ODF Daten Teil III: Routing • Tabellen NODE, EDGE, PARTITION und SIGN_POST • Nutzung mit Oracle Routing Engine sofort möglich • Auch direkter API Zugriff auf das Netzwerk • Einmaliges Einrichten nach Daten-Installation NAVTEQ ODF Routing Dataset Oracle Routing Engine in Aktion Oracle Routing Engine • Routenberechnung im Netzwerk • Basisdaten in NAVTEQ ODF enthalten • Java-Architektur • Routing Engine selbst läuft in der Mittelschicht • Netzwerk liegt in der Datenbank • Kommunikation mit XML über HTTP • Teil der Spatial Option Routing Engine: Kommunikation Routing-Netzwerk im ODF-Dataset • Enge Integration mit dem Geocoder GEOCODE -----------------------------------------------------------------SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'Am Blütenanger', NULL, NULL, NULL, 'München', 'Bayern', 'DE', '80995', NULL, '80995', NULL, NULL, 'AM BLÜTENANGER', NULL, 'F', 'F', NULL, NULL, 'R', ,048815353, 782916555, '', 1, 'DEFAULT', 11,4998663, 48,2003543, '???11141114??404?') select start_node_id, end_node_id, length, name from NDM_EU_Q111_LINK$ where link_id = 782916555 START_NODE_ID END_NODE_ID LENGTH NAME ------------- ----------- ---------- ------------------------59509700 851457063 476,16 Am Blütenanger 1 Zeile wurde ausgewählt. Netzwerk in der Datenbank • Auch direkte Netzwerkoperationen möglich • Routing mit eigenen, speziellen Anforderungen • Eigene Kostenbetrachtungen • Gesperrte Gebiete • Teil der Spatial-Option • Java-API LogicalSubPath routePath = osmNetAnalyst.shortestPathDijkstra( new PointOnNet(piStartNode), new PointOnNet(piEndNode), myNetworkConstraintObject ); Netzwerkberechnung: Shortest Path Netzwerkberechnung: Shortest Path Nun mit einer gesperrten Zone Oracle Spatial-Technologie Lizensierung • Oracle Locator • Alle Editionen (XE, SE-1, PE, SE, EE) • Oracle Spatial • Lizenzpflichtige Option (EE) Geocoding, Rasterdaten, Topology Data Model, Network Data Model, Linear Referencing … • Oracle MapViewer • Oracle Fusion Middleware – Alle Editionen • Welche Funktionen enthält der "Locator"? Oracle Spatial Developers' Guide, App. B [email protected] http://tinyurl.com/apexcommunity http://sql-plsql-de.blogspot.com http://oracle-text-de.blogspot.com http://oracle-spatial.blogspot.com http://plsqlexecoscomm.sourceforge.net http://plsqlmailclient.sourceforge.net Twitter: @cczarski @oraclebudb