Ein Überblick über Oracle Spatial

Werbung
<Insert Picture Here>
Auf den Ort kommt es an
Geodaten und die Oracle-Plattform
Oracle Deutschland B.V. & Co KG
Oracle: Die offene Geodatenbank
• Native Datentypen
• Vektordaten und Rasterdaten (Satellitenbilder)
• Offene Zugriffe mit SQL, Java, .NET, ...
• Enge Integration zwischen Sachdaten und Geodaten
• Offen und Standardkonform
• Unterstützt von allen GIS-Systemen
GIS 1
SQL
SQL
GIS 2
“Spatial enabled”
Business Intelligence
Eigene Abfragen
Offene Geodaten – offene Plattform!
Fachliche
Komponenten
Konkrete Lösungsapplikation
Fachliche Lösungen
Oracle Application Server
MapViewer
3rd-Party
Oracle Maps
Kartendarstellung
WMS Dienste
Routenberechnung
Web Service
Oracle Application Server
Geodaten
Sachdaten
Oracle Database
andere
Daten
Geodaten / Räumliche Abfragen
Räumliche Indizes
Verschneidungen
Daten-Manipulationen
Oracle Spatial
Entwicklung der Funktionalität
Oracle11g
Spatial
Oracle10g
•Oracle Maps
•3D-Support
• Google Integration
Spatial
•Raster Data Management
•Topology & Networking
•Spatial Analysis and Mining
Oracle9i
Spatial
Oracle8i
Spatial
Oracle 7.3.3
Spatial
Oracle7
Keine GeodatenFunktionalität
1994
•Coordinate Transformation
•Linear Referencing
•Spatial Replication
•Spatial Partitioning
•Object Data type
•Circles, Arcs
•R-Tree Indexing
•Topology/Distance Operators
•Points, Lines, Polygons
•Quad-Tree indexing
•Spatial Operators
1995
1999
2002
2003 2007
2011
Oracle Spatial: OGC Simple Features
Geometrische Elemente
Point
Line string
Polygon
Polygon
with hole
Arc line
string
Compound
polygon
Compound
line string
Self-crossing
line strings
Optimized
polygons
Self-crossing
polygons
Oracle Spatial: Dreidimensional
Geometrische Elemente
einfach
zusammengesetzt
Triangulated Irregular Network (TIN)
zusammengesetzt
Punktwolke (Point Cloud)
Oberflächen
einfach
Körper
Oracle Spatial
Objektrelationale Implementierung
• Datentyp SDO_GEOMETRY
Tabelle Gemeinde
ID
NAME
NUMBER VARCHAR2
SDO_GTYPE
SDO_SRID
SDO_POINT
SDO_ELEM_INFO
SDO_ORDINATES
GRENZE
SDO_GEOMETRY
NUMBER
NUMBER
SDO_POINT_TYPE
SDO_ELEM_INFO_ARRAY
SDO_ORDINATE_ARRAY
Oracle Spatial
SQL Operatoren
• Enge SQL-Integration
• "Topologische Operatoren"
• Inside
Contains
• Touch
Disjoin
• Covers
Covered By
• Equal
Overlap Boundary
Inside
• "Dinstanz-Operatoren"
• Within Distance
• Nearest Neighbor
Within Distance
Spatial Operatoren
Operator
Entspricht MASK in SDO_RELATE
SDO_INSIDE
mask=inside
SDO_CONTAINS
mask=contains
SDO_COVERS
mask=covers
SDO_COVEREDBY
mask=coveredby
SDO_OVERLAPS
mask=overlapbdyintersect+overlapbdydisjoint
SDO_OVERLAPBDYINTERSECT
mask=overlapbdyintersect
SDO_OVERLAPBDYDISJOINT
mask=overlapbdydisjoint
SDO_TOUCH
mask=touch
SDO_EQUAL
mask=equal
SDO_ANYINTERACT
mask=anyinteract
SDO_ON
mask=on
Oracle Spatial
SQL Funktionen
• Rückgabe: SDO_GEOMETRY
•
•
•
•
•
•
•
Union
Difference
Intersect
XOR
Buffer
Centroid
ConvexHull / ConcaveHull
Original
Union
Difference
Intersect
• Rückgabe: NUMBER
•
•
•
•
Length
Area
Distance
Volume
XOR
Nützliche Funktion: SDO_BUFFER
• Einfache Geometrien
• Zusammengesetzte Geometrien
Räumliche SQL-Abfragen
Ein Beispiel
• Welche Bundesländer grenzen an NRW?
select l1.name
from laender l1, laender l2
where l2.name='NRW' and
sdo_relate(
l1.grenze, l2.grenze,
'mask=touch'
)='TRUE'
Kombinierte Abfragen
• Welche Kunden mit Umsatz sind in Brandenburg?
SQL>
2
3
4
5
6
7
select name, umsatz
from customers c, geo_laender gl
where sdo_relate(
c.geometry, gl.geometry, 'mask=anyinteract'
) = 'TRUE'
and gl.feature_name='Brandenburg'
and umsatz is not null and umsatz > 0
NAME
UMSATZ
------------------------------ ---------Freie Tanke
4876
Marhoul
4798
Tankstelle Schönefeld
4598
Tankstelle Dreieck Havelland
7896
:
:
SDO_JOIN:
Räumliche Layer zusammenführen
• Beispiel
Finde zu jedem Kunden anhand der Position das
Postleitzahlengebiet heraus!
select
rowid1 as KUNDEN_ROWID,
rowid2 as PLZ_ROWID
from
table(
sdo_join(
'KUNDEN',
'GEOMETRY',
'PLZ_GEBIETE',
'GEOMETRY',
'mask=anyinteract'
)
)
Spatial Index
Aufbau des R-Tree-Index
a
root
R
b
S
c
R
a
d
S
b
c
d
root
Zeiger auf Geometrien
Verarbeitung einer räumlichen Abfrage
Ausführung einer räumlichen Abfrage
Layer
Data
Primary
Filter
Spatial
Index
Spatial
Column
Index
retrieves
area of
interest
Reduced
Data
Set
Secondary
Filter
Spatial
Functions
Spatial function
determines
Exact result
Exact
Result
Verarbeitung einer räumlichen Abfrage
Ausführung einer räumlichen Abfrage mit
internen Optimierungen
Layer
Data
Primary
Filter
Spatial
Index
Spatial
Column
Index
retrieves
area of
interest
Reduced
Data
Set
Secondary
Filter
Exact
Result
Spatial
Functions
Exact
Result
Spatial function
determines
Exact result
Abfrageverarbeitung: Ein Beispiel
Welche "Pipelines" sind im "grünen Bereich?"
• Primärfilter (Index) vergleicht MBR, also zuviele Ergebnisse
• Interne Optimierung (Inneres MBR) liefert "sichere" Kandidaten
• Exakte Berechnungen nur noch, wo wirklich nötig
Oracle Spatial
Koordinatensysteme
• Über 4.000 Koordinatensysteme
•
•
•
•
•
Geodätisch
Kartesisch als Projektion
Kartesisch ("Non-Earth")
Eigene Koordinatensysteme möglich
Tabelle MDSYS.CS_SRS
• PL/SQL-Paket SDO_CS
• Koordinatensystem-Transformationen
• EPSG-Unterstützung ab Version 10.2
Unterstützung der Google-Projektion
• Koordinatensystem: EPSG 3785
• Google approximiert die Erde als Kugel
(Spherical Math)
SQL> select wktext from cs_srs where srid=3785;
WKTEXT
-----------------------------------------------------PROJCS["Popular Visualisation CRS / Mercator", GEOGCS [
"Popular Visualisation CRS", DATUM ["Popular
Visualisation Datum (EPSG ID 6055)", SPHEROID ["Popular
Visualisation Sphere (EPSG ID 7059)", 6378137.0,
1000000000000.0]], PRIMEM ....
Geocoding mit Oracle Spatial
• Umwandlung von Adressen in Koordinaten …
… und rückwärts (REVERSE GEOCODING)
select sdo_gcdr.geocode(
'ODF_EU_Q111',
sdo_keywordarray('Riesstr. 25','München'),
'DE',
'DEFAULT'
) as geocode from dual
/
GEOCODE
----------------------------------------------------------------------SDO_GEO_ADDR(0, SDO_KEYWORDARRAY(), NULL, 'Riesstrasse', NUL
L, NULL, 'München', 'München', 'BAYERN', 'DE', NULL, NULL, N
ULL, NULL, '25', 'RIES', 'STRASSE', 'F', 'F', NULL, NULL, 'L
', ,5, 52901891, '????#ENUT?B281CP?', 1, 'DEFAULT', 11,53673
4, 48,1800773, '???10101010??401?')
1 Zeile wurde ausgewählt.
Oracle Spatial: Rasterdaten
Vektordaten
Vektorkoordinaten
-74.1651749, 41.339141
-74.1651749, 41.339141,
-73.4284481, 40.678193,
-72.9792214, 41.686228
-74.1651749, 41.339141,
-74.1651749, 39.559004,
-72.9792214, 39.559004,
-72. 9792214, 41.339141
Rasterdaten
Georeferenzierung
Raster
"Spatial-Extent":
Zuordnung des Rasters zu
einem Koordinatensystem
X
Y
Breitengrade
National
Park
Restaurant
Längengrade
Oracle GeoRaster in Aktion
http://www.geoproxy.de
Linear Referencing (LRS)
• "Measure values" werden mit Punkten entlang eines
Geometrieobjektes assoziiert
• Linien
• Zusammengesetzte Linien
• Polygone
• Typischerweise proportional zur Entfernung des
Punktes vom Start
(55,20,60)
(30,10,27)
(5,10,0)
(50,15,53.8)
(45,10,44)
(15,5,11.2)
(40,5,38)
Ein Beispiel: Straßenmanagement
Tabelle STRASSE
ID (Street ID)
Accident #
ID
UNFAELLE
M
Sign #
ID
M
SCHILDER
LRS geometry
Speed
ID Start M End M
BEHINDERUNGEN
Condition
ID Start M
End M
STRASSENZUSTAND
Ein Beispiel: Straßenmanagement
Tabelle BEHINDERUNGEN
Beispiel "Straßenmanagement"
Linear Referencing ist einfach ...
• SQL zur Berechnung der Stau-Segmente
select
a.name,
s.art,
sdo_lrs.convert_to_std_geom(
sdo_lrs.clip_geom_segment(
sdo_lrs.convert_to_lrs_geom(a.geometry),
s.start_km * 1000,
s.ende_km * 1000
)
) geometry
from geo_autobahn a, stau s
where a.name = s.autobahn
Geodaten: Visualisierung ...?
Visualisierung der Geodaten
Oracle MapViewer
• Karten-Rendering für ...
Vektordaten, Rasterdaten, Netzwerke, Topologien
• Unterstützung für WMS (Client / Server)
• Java-Architektur
• Installation per Standard-Deployment (J2EE)
• Lizenz: Oracle Fusion Middleware
Map Request
Map Response
J2EE-Container
Datenbank
Karten definieren: Map Builder
Kartendefinitionen
• Ablage in der Datenbank
• USER_SDO_MAPS
• USER_SDO_STYLES
• USER_SDO_THEMES
• USER_SDO_CACHED_MAPS
• Bearbeiten mit MapBuilder oder mit SQL per Skript
• Besonderheiten bei Export / Import beachten
Oracle MapViewer: Oracle Maps!
• Kartendarstellung state-of-the-art
•
•
•
•
Drag & Drop
Einfaches Zoom In & Zoom Out
Hinzufügen neuer Elemente
Dynamisches Einblenden weitere Informationen
• AJAX-Technologie
• Plattformunabhängig
Java, .NET, PHP, Oracle APEX, …
• Basiert auf JavaScript
Oracle Maps
Aufbau einer Karte (vereinfacht)
Karten in Oracle MAPS
• Basis: Map Tile Layer
•
•
•
•
Im Voraus erstellte Kacheln – zusammengesetzt eine Karte
Beliebige Projektionen möglich (Datenbank!)
Cache Management manuell oder automatisiert
Externe Datenquellen möglich (WMS-Server)
• Individualisiert durch Feature Of Interest Layers
• Hier kein Caching:
Informationen kommen direkt aus der Datenbank
• Zusätzliche Informationen im Information Window
• Anbindung externer Systeme (BI Server) möglich
• Externe Datenquellen (WMS) möglich
AJAX in Oracle Maps
JavaScript Client-API
Und dann war da noch ...
Oracle has "NAVTEQ on board"
• NAVTEQ-Daten kostenlos im OTN verfügbar
• Spatial-Format (Import via Data Pump)
• Map-Definitionen für Map Viewer enthalten
• Download hier:
http://www.oracle.com/technology/software/htdocs/
distlic.html?url=http://www.oracle.com/technology/
software/products/mapviewer/htdocs/navlic.html
• FAQ hier:
http://www.oracle.com/technology/products/spatial/
pdf/navteq_faq.pdf
Oracle Spatial-Technologie
Lizensierung
• Oracle Locator
• Alle Editionen (XE, SE-1, PE, SE, EE)
• Oracle Spatial
• Lizenzpflichtige Option (EE)
Geocoding, Rasterdaten, Topology Data Model,
Network Data Model, Linear Referencing …
• Oracle MapViewer
• Oracle Fusion Middleware – Alle Editionen
• Welche Funktionen enthält der "Locator"?
Oracle Spatial Developers' Guide, App. B
Herunterladen