datenbank-gestützte validierung und geokodierung von adressdatenbeständen

55

Upload: karin-patenge

Post on 15-Jul-2015

141 views

Category:

Data & Analytics


0 download

TRANSCRIPT

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