Date post: | 15-Jul-2015 |
Category: |
Data & Analytics |
Upload: | karin-patenge |
View: | 141 times |
Download: | 0 times |
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Geokodieren direkt in der Oracle Datenbank mit der Option Spatial and Graph
Karin Patenge | [email protected] Leitende Systemberaterin Oracle Deutschland B.V. & Co. KG | GS Potsdam Stand: 10. März 2015
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
3
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Adressdatenbestände ... ... in Koordinaten umrechnen und auf Karten darstellen können
4
Worum geht es?
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Agenda
GEOKODIEREN MIT SPATIAL - THEORIE
GEOKODIEREN MIT SPATIAL - PRAXIS
ZUSAMMEN-FASSUNG
DATEN / FACHLICHE ANFORDERUNGEN
5
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT SPATIAL - THEORIE
GEOKODIEREN MIT SPATIAL - PRAXIS
ZUSAMMN-FASSUNG
DATEN / FACHLICHE ANFORDERUNGEN
6
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Aspekte bezogen auf Adressdatenbestände
Aktualität
Quellen
Art der Erhebung
Validierungen
Formate
Kodierungen
Umfang
Häufigkeit der Aktualisierung
Qualität
Systeme
Anwendungen
Fachliche Anforderungen
Aus Adressen Geokoordinaten berechnen
Raumbezogene Daten auf Karten anzeigen
Raumbezogene Daten räumlich auswerten
Raumbezogene Daten im Zusammenhang mit anderen Daten analysieren und darstellen. Andere Daten können sein: • Unternehmenseigene Daten • Sozio-demografische Daten • Marktdaten • ...
7
Daten und Fachliche Anforderungen
DATEN / FACHLICHE ANFORDERUNGEN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Daten und Datenqualität (1)
ID Sonder- /potentieller Problem-Fall Beispieldatensatz
1 Hausnummer mit Zusatz Dorfstrasse 49a;03058;Kahlow Dorfstrasse 8a;03058;Auras
2 Fehlender Wert für Strasse im Quelldatenbestand <null>;03149;Bohrau
3 Straße wird für den Ort + PLZ nicht im Referenzdatenbestand geführt
Forster Strasse 13;03149;Bohrau
4 „Point of Interest-Angabe“ anstelle Straßenname Trauerhalle;03149;Bohrau
5 Straßenkreuzungen als Straßenname Eichenallee/Schulstrasse;03197;Jänschwalde
6 Kein Straßenname, nur Hausnummer Nr. 11;0185;Grötsch
7 Zusammengesetzte Hausnummer Dünenweg 26/28;03149;Forst
8 Unzulässige Verkettung im Ortsnamen. Fehlender Straßenname
<null>;03149;Gosda + OT Klinge
8
Anhand der Beispieldaten - Erhebung der Daten ohne Werkzeugunterstützung
DATEN / FACHLICHE ANFORDERUNGEN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Daten und Datenqualität (2)
ID Sonder- /Problem-Fall Beispieldatensatz
10 Unzulässige Verkettung in der Ortsangabe Strasse des Aufbaus;03139;Schwarze Pumpe bis Großkoschen
11 Unzulässige Verkettung in der Ortsangabe Bautzener Strasse 4;02959; Viereichen,Nappatsch,Altliebel
12 Verkettung mit Bundesland in der Orstangabe Siedlung 5;02953;Gablenz (Sachsen)
13 Ort nicht im Referenzdatenbestand (wegen falscher Schreibweise im Quelldatenbestand)
Schäfereiweg 3;02797;Klein-Partwitz
9
Anhand der Beispieldaten - Erhebung der Daten ohne Werkzeugunterstützung
DATEN / FACHLICHE ANFORDERUNGEN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
DATEN / FACHLICHE ANFORDERUNGEN
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT SPATIAL - THEORIE
GEOKODIEREN MIT SPATIAL - PRAXIS
ZUSAMMEN-FASSUNG
DATEN / FACHLICHE ANFORDERUNGEN
11
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Begrifflichkeiten rund um Geokodierung mit Oracle Spatial and Graph
Begriff Erläuterung
Oracle Spatial and Graph Lizenzpflichtige Option zur Oracle Datenbank Enterprise Edition. Beinhaltet eine Geocoding Engine.
Oracle Locator Funktionalität jeder Edition der Oracle Datenbank (XE, SE, EE) zum Management, der Prozessierung und Auswertung von 2D Vektordaten.
Point of Interest (POI) Ein Ort von (besonderem) Interesse. Im Allgemeinen im Zusammenhang mit Routenberechnung in Navigationssystemen verwendet.
Geocoding Vorgang der Berechnung von Geokoordinaten aus einer Adress- oder „Point of Interest“-Information. Im Ergebnis enthalten ist die Geokoordinate sowie normalisierte Adressinformationen.
Reverse Geocoding Vorgang der Berechnung von Adressinformationen aus einer Geokoordinate.
SDO_GEOMETRY Standard-konformer (ISO, OGC) Datentyp für die Speicherung von Vektordaten (2D, 3D, 4D) in der Oracle Datenbank.
SRID Spatial Reference Identifier. Identifikationsnummer für räumliche Bezugsysteme. Ist ein Attribut des Datentyps SDO_GEOMETRY.
WGS84 World Geodetic System. Weltweit gültiges räumliches Bezugssystem. 2 gültige SRIDs in der Oracle Datenbank: EPSG:4326 und 8307.
12
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Das PL/SQL Package SDO_GCDR
13
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
• Implementierung der Geokodierung – Geocoding und Reverse Geocoding
– Einzeladress- und Batch-Anfragen
– Formatierte und unformatierte Adressen
– Kundenspezifische Parsing-Profile
– Geokodierung von Points of Interest
– Kreuzungsbasierte Geokodierung (derzeit nur für USA)
– http://docs.oracle.com/database/121/SPATL/sdo_geocode_ref.htm#SPATL145
• Im Schema MDSYS
• Funktionalität der Datenbank Option Oracle Spatial and Graph
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Prozess der Geokodierung
1. Parsen der Adresse
2. Suche nach Treffern im Referenzdaten-bestand
3. Berechnung der Geokoordinate als Punktgeometrie
14
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Ge
oco
der
(SD
O_G
CD
R) Address Parsing
Searching and Cleansing
Coordinate Generation
Adresse (Text)
Geokoordinate (Lon/Lat) und korrigierte Adressinformationen
Referenzdatenbestand
Address Structure
Street and Place Names
Geometries
Oracle Geocoder Architektur
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Metadaten
Datenset-/Länder-spezifische Daten
15
Datenmodell für den Referenzdatenbestand
GC_COUNTRY_PROFILE
GC_PARSER_PROFILE
GC_PARSER_PROFILEAFS
GC_ROAD_xx
GC_ROAD_SEGMENT_xx
GC_AREA_xx
GC_POSTAL_CODE_xx
GC_POI_xx
GC_INTERSECTION_xx
GC_ADDRESS_POINT_xx
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
1. Parsen von (internationalen) Adressen
Adresselement Deutschland Vereinigte Staaten
Vollständige Adresse Vom-Stein-Straße 1 03050 Cottbus
Schiffbauergasse 14 14467 Potsdam
3746 Connecticut Avenue NW Washington, D.C. 20008
House number 1 14 3746
Street base name Vom Stein Schiffbauer Connecticut
Street type -Straße Gasse Avenue
Street suffix NW
City Cottbus Potsdam Washington
Postal code 03050 14467 20008
Municipality D.C.
16
Referenztabelle: GC_PARSER_PROFILEAFS
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
2. Suche nach Treffern im Referenzdatenbestand
17
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
• Gibt Liste der Straßennamen mit der größten Übereinstimmung zum Adresselement zurück GC_ROAD_xx
• Fuzzy-Suche mit Berücksichtigung von Ungenauigkeiten
– SOUNDEX-Funktion
– Fehlerhafte Schreibweisen
– Unterschiedliche Schreibweisen (Str., Strasse, Straße, -Str.) GC_COUNTRY_PROFILES
– Fehlende Adresselemente Rückgabe von approximierten Adressen auf Basis anderer Adresselemente (z.B. City oder Postal code). Einstellung über Parameter MATCHMODE.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Berücksichtigung von Ungenauigkeiten
Modus Beschreibung
EXACT All attributes of the input address must match the data used for geocoding. However, if the house or building number, base name (street name), street type, street prefix, and street suffix do not all match the geocoding data, a location in the first match found in the following is returned: postal code, city or town (settlement) within the state, and state. For example, if the street name is incorrect but a valid postal code is specified, a location in the postal code is returned.
RELAX_STREET_TYPE The street type can be different from the data used for geocoding. For example, if Main St is in the data used for geocoding, Main Street would also match that, as would Main Blvd if there was no Main Blvd and no other street type named Main in the relevant area.
RELAX_POI_NAME The name of the point of interest does not have to match the data used for geocoding. For example, if Jones State Park is in the data used for geocoding, Jones State Pk and Jones Park would also match as long as there were no ambiguities or other matches in the data.
RELAX_HOUSE_NUMBER The house or building number and street type can be different from the data used for geocoding. For example, if 123 Main St is in the data used for geocoding, 123 Main Lane and 124 Main St would also match as long as there were no ambiguities or other matches in the data.
18
MATCHMODE (1)
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
http://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL811
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Berücksichtigung von Ungenauigkeiten
Modus Beschreibung
RELAX_BASE_NAME The base name of the street, the house or building number, and the street type can be different from the data used for geocoding. For example, if Pleasant Valley is the base name of a street in the data used for geocoding, Pleasant Vale would also match as long as there were no ambiguities or other matches in the data.
RELAX_POSTAL_CODE The postal code (if provided), base name, house or building number, and street type can be different from the data used for geocoding.
RELAX_BUILTUP_AREA The address can be outside the city specified as long as it is within the same county. Also includes the characteristics of RELAX_POSTAL_CODE.
RELAX_ALL Equivalent to RELAX_BUILTUP_AREA.
DEFAULT Equivalent to RELAX_POSTAL_CODE.
19
MATCHMODE (2)
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
http://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL811
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
3. Berechnung der Geokoordinate und noch viel mehr
• Rückgabewert ist eine Geo-Adresse
– Datentyp: SDO_GEO_ADDR • Geokoordinaten als Längen- und Breitengrad
• Räumliches Bezugssystem ist typischerweise WGS84 (Oracle SRID:8307)
• Zusätzliche Informationen zum Geokodierungs-Prozess und für die Interpretation des Rückgabewertes
– MATCHCODE, ERRORMESSAGE, MATCHVECTOR
• Normalisierte Adresse – Zusätzliche Adresselemente wie Bundesland, Region, Straßenseite
20
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Adresselement Wert
ID
ADDRESSLINES
PLACENAME
STREETNAME Schiffbauergasse
INTERSECSTREET
SECUNIT
SETTLEMENT Potsdam
MUNICIPALITY Potsdam
REGION BRANDENBURG
COUNTRY DE
POSTALCODE 14467
Adresselement Wert
POSTALADDONCODE
FULLPOSTALCODE
POBOX
HOUSENUMBER 14
BASENAME SCHIFFBAUER
STREETTYPE GASSE
STREETTYPEBEFOR F
STREETTYPEATTACHED F
STREETPREFIX
STREETSUFFIX
SIDE R
21
Geo-Adresse für: Schiffbauergasse 14, 14467 Potsdam
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Adresselement Wert
PERCENT .75
EDGEID 748777426
ERRORMESSAGE ??X?#ENUT?B281CP?
MATCHVECTOR ??010101010??400?
MATCHCODE 1 = Exact match
MATCHMODE DEFAULT
LONGITUDE 13.07432
LATITUDE 52.40411
SRID 8307
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Interpretation einer Geo-Adresse
Wert Beschreibung der Treffergüte
1 Exact match: the city name, postal code, street base name, street type (and suffix or prefix or both, if applicable), and house or building number match the data used for geocoding.
2 The city name, postal code, street base name, and house or building number match the data used for geocoding, but the street type, suffix, or prefix does not match.
3 The city name, postal code, and street base name match the data used for geocoding, but the house or building number does not match.
4 The city name and postal code match the data used for geocoding, but the street address does not match.
10 The city name matches the data used for geocoding, but the postal code does not match.
11 The postal code matches the data used for geocoding, but the city name does not match.
12 The region matches the data in the geocoder schema, but the city name and postal code do not match.
22
MATCHCODE: Umgang mit Ungenauigkeiten
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
http://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL813
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Interpretation einer Geo-Adresse
Position Attribut Wert bei Match
1-2 (Reserved for future use) ??
3 Address Point X
4 POI Name O
5 House or Building Number
#
6 Street Prefix E
7 Street Base Name N
8 Street Suffix U
23
ERRORMESSAGE
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
http://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL815
Position Attribut Wert bei Match
9 Street Type T
10 Secondary Unit S
11 Built-up area or City B
12-13 (Reserved) (Ignore values)
14 Region 1
15 Country C
16 Postal Code P
17 Postal Add-on Code A
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Interpretation einer Geo-Adresse
Position Attribut
1-2 (Reserved for future use)
3 Address Point
POI Name
5 House or Building Number
6 Street Prefix
7 Street Base Name
8 Street Suffix
24
MATCHVECTOR
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
http://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL817
Position Attribut
9 Street Type
10 Secondary Unit
11 Built-up area or City
14 Region
15 Country
16 Postal Code
17 Postal Add-on Code
Wert Interpretation
0 The input attribute is not null and is matched with a non-null value.
1 The input attribute is null and is matched with a null value.
2 The input attribute is not null and is replaced by a different non-null value.
3 The input attribute is not null and is replaced by a null value.
4 The input attribute is null and is replaced by a non-null value.
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Range Based Geocoding (interpoliert)
Point Address Based Geocoding (hausnummerngenau)
25
Hausnummern-Berechnung GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Prozess der Rückwärts-Geokodierung
1. Suche nach passendem Straßensegment
2. Berechnen der Hausnummer (durch Approximation oder hausgenau)
3. Rückgabe der kompletten Adressinformation
26
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Ge
oco
der
(SD
O_G
CD
R)
Find Road Segment
Compute House Number
Fill Address Details
Geokoordinate (Lon/Lat)
Adresse
Referenzdatenbestand
Geometries
Geometries
Street and Place Names
Oracle Geocoder Architektur
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zusammenfassung
• Oracle Spatial and Graph mit Built-in Geocoding Functions
• Zugriff auf Geocoding Funktionen mittels 2 APIs: – SQL: Nutzen von PL/SQL Funktionen (Package SDO_GCDR)
– XML: Senden von XML Requests an einen Web Service (http://maps.oracle.com/geocoder)
• Passender Referenzdatenbestand muss beim Datenanbieter erworben werden. Bereitstellung im Oracle Delivery Format (i.A. Transportable Tablespace) für den direkten Import in die Oracle Datenbank mit Oracle Data Pump.
• Format der Referenzdaten muss das Geocoding Datenmodell für den Oracle Spatial Geocoder abbilden
• Datenanbieter sind u.a. : TomTom, HERE, dds
• Beispieldatensets stehen u.a. im Oracle Technology Network (OTN) bereit: – http://www.oracle.com/technetwork/database/options/spatial/spatial-partners-data-087203.html
27
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Hilfreiche Informationen und Links • Oracle Spatial 12c Developer Guide auf OTN Geocode Address Data
https://docs.oracle.com/database/121/SPATL/sdo_geocode_concepts.htm#SPATL045
• Whitepaper: Geocoding in Oracle using HERE Map Content in Oracle Delivery Format (Dan Abugov, HERE): http://download.oracle.com/otndocs/products/spatial/pdf/GeocodingInOracleUsing_HERE_MapContent.pdf
• Oracle eLocation Services using HERE Map Content: http://maps.oracle.com/elocation http://maps.oracle.com/geocoder
• Oracle Spatial Summit 2014 Materialien Workshop 4: http://download.oracle.com/otndocs/products/spatial/pdf/oss14/BuildDriveTimeApplicationWorkshop-Red.pdf
• Oracle Spatial Blog (Deutsch) http://oracle-spatial.blogspot.co.uk/2013/11/umrechnung-von-adressen-in-koordinaten.html
28
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT SPATIAL - THEORIE
GEOKODIEREN MIT SPATIAL - PRAXIS
ZUSAMMEN-FASSUNG
DATEN / FACHLICHE ANFORDERUNGEN
30
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Alle nachfolgenden Praxis-beipiele basieren auf dem Referenzdatenbestand von Oracle Partner HERE Stand: Q3 / FY13
Region: Europa
31
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• Referenzdatenbestand
– HERE Datenset für Europa Q3/2013 im Oracle Delivery Format (ODF) Oracle DB Schema ODF_EU_Q313 • Andere Datenanbieter analog !
32
In die Datenbank geschaut
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
GC_COUNTRY_PROFILE
GC_PARSER_PROFILE
GC_PARSER_PROFILEAFS
GC_ROAD_xx
GC_ROAD_SEGMENT_xx
GC_AREA_xx
GC_POSTAL_CODE_xx
GC_POI_xx
GC_INTERSECTION_xx
GC_ADDRESS_POINT_xx grant SELECT on USER.GC_<table_name> to PUBLIC;
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
• Das SDO_GCDR Package
• Der Datentyp SDO_GEO_ADDR
• Erste Anfrage zur Geokodierung für eine unformatierte Adresse
– SDO_GCDR.GEOCODE
33
In die Datenbank geschaut
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
describe sdo_gcdr; describe sdo_geo_addr; -- Adresse: Schiffbauergasse 14, Potsdam select sdo_gcdr.geocode( 'ODF_EU_Q313', sdo_keywordarray( 'Schiffbauergasse 14', 'Potsdam'), 'DE', 'DEFAULT') from dual; /* Ergebnis ist ein (hier hausnummergenau) geokodiertes SDO_GEO_ADDR-Objekt */ MDSYS.SDO_GEO_ADDR(0MDSYS.SDO_KEYWORDARRAY(),NULL,'Schiffbauergasse',NULL,NULL,'Potsdam','Potsdam','BRANDENBURG','DE','14467',NULL,'14467',NULL,'14','SCHIFFBAUER','GASSE','F','F',NULL,NULL,'R',0.75,748777426,'??X?#ENUT?B281CP?',1,'DEFAULT',13.07432,52.40411,'??010101010??404?',8307)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
SDO_GCDR.GEOCODE_ALL select sdo_gcdr.geocode_all( 'ODF_EU_Q313', sdo_keywordarray(‘Schiffbauergasse, Potsdam’), 'DE', 'DEFAULT') from dual;
Gibt Liste von geokodierten Adressen, zurück die sich auf den Mittelpunkt jedes vorhandenen Straßensegments beziehen.
SDO_GCDR.GEOCODE_ADDR
select sdo_gcdr.geocode_addr( 'ODF_EU_Q313', sdo_geo_addr ( 'DE', -- COUNTRY 'DEFAULT', -- MATCHMODE 'Schiffbauergasse', -- STREET 'Potsdam', -- SETTLEMENT null, -- MUNICIPALITY null, -- REGION '14467' -- POSTALCODE )) from dual;
Gibt den zuerst gefundenen Treffer zu einer formatierten Adresse geokodiert zurück.
34
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Weitere Unterprogramme von SDO_GCDR (1)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
SDO_GCDR.GEOCODE_ADDR_ALL
select sdo_gcdr.geocode_addr_all( 'ODF_EU_Q313', sdo_geo_addr ( 'DE', 'DEFAULT', 'Hauptstr.', 'Berlin', null, null, null ), 10 -- Maximale Anzahl an Treffern ) from dual;
Gibt eine Liste der ersten (hier 10) Treffer zu einer formatierten Adresse geokodiert zurück.
SDO_GCDR.REVERSE_GEOCODE select sdo_gcdr.reverse_geocode( 'ODF_EU_Q313', sdo_geometry( 2001, 8307, sdo_point_type(14.33442,51.73696, null), null, null), 'DE') from dual;
Gibt eine geokodierte Adresse zu einer Geokoordinate zurück. Längen- und Breitengrad in der Geoadresse können von den Eingabekoordinaten abweichen, da sie sich auf ein Straßensegment beziehen.
35
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Weitere Unterprogramme von SDO_GCDR (2)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
SDO_GCDR.GEOCODE_AS_GEOMETRY
select sdo_gcdr.geocode_as_geometry( 'ODF_EU_Q313', sdo_keywordarray( 'Schiffbauergasse 14', 'Potsdam'), 'DE') from dual;
Gibt die Geokoordinate (Punktgeometrie) für eine unformatierte Adresse zurück. Der angewendete MATCHMODE ist DEFAULT. Keine MATCHCODE Rückgabe.
36
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Weitere Unterprogramme von SDO_GCDR (3)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
POI Geokodierung mit SDO_GCDR.GEOCODE
select sdo_gcdr.geocode ( 'ODF_EU_Q313', sdo_keywordarray( 'Congress-Hotel am Stadtpark', 'Hannover'), 'DE', 'DEFAULT') from dual;
Gibt den besten Treffer einer Geo-Adresse zurück . Eingabewert ist ein Point of Interest.
37
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Geokodierung von Points of Interest (1)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Nutzerdefinierte PL/SQL Funktion
create or replace function get_addr_from_poi( placename varchar2, country varchar2) return sdo_geo_addr deterministic as addr sdo_geo_addr ; begin addr := sdo_geo_addr(); addr.placename := upper(placename); addr.country := country; addr.matchmode := 'RELAX_POI_NAME'; return addr; end; /
Anwendung
select sdo_gcdr.geocode_addr( 'ODF_EU_Q313', get_addr_from_poi( 'Aussichtspunkt Tagebau Nochten', 'DE')) from dual; -- Ergebnis ist ein SDO_GEO_ADDR-Objekt MDSYS.SDO_GEO_ADDR(MDSYS.SDO_KEYWORDARRAY(),'AUSSICHTSPUNKT TAGEBAU NOCHTEN',NULL,NULL,NULL,NULL,'WEIßKEIßEL','SACHSEN','DE','02957',NULL,'02957',NULL,NULL,NULL,NULL,'F','F',NULL,NULL,'L',0,565435489,'???O#ENUT?B281CP?',1,'DEFAULT',14.65726,51.47583,'???01111111??404?',8307)
38
Geokodierung von Points of Interest (2)
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
Formatierung der Ausgabe von SDO_GCDR.REVERSE_GEOCODE
select g.geo_addr.streetname, g.geo_addr.housenumber, g.geo_addr.postalcode, g.geo_addr.settlement, g.geo_addr.municipality, g.geo_addr.region from ( select sdo_gcdr.reverse_geocode( user, sdo_geometry( 2001, 8307, sdo_point_type( 14.33442,51.73696, null), null, null), 'DE') geo_addr from dual) g;
Gibt einzelne Adressinformationen einer gefundenen Geo-Adresse zurück.
39
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Einzelne Adresselemente einer Geo-Adresse (1)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
Formatierung der Ausgabe von SDO_GCDR.REVERSE_GEOCODE. Alternative mittels WITH-Clause.
with geo_addr_obj as ( select sdo_gcdr.reverse_geocode( user, sdo_geometry( 2001, 8307, sdo_point_type( 14.33442,51.73696, null), null, null), 'DE') geo_addr from dual) select g.geo_addr.streetname, g.geo_addr.housenumber, g.geo_addr.postalcode, g.geo_addr.settlement, g.geo_addr.municipality, g.geo_addr.region from geo_addr_obj g;
Gibt einzelne Adressinformationen einer gefundenen Geo-Adresse zurück.
40
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Einzelne Adresselemente einer Geo-Adresse (2)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Funktion Anfrage Ergebnis
Formatierung der Ausgabe von SDO_GCDR.GEOCODE_ALL. mittels TABLE-Notation.
select streetname, housenumber, postalcode, settlement, longitude, latitude from table ( sdo_gcdr.geocode_all( user, sdo_keywordarray( 'Schiffbauergasse 14', 'Potsdam'), 'DE', 'DEFAULT') );
Gibt einzelne Adressinformationen einer gefundenen Geo-Adresse als Tabelle zurück.
41
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Einzelne Adresselemente einer Geo-Adresse (3)
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Nutzerdefinierte PL/SQL Funktion
/* Vollständiger Code unter http://oracle-spatial.blogspot.co.uk/2013/11/umrechnung-von-adressen-in-koordinaten.html */ create or replace procedure format_geo_addr ( address SDO_GEO_ADDR ) AS type strings is table of varchar2(30); match_names strings := strings ( '? ', '0 (MATCHED) ', '1 (ABSENT) ', '2 (CORRECTED)', '3 (IGNORED) ', '4 (SUPPLIED) ' ); ….
Anwendung
exec format_geo_addr (SDO_GCDR.GEOCODE(user, SDO_KEYWORDARRAY('Schiffbauergasse 14', '14467 Potsdam'), 'DE', 'DEFAULT')); -- Ergebnis ist eine nutzerdefinierte Ausgabe – ID 0 - ADDRESSLINES - PLACENAME - STREETNAME Schiffbauergasse - INTERSECTSTREET - SECUNIT - SETTLEMENT - MUNICIPALITY Potsdam - REGION BRANDENBURG - COUNTRY DE - POSTALCODE 14467 ...
42
Alle Adresselemente einer Geo-Adresse
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Adressdatenbestände geokodieren
1. Adressdaten in Oracle Datenbank importieren
2. Datenqualitätsprüfung und ggf. Präprozessierung für Bereinigung
3. Geokodierung der Adressdaten
4. Prüfung durch Kartenvisualisierung
– Nicht weiter ausgeführt für diesen Workshop
– Beispielanwendung: „Sample Geolocation Showcase“ auf http://apex.oracle.com mit Referenzdaten von HERE
– Geocoding Service auf http://elocation.oracle.com/geocoder mit Referenzdaten von HERE
43
Mögliches Vorgehen
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
-- Hinweis: Encoding der Quelldaten beachten create directory cust_data_dir as 'D:\documents\sample data'; drop table adressen purge; create table adressen ( id varchar2(100), BEZEICHUNG varchar2(255), STRASSE varchar2(255), PLZ varchar2(10), ORT varchar2(255)) organization external ( type oracle_loader default directory cust_data_dir access parameters (records delimited by newline characterset WE8ISO8859P1 fields terminated by ";") location ('data.csv') ) reject limit unlimited noparallel;
select * from adressen; select count(*) from adressen; -- Logdateien prüfen! drop table t_adressen purge; create table t_adressen as select * from adressen; select * from t_adressen; select count(*) from t_adressen; alter table t_adressen add (location sdo_geometry);
44
1. Adressdaten importieren über External Table Feature
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
-- Werte in Adressdatenbeständen gegen Referenzdaten prüfen -- PLZs mappen select distinct a.plz from t_adressen a minus select p.postal_code from odf_eu_q313.gc_postal_code_nvt p order by 1; -- Orte mappen select distinct upper(a.ort) from t_adressen a minus select b.area_name from odf_eu_q313.gc_area_nvt b order by 1; select * from odf_eu_q313.gc_area_nvt b where b.area_name like '%JAMNO%';
-- Point of Interests select distinct upper(a. bezeichung) from t_adressen a minus select p.name from odf_eu_q313.gc_poi_nvt p order by 1; with test as ( select distinct upper(a. bezeichung) bez from t_adressen a minus select p.name bez from odf_eu_q313.gc_poi_nvt p) select bez, REPLACE( bez, '"', '' ) bez_2 from test; update t_adressen a set a. bezeichung = REPLACE( a.bezeichung, '"', '' ); commit; update t_adressen a set a. bezeichung = REPLACE( a.bezeichung, ' ', ' ' ); commit;
45
2. Qualitätsprüfung und Präprozessierung
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Konkrete Datensätze unter die Lupe genommen (1) -- Beispielsatz 1 select sdo_gcdr.geocode('ODF_EU_Q313', sdo_keywordarray('Dorfstrasse 8a','Auras'),'DE', 'DEFAULT') from dual; select sdo_gcdr.geocode('ODF_EU_Q313', sdo_keywordarray('Dorfstrasse 8a','03058 Auras'),'DE', 'RELAX_ALL') from dual; select sdo_gcdr.geocode_all('ODF_EU_Q313', sdo_keywordarray('Dorfstrasse 8a','Auras'),'DE', 'DEFAULT') from dual; select sdo_gcdr.geocode_all('ODF_EU_Q313', sdo_keywordarray('Dorfstrasse 8a', '03058 Auras'), 'DE', 'RELAX_ALL') from dual; exec format_geo_addr (SDO_GCDR.GEOCODE('ODF_EU_Q313', SDO_KEYWORDARRAY('Dorfstrasse 8a','03058 Schorbus'), 'DE', 'RELAX_POSTAL_CODE')); select * from odf_eu_q313.gc_area_nvt where area_name = 'AURAS'; select * from odf_eu_q313.gc_postal_code_nvt where settlement_id = '20455203' or municipality_id = '20455203'; select * from odf_eu_q313.gc_postal_code_nvt where postal_code = '03058' order by municipality_name, settlement_name; select * from odf_eu_q313.gc_road_nvt where settlement_id = '20455203' or municipality_id = '20455203' order by municipality_id, settlement_id, name;
46
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
3. Geokodierung der Adressdaten
47
• Verschiedene Ansätze
1. Trigger-basiert
2. SQL
3. PL/SQL
4. Optimierte Ansätze • Pipelined Parallel Table Function
Bevorzugte Ansätze
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
SQL
update t_adressen a set a.location = ( select sdo_gcdr.geocode_as_geometry( 'ODF_EU_Q313', sdo_keywordarray( nvl(a.strasse,''), trim(a.plz ||' ' || a.ort)), 'DE') from dual); commit;
PL/SQL
create or replace function geocode_address ( street_name varchar2, city_name varchar2, postal_code varchar2) return sdo_geometry deterministic as gc_i sdo_geo_addr := sdo_geo_addr(); gc_o sdo_geo_addr; begin gc_i.streetname := street_name; gc_i.settlement := city_name; gc_i.postalcode := postal_code; gc_i.country := 'DE'; gc_o := sdo_gcdr.geocode_addr ('ODF_EU_Q313', gc_i); return sdo_geometry (2001, gc_o.srid, sdo_point_type (gc_o.longitude, gc_o.latitude, null), null, null ); end; / update t_adressen a set a.location = geocode_address(strasse, ort, plz); commit;
48
3. Geokodierung der Adressdaten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Trigger
create or replace trigger aiu_geocode_adressen after insert or update on t_adressen begin update t_adressen a set a.location = geocode_address(:new.strasse, :new.ort, :new.plz) where a.id = :new.id; -- id sollte unique sein end; /
Optimierte Ansätze
• Parallelisierung
• Pipelined Table Function
• Siehe Materialien vom Oracle Spatial Summit 2014:
– Workshop 4 „How to Build a Drive Time Analysis Application“ http://www.oracle.com/technetwork/database/options/spatialandgraph/community/sagsummit-2014-2196705.html
49
3. Geokodierung der Adressdaten
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
GEOKODIEREN MIT SPATIAL - THEORIE
GEOKODIEREN MIT SPATIAL - PRAXIS
ZUSAMMEN-FASSUNG
DATEN / FACHLICHE ANFORDERUNGEN
51
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Zusammenfassung
• Automatische Geokodierung und Adressdaten-Validierung durch “Built-In” Geocoder
• 2 APIs stehen zur Verfügung – SQL: Nutzt PL/SQL Funktionen
– XML: Sendet XML Requests an einen Web Service
• AnwenderInnen beziehen Referenzdaten direkt von Datenanbietern (im Oracle Delivery Format)
• Datenanbieter sind u.a.: – Here (ehemals NAVTEQ/Nokia) (http://developer.here.com)
– TomTom (ehemals Tele Atlas) (http://www.tomtom.de)
– dds digital data services gmbh (http://www.ddsgeo.de )
– Daten anderer Anbieter können in das Datenmodell für den Oracle Geocoder transformiert werden
– Beispiel-Datensätze stehen für ausgewählte Regonen zur Verfügung. Siehe OTN : • http://www.oracle.com/technetwork/database/options/spatial/spatial-partners-data-087203.html
52
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Links
• Oracle Locator und Spatial
– OTN http://www.oracle.com/us/products/database/options/spatial/overview/index.html
– Blogs http://oracle-spatial.blogspot.com (DE), https://blogs.oracle.com/oraclespatial/
– Forum https://forums.oracle.com/forums/forum.jspa?forumID=76
• Oracle eLocation Services
– http://maps.oracle.com/elocation
53
ZUSAMMENFASSUNG
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
[email protected] http://oracle-spatial.blogspot.com/ Twitter: @kpatenge