Reverse Geocoding auf Basis von GeoNames.org-Daten

Ähnliche Dokumente
Geodaten und Karten in APEX

Geodaten mal ohne Karte

Robotron Datenbank-Software GmbH

<Insert Picture Here> Oracle Spatial Die Plattform für Geo-Business-Intelligence. Carsten Czarski ORACLE Deutschland B.V. & Co KG

CITRA-Forum. Nutzen Sie das Potential all Ihrer Daten: Geodata Warehouse mit der Oracle Plattform. CITRA-Forum im Schloß 2009

Überblick: Oracle Spatial 3D

<Insert Picture Here> Das Navi in der Datenbank Oracle11g has NAVTEQ on Board. Carsten Czarski Oracle Deutschland B.V. & Co KG

<Insert Picture Here> Oracle Spatial für Entwickler Teil 1: Datenmodell und SDO_GEOMETRY. Carsten Czarski ORACLE Deutschland B.V.

Speicherung und Verarbeitung von Geodaten mit Oracle Spatial

Erfahrungsbericht mit Oracle Spatial

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

<Insert Picture Here> Geodaten für Alle! Oracle Spatial, Oracle Maps und APEX. Carsten Czarski ORACLE Deutschland B.V. & Co KG

Datenmanagement I SoSe 2006 Aufgabenblatt 4

Übersicht der wichtigsten MySQL-Befehle

Oracle SQL*Loader. Der Oracle SQL*Loader ist Programm zum Einladen von Daten aus Dateien in die Datenbank.

Oracle 10g Einführung

Performante Verarbeitung großer Datenbanken am praktischem Beispiel

Gewusst wo: BMW ConnectedDrive, die Oracle-Datenbank und Oracle Spatial

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

BMW ConnectedDrive. Life is in motion.

<Insert Picture Here> Security-Basics. Privilegien, Rollen, SQL und PL/SQL - inkl. 12c-Update. Carsten Czarski, ORACLE Deutschland B.V. Co.

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

WISMUT. Geodaten mit Oracle Locator (Spatial)) in der Praxis am Beispiel der Wismut GmbH. Von der Erzeugung über die Verarbeitung bis zur Auswertung

Geodaten in der Datenbank: Wozu? Was ist Oracle Spatial? Spatial war doch immer eine Option, oder...? Kann Oracle mehr als Vektordaten...?

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel

Geodaten in Nutzung Oracle Spatial + Oracle MAPS + APEX

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Big-Data-Visualisierung über Geo-Daten mit SQL-Server & Power BI. Robert Schulz, PhD Consultant für Datenmanagement bei ergon Datenprojekte GmbH

PostGIS für Einsteiger

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

Übung PL/SQL Trigger Lösungen

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Integration von Geoinformationen mit here-karten in APEX

Geodaten und die Oracle-Plattform

Dipl. Inf. Eric Winter. PostgreSQLals HugeData Storage Ein Erfahrungsbericht

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Das Leben der Anderen

Asynchrone Replikation Projekt oder Produkt. Lukas Grützmacher (AIS Automation Dresden GmbH)

MySQL Queries on "Nmap Results"

file:///c:/users/wpzsco/appdata/local/temp/tmp373d.tmp.htm

PHP- Umgang mit Datenbanken (1)

Klausur PI Datenbanken II vom Name: Praktische Informatik (Krägeloh)

3 Arbeiten mit geographischen Daten

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

Web-basierte Geoinformation im Planungsprozess , VU, 2013W; TU Wien, IFIP

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

Erzeugung und Veränderung von Tabellen

NoSQL mit Postgres 15. Juni 2015

Datenversionierung in Business-Anwendungen

SQL-Loader. Prof. Dr. Waldemar Rohde Dipl.-Ing. Jörg Höppner

Keine Business Intelligence ohne Location Intelligence

Data Warehousing mit Oracle9i [E]TL mit External Tables & Table Functions. Peter Welker - Trivadis Deutschland GmbH

Oracle native json Support. Erste Schritte

Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap

Maps installieren. dort auf Maps and Weather. Wähle das Plugin links oben: Klicke auf Download

PostgreSQL unter Debian Linux

Referentielle Integrität

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS XMLType. Christian Senger/Andreas Schmidt XMLType 1/32

Objektrelationale, erweiterbare Datenbanken WS 04/05

Arbeiten mit Geodaten in Oracle und MySQL

XML-Schnittstellen zum Import und Export von Daten für eine Oracle DB Ein Erfahrungsbericht DOAG 2006

Referentielle Integrität

5.8 Bibliotheken für PostgreSQL

Untersuchungen zum Einsatz von Apache CouchDB als Geodatenbank

Next Generation Cloud

5000 User+, Erfahrungen im Produktivbetrieb einer Saas-DB. DOAG 2011 Konferenz + Ausstellung Bernhard Vogel & Frank Szilinski, esentri

Übungen. DI (FH) Levent Öztürk

Labor 3 - Datenbank mit MySQL

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Kapitel 4 Dynamisches SQL

Oracle Geocoder Von der Adresse zur Koordinate. Kushtrim Krasniqi GDV Gesellschaft für geografische Datenverarbeitung mbh

Geokodieren direkt in der Oracle Datenbank mit der Option Spatial and Graph

Übung 7 DBMS-FUNKTIONALITÄTEN UND DATENIMPORT

Von der Karte zur Geo-Datenbank. Die Tücken in der Praxis. DOAG-Jahreskonferenz Nürnberg,

Installation MySQL Replikationsserver

Housekeeping -2

Übungsblatt 8- Lösungsvorschlag

Visualisierung in Informatik und Naturwissenschaften

Die Datenmanipulationssprache SQL

DB2 SQL, der Systemkatalog & Aktive Datenbanken

Roland Tilgner. Solution Architects & Team Coaching DEVELOPMENT. ORACLE TEXT AUS PL/SQL-SICHT Features und Möglichkeiten

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Datenintegrität. Bisherige Integritätsbedingungen

1001 Möglichkeiten eine Staging Area zu füllen. Sven Bosinger its-people GmbH

Transkript:

Reverse Geocoding auf Basis von GeoNames.org-Daten

Über IGL 2 Analysen und betriebswirtschaftliche Auswertungen von Logistik-Prozessen Anwendungsentwicklung im Oracle-Umfeld, ab 2003 mit HTMLDB/Apex Selbständig seit 2007 als Freelancer mit Spezialisierung auf Apex 2009 Gründung der IGL GmbH mit dem Schwerpunkt Entwicklung von Standardapplikationen im Logistikumfeld Auftragsabwicklung für Logistikdienstleistungen Betriebswirtschaftliche Auswertung von Fuhrparkleistung auf Basis von Telematikdaten Seit 2013 neues Projekt Modulon Jens Gauger jens.gauger@igl-systems.de Mobil: 0178/3457824 http://www.log-cc.de http://www.igl-systems.de http://www.modulon.de https://www.xing.com/ profile/jens_gauger

Über Modulon 3 Modulon Webservice GmbH, gegründet 2013 Automatisierte Spesen- und Lohnberechnung auf Basis von Telematikdaten, z.b. aus Weitergehende Analysen wie Systemverkehre, Stundenauswertung etc. Kundenportal 100% Apex http://www.modulon.de

4 Reverse Geocoding

Use Case 5 Datenbasis für die Spesenermittlung sind Daten aus Telematiksystemen oder auch aus dem digitalen Tachografen eines LKW (DTCO) In der Regel enthalten die Daten Geoinformationen in Form von Längenund Breitengraden aber ohne zugehörige Positionsdaten Für die Berechnung von Auslandsspesen ist das Wissen um das zuletzt befahrene Land (nicht DE) an einem Tag erforderlich => Positionsinformationen (Ort und LKZ) müssen per Reverse Geocoding extrahiert werden

Reverse Geocoding selbst gebaut 6 Auch ohne datenbank-spezifische Funktionen lassen sich die Entfernungen zwischen zwei Punkten auf einer kugelförmigen Oberfläche berechnen https://de.wikipedia.org/wiki/ Orthodrome Nachteil: Sehr langsam, da kein Geometrie-Index verfügbar DECLARE l_lat_start NUMBER; c_pi NUMBER := 3.14159265;... BEGIN l_lat_start := p_lat_start * c_pi / 180; l_long_start := p_long_start * c_pi / 180; l_lat_stop := p_lat_stop * c_pi / 180; l_long_stop := p_long_stop * c_pi / 180; n1 := SIN(l_lat_start) * SIN(l_lat_stop) + COS(l_lat_start) * COS(l_lat_stop) * COS((p_long_start-p_long_stop)*c_pi/180); IF (p_long_start-p_long_stop) < 0 THEN n2 := 0; ELSE n2 := 360; END IF; richtung := ABS(ACOS(SIN(l_lat_stop) / SIN(ACOS(n1)) / COS(l_lat_start) - TAN(l_lat_start) / TAN(ACOS(n1))) * 180 / c_pi - n2); naut_miles := 6371.229 / 1.852 * ACOS(N1); kilometer := naut_miles * 1.852; END;

Oracle Locator vs. Spatial 7 Oracle Locator ist Bestandteil der Datenbank ab 11g SE1 SDO_GEOMETRY-Objekt Basisfunktionen für die Verwaltung von Spatial Daten Details siehe z.b. http://docs.oracle.com/cd/e11882_01/appdev.112/e11830/sdo_locator.htm#spatl340 Oracle Spatial ist lizenzpflichtige Zusatzoption für EE Geeignet für komplexe GIS-Anwendungen Unterstützung von 3D-Geometrien u.v.m. Routenplanung, Geocodierung etc. out-of-the-box

Oracle Locator vs. Spatial 8

Quellen für Geodaten 9 Google Maps Geocoding API Nur online, lizenzpflichtiges Produkt Oracle Partner, z.b. HERE Geocoder API (ehemals Navteq, Nokia) Online, lizenzpflichtiges Produkt Offline => Beispieldaten für Spatial Option verfügbar unter http://www.oracle.com/technetwork/database/options/spatial/spatial-partners-data-087203.html MapQuest Nomination API (AOL) Nur online, limitierte Anfragen, lizenzfrei OpenStreetMap, PickPoint, OpenCage Nur online, limitierte Anfragen, lizenzfrei OpenGeoDB oder GeoNames Offline verfügbar, lizenzfrei

GeoNames 10 www.geonames.org Datenbank mit über 10 Millionen Datensätzen Daten stammen aus öffentlichen Quellen in den jeweiligen Ländern Lizensiert unter Creative Commons Lizenz Zugriff über Webservices und täglichem Datenbankexport Kostenlose Version umfasst PLZ-basierte Positionsdaten für 252 Länder Datensatz enthält u.a. Längen- und Breitengrad in Format wgs84* ISO2-Ländercode, Postleitzahl, Ortsname *wgs84 - World Geodetic System 1984, einheitliche Grundlage für Positionsangaben

Vorgehensweise 11 1. Download eines Geonames-Export 2. Import der Exportdatei in Oracle-Datenbank per Data Loader 3. Aufbereitung der Daten 4. Erstellung eines Spatial Index 5. Daten abfragen

Daten laden und aufbereiten 12 Download der Datei allcountries.zip von http://download.geonames.org/ export/zip/ entpacken und in einem Verzeichnis auf dem DB-Host speichern Directory-Eintrag für das Quellverzeichnis erstellen * CREATE DIRECTORY GEONAMES_DIR FOR '/path/to/file' Daten als externe Tabelle einbinden (Step 1) Daten in neue Tabelle transformieren (Step 2) Werte für SDO_GEOMETRY-Spalte berechnen (Step 3) * https://wiki.gutzmann.com/confluence/display/howto/geonames.org+-+load+dumps+as+external+oracle+tables

Daten als externe Tabellen einbinden 13 CREATE TABLE "GEO_ALL_COUNTRIES" ( "COUNTRY_CODE" VARCHAR2(2 BYTE), "POSTAL_CODE" VARCHAR2(40 BYTE), "PLACE_NAME" VARCHAR2(400 BYTE), ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY "GEONAMES_DIR" ACCESS PARAMETERS ( records delimited BY '\n' CHARACTERSET UTF8 BADFILE DATA_PUMP_DIR:'allCountries.bad' DISCARDFILE DATA_PUMP_DIR:'allCountries.discard' LOGFILE DATA_PUMP_DIR:'allCountries.log' skip 0 fields terminated BY X'09' missing field VALUES are NULL ( country_code CHAR(4000), postal_code CHAR(4000), place_name CHAR(4000), ) ) LOCATION ( 'allcountries.txt' )) REJECT LIMIT UNLIMITED; Probleme: Alle Spalten sind CHAR Transformation erforderlich für Latitude/Longitude Weitere Spalte vom Typ SDO_GEOMETRY wird benötigt, um einen Spatial Index erstellen zu können Fazit: Weitere Tabelle muss erstellt werden

Daten in neue Tabelle transformieren 14 CREATE TABLE "GEONAMES_ALL_COUNTRIES" ( "COUNTRY_CODE" VARCHAR2(2 BYTE), "POSTAL_CODE" VARCHAR2(40 BYTE), "PLACE_NAME" VARCHAR2(400 BYTE), "ADMIN_NAME1" VARCHAR2(400 BYTE), "ADMIN_CODE1" VARCHAR2(40 BYTE), "ADMIN_NAME2" VARCHAR2(400 BYTE), "ADMIN_CODE2" VARCHAR2(40 BYTE), "ADMIN_NAME3" VARCHAR2(400 BYTE), "ADMIN_CODE3" VARCHAR2(40 BYTE), "LATITUDE" NUMBER, "LONGITUDE" NUMBER, "ACCURACY" NUMBER(1,0), "GEOMETRY" "MDSYS"."SDO_GEOMETRY" ) SEGMENT CREATION IMMEDIATE; Neue Zieltabelle erstellen Spalte vom Typ SDO_GEOMETRY hinzufügen Spatial Index auf Geometrie-Spalte erstellen CREATE INDEX "GEONAMES_ALL_COUNTRIES_INDEX1" ON "GEONAMES_ALL_COUNTRIES" ("LATITUDE", "COUNTRY_CODE"); CREATE INDEX "GEONAMES_ALL_COUNTRIES_INDEX2" ON "GEONAMES_ALL_COUNTRIES" ("COUNTRY_CODE"); CREATE INDEX "GEONAMES_ALL_COUNTRIES_SPX" ON "GEONAMES_ALL_COUNTRIES" ("GEOMETRY") INDEXTYPE IS "MDSYS"."SPATIAL_INDEX" ;

Werte für SDO_GEOMETRY-Spalte berechnen 15 Die Spalte vom Typ SDO_GEOMETRY wird mit folgender Anweisung gefüllt UPDATE TABLE GEONAMES_ALL_COUNTRIES SET geometry=sdo_geometry( 2001, Zwei-dimensionales Objekt/Einzelner Punkt 4326, Koordinatensystem WGS84 / GPS Standard SDO_POINT_TYPE( SDO-POINT longitude, x-achse latitude, y-achse NULL), z-achse NULL, SDO_ELEM_INFO, hier nicht relevant NULL) SDO_ORDINATES, hier nicht relevant

Geokoordinaten auflösen 16 Aus dem Use Case ergibt sich die Anforderung: Finde den Eintrag in der Orte-Datenbank, der am nächsten zu einer Koordinate liegt! Der relevante Locator-Operator, den Oracle dafür anbietet, ist SDO_NN Eine Abfrage kann wie folgt aussehen SELECT country_code, postal_code, place_name, admin_code1 FROM geonames_all_countries ac WHERE SDO_NN( ac.geometry, Spalte mit SDO_GEOMETRY-Wert SDO_GEOMETRY( Geometrie-Objekt für Referenzpunkt 2001, 4326, SDO_POINT_TYPE (p_longitude, p_latitude, null) Referenzpunkt NULL, NULL), 'sdo_num_res=1') Nur ein Ergebniswert wird benötigt ='TRUE';

Geocoding-Methoden in Oracle 17 Bereits in der Standard Edition der Datenbank stehen viele weitere Funktionen für die Arbeit mit Geodaten zur Verfügung Weitere interessante Locator-Operatoren sind z.b. SDO_NN_DISTANCE ermittelt die Distanz für SDO_NN SDO_WITHIN_DISTANCE prüft, ob zwei Punkte innerhalb einer bestimmten Distanz liegen u.v.m

Ausführung und Zeitverhalten 18 Telematikdaten werden in einer Event- Tabelle abgelegt Reverse Geocoding erfolgt über einen Before-Update-Trigger Dauer: < 0,02 sek Ca. 500.000 Vorgänge je Monat Entspricht ca. 5 min Rechenzeit / Tag BEFORE INSERT ON POSITIONED_EV_DATA FOR EACH ROW BEGIN IF :NEW.ped_longitude IS NOT NULL AND :NEW.ped_latitude IS NOT NULL THEN MODULON_GEODB.geonames_api.get_nn( p_longitude => :NEW.ped_longitude, p_latitude => :NEW.ped_latitude, o_country_code => :NEW.ped_geonames_country_code, o_postal_code => :NEW.ped_geonames_postal_code, o_place_name => :NEW.ped_geonames_place_name, END IF; END; o_state_name => :NEW.ped_geonames_state_name);

Anwendung 19 Demo