SlideShare ist ein Scribd-Unternehmen logo
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
Geokodieren direkt in der Oracle Datenbank
mit der Option Spatial and Graph
Karin Patenge | karin.patenge@oracle.com
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
Geocoder(SDO_GCDR)
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?B281
CP?
MATCHVECTOR ??010101010??40
0?
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
Geocoder(SDO_GCDR)
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','BR
ANDENBURG','DE','14467',NULL,'14467',NULL,'14','SCH
IFFBAUER','GASSE','F','F',NULL,NULL,'R',0.75,748777
426,'??X?#ENUT?B281CP?',1,'DEFAULT',13.07432,52.404
11,'??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(),'AUSSICHTS
PUNKT TAGEBAU
NOCHTEN',NULL,NULL,NULL,NULL,'WEIßKEIßEL','SACHSEN','D
E','02957',NULL,'02957',NULL,NULL,NULL,NULL,'F','F',NU
LL,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:documentssample 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/sagsum
mit-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. |
karin.patenge@oracle.com
http://oracle-spatial.blogspot.com/
Twitter: @kpatenge
Datenbank-gestützte Validierung und Geokodierung von Adressdatenbeständen

Weitere ähnliche Inhalte

Mehr von Karin Patenge

20181123 dn2018 graph_analytics_k_patenge
20181123 dn2018 graph_analytics_k_patenge20181123 dn2018 graph_analytics_k_patenge
20181123 dn2018 graph_analytics_k_patenge
Karin Patenge
 
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
Karin Patenge
 
20181019 code.talks graph_analytics_k_patenge
20181019 code.talks graph_analytics_k_patenge20181019 code.talks graph_analytics_k_patenge
20181019 code.talks graph_analytics_k_patenge
Karin Patenge
 
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraphOracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
Karin Patenge
 
Graph Analytics on Data from Meetup.com
Graph Analytics on Data from Meetup.comGraph Analytics on Data from Meetup.com
Graph Analytics on Data from Meetup.com
Karin Patenge
 
5 Gründe für Oracle Spatial Technologies
5 Gründe für Oracle Spatial Technologies5 Gründe für Oracle Spatial Technologies
5 Gründe für Oracle Spatial Technologies
Karin Patenge
 
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
Karin Patenge
 
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
Karin Patenge
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
Karin Patenge
 
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
Karin Patenge
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
Karin Patenge
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
Karin Patenge
 
Raster Algebra mit Oracle Spatial und uDig
Raster Algebra mit Oracle Spatial und uDigRaster Algebra mit Oracle Spatial und uDig
Raster Algebra mit Oracle Spatial und uDig
Karin Patenge
 

Mehr von Karin Patenge (13)

20181123 dn2018 graph_analytics_k_patenge
20181123 dn2018 graph_analytics_k_patenge20181123 dn2018 graph_analytics_k_patenge
20181123 dn2018 graph_analytics_k_patenge
 
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
 
20181019 code.talks graph_analytics_k_patenge
20181019 code.talks graph_analytics_k_patenge20181019 code.talks graph_analytics_k_patenge
20181019 code.talks graph_analytics_k_patenge
 
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraphOracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
OracleCode_Berlin_Jun2018_AnalyzeBitcoinTransactionDataUsingAsGraph
 
Graph Analytics on Data from Meetup.com
Graph Analytics on Data from Meetup.comGraph Analytics on Data from Meetup.com
Graph Analytics on Data from Meetup.com
 
5 Gründe für Oracle Spatial Technologies
5 Gründe für Oracle Spatial Technologies5 Gründe für Oracle Spatial Technologies
5 Gründe für Oracle Spatial Technologies
 
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
IT-Tage 2017: Visuelle Analyse komplexer Datenbestände am Beispiel der Panama...
 
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
20171106_OracleWebcast_ITTrends_EFavuzzi_KPatenge
 
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
20171121_DOAGKonferenz_JSON_OracleNoSQL_KPatenge
 
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
Oracle NoSQL Database: Integration in den Oracle Enterprise Manager 12
 
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge20160310_ModernApplicationDevelopment_NoSQL_KPatenge
20160310_ModernApplicationDevelopment_NoSQL_KPatenge
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
 
Raster Algebra mit Oracle Spatial und uDig
Raster Algebra mit Oracle Spatial und uDigRaster Algebra mit Oracle Spatial und uDig
Raster Algebra mit Oracle Spatial und uDig
 

Datenbank-gestützte Validierung und Geokodierung von Adressdatenbeständen

  • 1.
  • 2. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Geokodieren direkt in der Oracle Datenbank mit der Option Spatial and Graph Karin Patenge | karin.patenge@oracle.com Leitende Systemberaterin Oracle Deutschland B.V. & Co. KG | GS Potsdam Stand: 10. März 2015
  • 3. 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
  • 4. 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?
  • 5. 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
  • 6. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT SPATIAL - THEORIE GEOKODIEREN MIT SPATIAL - PRAXIS ZUSAMMN- FASSUNG DATEN / FACHLICHE ANFORDERUNGEN 6
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | DATEN / FACHLICHE ANFORDERUNGEN
  • 11. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT SPATIAL - THEORIE GEOKODIEREN MIT SPATIAL - PRAXIS ZUSAMMEN- FASSUNG DATEN / FACHLICHE ANFORDERUNGEN 11
  • 12. 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
  • 13. 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
  • 14. 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 Geocoder(SDO_GCDR) 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
  • 15. 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
  • 16. 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
  • 17. 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.
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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?B281 CP? MATCHVECTOR ??010101010??40 0? MATCHCODE 1 = Exact match MATCHMODE DEFAULT LONGITUDE 13.07432 LATITUDE 52.40411 SRID 8307
  • 22. 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
  • 23. 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
  • 24. 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.
  • 25. 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
  • 26. 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 Geocoder(SDO_GCDR) Find Road Segment Compute House Number Fill Address Details Geokoordinate (Lon/Lat) Adresse Referenzdatenbestand Geometries Geometries Street and Place Names Oracle Geocoder Architektur
  • 27. 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
  • 28. 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
  • 29. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - THEORIE
  • 30. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT SPATIAL - THEORIE GEOKODIEREN MIT SPATIAL - PRAXIS ZUSAMMEN- FASSUNG DATEN / FACHLICHE ANFORDERUNGEN 30
  • 31. 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
  • 32. 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;
  • 33. 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','BR ANDENBURG','DE','14467',NULL,'14467',NULL,'14','SCH IFFBAUER','GASSE','F','F',NULL,NULL,'R',0.75,748777 426,'??X?#ENUT?B281CP?',1,'DEFAULT',13.07432,52.404 11,'??010101010??404?',8307)
  • 34. 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)
  • 35. 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)
  • 36. 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)
  • 37. 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)
  • 38. 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(),'AUSSICHTS PUNKT TAGEBAU NOCHTEN',NULL,NULL,NULL,NULL,'WEIßKEIßEL','SACHSEN','D E','02957',NULL,'02957',NULL,NULL,NULL,NULL,'F','F',NU LL,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
  • 39. 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)
  • 40. 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)
  • 41. 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)
  • 42. 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
  • 43. 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
  • 44. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | -- Hinweis: Encoding der Quelldaten beachten create directory cust_data_dir as 'D:documentssample 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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/sagsum mit-2014-2196705.html 49 3. Geokodierung der Adressdaten
  • 50. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT ORACLE SPATIAL AND GRAPH - PRAXIS
  • 51. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | GEOKODIEREN MIT SPATIAL - THEORIE GEOKODIEREN MIT SPATIAL - PRAXIS ZUSAMMEN- FASSUNG DATEN / FACHLICHE ANFORDERUNGEN 51
  • 52. 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
  • 53. 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
  • 54. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | karin.patenge@oracle.com http://oracle-spatial.blogspot.com/ Twitter: @kpatenge