Title: Oracle 10g als zentraler Bestandteil komplexer GISProjekte
1Oracle 10g als zentraler Bestandteil komplexer
GIS-Projekte
2GeoDatenInfrastrukturder Wasserwirtschaftsverwalt
ung von Rheinland-Pfalz
Systemarchitektur bis 2005
Nachteile
ALK-Datenpool (Historisierung) z.Zt. ca. 64Mio.
Objekten, 220Mio. Geometrien, 26Mio.
Texten gt50GB Vektordaten (800B/Obj) Objektbildun
g Ausgestaltung ca.230Mio. Geometrien gt 115GB
Vektordaten Räumliche Abfragen Verschneidung
Erstausstattung ca. 1,8GB pro Amt gt 36GB EDBS
gesamt Fortschreibung alle 2 Monate ca.
0,1...1GB pro Amt gt 4,5GB im Januar
Digitalisierung Geometriefang Flächenbildung
3GeoDatenInfrastruktur der Wasserwirtschaftsverwal
tung von Rheinland-Pfalz
Systemarchitektur seit 2005
Vorteile
Objektbildung
Wasserwirtschaftsverwaltung
Anwender
Aus ca. 200Mio. Linien werden 17Mio. Flächen
gebildet Komplexe Flächen in Form von Polygon,
CurvePolygon und MultiPolygon Java Stored
Procedures oder externer Java-Client zur
optimalen Skalierung
ALK-Datenpool GeoBasisDaten Fachdaten Steuerungsda
ten
Oracle 8i
Oracle 10g
Konverter GDV Spatial Mirror EDBS-Oracle-EDBS
MapServer Autodesk MapGuide
GIS-Client Autodesk MapGuide- Plugin, JavaScript-
Routinen
GIS-Client GDV-MapBuilder Applet
4Vorteile von Oracle 10g für die
GeoDatenInfrastruktur der Wasserwirtschaftsverwalt
ung RLP
- Umfassende Implementierung des OGC Simple Feature
Spezifikation - Unterstützung von Bögen, Kreisen, Splines,
CurvePolygons - Vorteile gegenüber Shapefiles und anderen
Datenbanken - Keine SDE erforderlich
- Differenzierte Konfigurationsmöglichkeiten
- Partitionierte Tabellen
- Differenzierte Indexunterstützung
- Performante und zuverlässige Verschneidungsfunktio
nen - Deutliche Leistungssteigerung gegenüber Oracle 8i
- Prüf- und Bereinigungsroutinen gewährleisten
Datenkonsistenz - Performante Durchführung komplexer Abfragen
- Leistungsfähiger JDBC-Treiber
- Hints zur Abfrage-Optimierung
- Realisierung der GIS-Bearbeitung auf großen
Datenbeständen - Lokale Datenhaltung nur theoretisch möglich
- Notwendigkeit geeigneter Darstellungsbereiche /
Maßstabsabhängigkeit - Optimale Unterstützung zentraler Datenhaltung
- Vermeidung von syntaktischen Inkonsistenzen
- Weniger Redundanz
5Teilflächenberechnung für die Schlußzahlung der
InVeKoS-Betriebsprämien im Saarland
- Ausgangssituation
- Dezentrale Digitalisierung der Antragsdaten durch
die Landwirte oder Digitalisierung der Schläge
aus Katasterauszügen durch externen Dienstleister - Zusammenstellung der Kulissendaten aus den
Antragsdaten der Vorjahre - Zusammenstellung der Kontrolldaten aus
Fernerkundung, Verwaltungskontrolle und
Vor-Ort-Kontrolle - Festgelegte Auszahlungstermine für die
InVeKoS-Betriebsprämien müssen eingehalten werden - Berechnungsgrundlage für Betriebsprämien muß für
EU reproduzierbar und überprüfbar sein - Verarbeitung der Daten in einer Oracle 9i
basierten Lösung funktioniert nicht - Aufgabenstellung
- Validierung und ggf. Korrektur der Antrags- und
Kulissendaten (Überlappungen, Geometriefehler) - Bildung von Teilflächen in Abhängigkeit von
Kontrolldaten - Bildung von Teilflächen in Abhängigkeit von
Nutzungsdaten - Validierung der Ergebnisdaten
6Teilflächenberechnung für die Schlußzahlung der
InVeKoS-Betriebsprämien im Saarland
FUNCTION COMBINE (geo1 in mdsys.sdo_geometry,
geo2 in mdsys.sdo_geometry, tol in number, msg
out varchar2) RETURN mdsys.sdo_geometry AS
dif1 mdsys.sdo_geometry dif2
mdsys.sdo_geometry uni1 mdsys.sdo_geometry
uni2 mdsys.sdo_geometry ret
mdsys.sdo_geometry val varchar2(100) BEGIN
ret null uni2 null uni1
TO_POLYGON (sdo_geom.sdo_union (geo1, geo2,
tol)) if (uni1 is not null) then val
sdo_geom.validate_geometry (uni1, tol) if
(val 'TRUE') then if (sdo_geom.relate
(geo1, 'maskTOUCHDISJOINT', geo2, tol)
'FALSE') then dif1 TO_POLYGON
(sdo_geom.sdo_difference (geo1, geo2, tol))
if (dif1 is not null) then
val sdo_geom.validate_geometry (dif1, tol)
if (val ltgt 'TRUE') then
msg 'Difference 1 - 2 ist fehlerhaft '
val dif1 null
end if end if dif2
TO_POLYGON (sdo_geom.sdo_difference (geo2, geo1,
tol)) if (dif2 is not null) then
val sdo_geom.validate_geometry
(dif2, tol) if (val ltgt 'TRUE')
then msg 'Difference 2 - 1
ist fehlerhaft ' val dif2
null end if end
if if (dif1 is null) then
if (dif2 is null) then
uni2 null else
uni2 dif2 end if
else if (dif2 is null) then
uni2 dif1 else
uni2 TO_POLYGON
(sdo_geom.sdo_union (dif1, dif2, tol))
if (uni2 is not null) then
val sdo_geom.validate_geometry (uni1,
tol) if (val ltgt 'TRUE')
then msg 'Union (Dif1
Dif2) ist fehlerhaft ' val
uni2 null end
if end if end
if end if end if
if (uni2 is null) then ret uni1
else ret TO_POLYGON
(sdo_geom.sdo_difference (uni1, uni2, tol))
if (ret is not null) then
val sdo_geom.validate_geometry (ret, tol)
if (val ltgt 'TRUE') then
msg 'Combine (Union - Union (Dif)) ist
fehlerhaft ' val ret
null
- Eingangsdaten
- Shapefiles mit komplexen Polygonen
(Landschaftselemente als Löcher) - Geometrische Inkonsistenzen (Doppelte
Stützpunkte, Selbstüberschneidungen, Falsche
Orientierung, offene Ringe, zu wenig Punkte) - Kleinräumige Abweichungen der Geometrien durch
fehlenden Geometriefang (Klaffungen,
Überlappungen) - Datenübernahme
- GDV-GeoLoader zum kontrollierten Laden der Daten
nach Oracle 10g - Protokollierung der Geometriefehler
- Korrektur der Geometriefehler falls möglich und
tolerierbar - Ergebnis syntaktisch fehlerfreie Daten in Oracle
10g - Geometrische Hilfsroutinen
- TO_POLYGON zur Auflösung von GeometryCollections
- UNION_GEO als Kombination von SDO_UNION und
VALIDATE_GEOMETRY mit Fehlerprotokoll - DIFFERENCE als Kombination von SDO_DIFFERENCE und
VALIDATE_GEOMETRY mit Fehlerprotokoll - INTERSECTION als Kombination von SDO_INTERSECTION
und VALIDATE_GEOMETRY mit Fehlerprotokoll - COMBINE als Kombination von SDO_UNION,
SDO_DIFFERENCE und VALIDATE_GEOMETRY mit
Fehlerprotokoll
function TO_POLYGON (geoIn in mdsys.sdo_geometry)
return mdsys.sdo_geometry as geoOut
mdsys.sdo_geometry i integer t integer
p integer e integer j integer o
integer begin case geoIn.sdo_gtype when
2003 then geoOut geoIn when
2007 then geoOut geoIn when
2004 then geoOut mdsys.sdo_geometry(20
03, geoIn.sdo_srid, null, null, null)
geoOut.sdo_elem_info mdsys.sdo_elem_info_array(
) geoOut.sdo_ordinates
mdsys.sdo_ordinate_array() i 3
p 0 while (i lt
geoIn.sdo_elem_info.count) loop t
geoIn.sdo_elem_info(i - 1) if ((t
1003) or (t 2003)) then if (t
1003) then p p 1
end if geoOut.sdo_elem_info.
extend(3) geoOut.sdo_elem_info(geo
Out.sdo_elem_info.count - 2)
geoOut.sdo_ordinates.count 1
geoOut.sdo_elem_info(geoOut.sdo_elem_info.count -
1) t geoOut.sdo_elem_info(geoOu
t.sdo_elem_info.count) geoIn.sdo_elem_info(i)
if (i geoIn.sdo_elem_info.count)
then e geoIn.sdo_ordinates.co
unt else e
geoIn.sdo_elem_info(i 1) - 1
end if j e -
geoIn.sdo_elem_info(i - 2) 1
geoOut.sdo_ordinates.extend(j) o
1 while (o lt j) loop
geoOut.sdo_ordinates(geoOut.sdo_ordinates
.count - j o) geoIn.sdo_ordinates(e - j
o) o o 1
end loop end if i i
3 end loop if (p gt 1) then
geoOut.sdo_gtype 2007 end
if else geoOut null end
case return geoOut exception when others
then dbms_output.put_line (SQLCODE ' '
SQLERRM) return null end TO_POLYGON
. . . class com.gdv.geometry.Polygon 126
falsche Digitalisierrichtung class
com.gdv.geometry.Polygon 127 doppelte
Stützpunkte Selbstüberschneidungen class
com.gdv.geometry.Polygon 128 doppelte
Stützpunkte Selbstüberschneidungen class
com.gdv.geometry.Polygon 129 doppelte
Stützpunkte class com.gdv.geometry.Polygon 130
doppelte Stützpunkte class com.gdv.geometry.Polygo
n 131 falsche Digitalisierrichtung class
com.gdv.geometry.Polygon 132 doppelte
Stützpunkte falsche Digitalisierrichtung class
com.gdv.geometry.Polygon 133 doppelte
Stützpunkte falsche Digitalisierrichtung class
com.gdv.geometry.MultiPolygon 134 doppelte
Stützpunkte Nullpolygon . . .
FUNCTION INTERSECTION (geo1 in mdsys.sdo_geometry,
geo2 in mdsys.sdo_geometry, tol in number, msg
out varchar2) RETURN mdsys.sdo_geometry AS ret
mdsys.sdo_geometry val varchar2(100) BEGIN
ret TO_POLYGON (sdo_geom.sdo_intersection
(geo1, geo2, tol)) if (ret is not null) then
val sdo_geom.validate_geometry (ret,
tol) if (val ltgt 'TRUE') then ret
null msg 'Intersect-Fläche ist
fehlerhaft ' val end if else
msg 'Intersect ergibt null' end if
return ret exception when others then
msg 'Intersect wirft Ausnahme ' SQLCODE
' ' SQLERRM return null END
INTERSECTION
FUNCTION DIFFERENCE (geo1 in mdsys.sdo_geometry,
geo2 in mdsys.sdo_geometry, tol in number, msg
out varchar2) RETURN mdsys.sdo_geometry AS ret
mdsys.sdo_geometry val varchar2(100) BEGIN
ret TO_POLYGON (sdo_geom.sdo_difference
(geo1, geo2, tol)) if (ret is not null) then
val sdo_geom.validate_geometry (ret,
tol) if (val ltgt 'TRUE') then ret
null msg 'Differenz-Fläche ist
fehlerhaft ' val end if else
msg 'Differenz ergibt null' end if
return ret exception when others then
msg 'Differenz wirft Ausnahme ' SQLCODE
' ' SQLERRM return null END
DIFFERENCE
FUNCTION UNION_GEO (geo1 in mdsys.sdo_geometry,
geo2 in mdsys.sdo_geometry, tol in number, msg
out varchar2) RETURN mdsys.sdo_geometry AS ret
mdsys.sdo_geometry val varchar2(100) BEGIN
ret TO_POLYGON (sdo_geom.sdo_union (geo1,
geo2, tol)) if (ret is not null) then
val sdo_geom.validate_geometry (ret, tol)
if (val ltgt 'TRUE') then ret null
msg 'Union-Fläche ist fehlerhaft '
val end if else msg 'Union
ergibt null' end if return
ret exception when others then msg
'Union wirft Ausnahme ' SQLCODE ' '
SQLERRM return null END UNION_GEO
Punkte löschen
7Teilflächenberechnung für die Schlußzahlung der
InVeKoS-Betriebsprämien im Saarland
- Verschneidungen
- Zusammenfassung von Antrags- und Kontrolldaten zu
Festgesetzten Daten - Beseitigung von Ãœberlappungen aus den
Festgesetzten Daten zu Einfachen Daten - Verschneidung von Einfachen Daten und
Kulissendaten zu Ergebnisdaten - Validierung
- Auswertung der Fehlerprotokolle
- Auswertung der Flächensummen (Anzahl, Größe)
- Vergleich mit Dektop-GIS-Verschneidung
- Vergleich mit Informix-Verschneidung
- Sichtkontrolle mittels GDV-Spatial Commander
- Vorteile von Oracle 10g
- Möglichkeit zur differenzierten Fehlerbehandlung
- Performanz der Verschneidungsoperationen
- Exakte Geometriebehandlung
8Integration umfangreicher Rasterdatenbestände in
Oracle 10g (GeoRaster)
- Hoher Speicherbedarf
- Unterstützte formate
- TIFF (World File)
- PNG
- JPEG
- GIF
- BMP
- Speicherung der Rasterdaten in Oracle 10G
- Oracle Import Werkzeuge
- PL/SQL Prozeduren (SDO_GEOR)
- GeoRasterLoader
- Oracle Partner
- Rasterkataloge
- Verzeichnisse
9Kachelung der Rasterdaten
- Performance trotz hoher Datenmenge
- Durch teilen der GeoRaster Objekte in kleinere
Blöcke - Anzahl der Blöcke Anwendungsspezifisch wählen
- Kachelung der Daten
- beim Ladevorgang
- über PL/SQL
SDO_GEOR.changeFormatCopy( georaster gt
inGeoraster , parameter gt 'blocksize(512,512
)', georaster gt outGeoraster )
10Pyramidenbildung
- Unterschiedliche Auflösungen durch Resampling
- NN (nächtsgelegene Nachbarzelle)
- Avarage4 (arithmetische Mittel - 4
Nachbarzellen) - Avarage16 (arithmetische Mittel - 16
Nachbarzellen) - Bilinear (bilineare Interpolation über 4
Nachbarzellen) - Cubic (bikubische Faltung - 16 Nachbarzellen)
- Pyramidenebenen bilden
- SDO_GEOR.generatePyramid(...)
- 'rLevel' definiert die Pyramidenebenen
- 'resampling' definiert die Berechnungsmethode
SDO_GEOR.generatePyramid( zielgeoraster gt
georaster, parameter gt 'rLevel2,
resamplingavarage4' )
11Reduktion der Datenmenge durch Kompression
- Ab Oracle 10g R2
- Kompressionsverfahren
- JPEG (Verlustbehaftet)
- DEFLATE ZLIB (Verlustfrei)
- WAVELET (plug-ins) ?
- Alle Operationen sind auch auf Komprimierten
Daten möglich - Temp Tablespace Ausreichend dimensionieren
- Daten komprimieren
- Ladevorgang
- PL/SQL
SDO_GEOR.changeFormatCopy( georaster gt
inGeoraster , parameter gt 'compressionDEFLAT
E', georaster gt outGeoraster )
12Oracle 10g als zentraler Bestandteil komplexer
GIS-Projekte
- Herkömmliches Desktop-GIS
- Einbenutzersystem
- Einfach zu bedienen / zu warten
- Verarbeitung kleiner, lokaler Daten
- Einfaches GIS-System
- Mehrbenutzersystem
- Gemeinsame Daten auf Datenbank
- Verarbeitung großer Datenmengen
- Typisches GIS-System
- Dreischicht-System
- Benutzerverwaltung
- Zentrale Applikationssteuerung
- Komplexes GIS-System
- Verteiltes System
- Nutzung von Standards / Diensten
- Geringe Redundanz
- Hohe Flexibilität
GIS-Applikation
GDV-MapBuilder
DBMS
Oracle 10g
13Wir bedanken uns für Ihre Aufmerksamkeit
- Kontakt
- Dirk Hübener, Kushtrim Krasniqi
- GDV Gesellschaft für geografische
Datenverarbeitung mbH - Binger Straße 49..51 D.55218 Ingelheim
- Fon 49.6132.7148.0 Fax ...28
- Mail devel_at_gdv.com Web www.gdv.com