Oracle10g GeoRaster Haitham Zyadeh Senior Sales Consultant Server Technology Competence Center Düsseldorf Oracle Deutschland GmbH Spatial in Oracle10g Topology Data Model – Unterstützung für topologische Beziehungen (Verwaltung von Flächen und Teilgebieten) Network Data Model – Speicherung von Netzwerken (Graphen) GeoRaster Data Model – Verwaltung von Rasterdaten Geocoding – Funktionen zur Umwandlung von Adressen in Koordinaten Spatial Analytic Functions – Erzeugung von räumlichen Beziehungen Rasterdaten vs. Vektordaten 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 Rasterdaten vs. Vektordaten Vektordaten – – – Präzise Repräsentation von Punkten, Linien oder Polygonen Kompakte Form -> effiziente Speicherung Vorteile Rendering von Land-/Straßenkarten Verbindungen bzw. Zusammenhänge zwischen Objekten Rasterdaten: – – – Viele Zellen approximieren Punkte, Linien oder Polygone Speicherung der vollen Matrix -> hoher Platzbedarf Vorteile Leicht zu zeichnen, da pixelorientiert Darstellung vieler Details (Satellitenfotos) Rasterdaten in Oracle10g Oracle10g GeoRaster Neue Datentypen – – SDO_GEORASTER SDO_RASTER Geokoordinaten – Zusammenhang zwischen Rasterdaten und Geokoordinaten in der Datenbank Funktionalitäten – – – Importieren / Laden von Rasterdaten Bearbeiten von Rasterdaten Visualisierung Speicherung der Rasterdaten Datenmodell GEORASTER-Tabelle (Metadaten) Raster SDO_GEORASTER Rasterdaten-Tabelle (Daten) Rasterblock Rasterblock Rasterblock SDO_RASTER Speicherung der Rasterdaten Georaster-Tabelle (SDO_GEORASTER) – – Eine Zeile pro Raster Metadaten "Spatialextent" Auslösungs-Pyramiden Name der Rasterdatentabelle Raster SDO_GEORASTER Rasterdatentabelle (SDO_RASTER) – – – Eine Zeile pro Rasterblock -> mehrere Zeilen pro Raster Inhalt: Rasterdatenblöcke als BLOB Achtung: Datenkompression Verfügbar erst mit 10g Release 2 Rasterblock Rasterblock Rasterblock SDO_RASTER Georaster Datentypen SQL> desc SDO_GEORASTER Name Null? -------------------------- -------RASTERTYPE SPATIALEXTENT RASTERDATATABLE RASTERID METADATA Type -----------------NUMBER MDSYS.SDO_GEOMETRY VARCHAR2(32) NUMBER SYS.XMLTYPE SQL> desc SDO_RASTER Name Null? -------------------------- -------RASTERID PYRAMIDLEVEL BANDBLOCKNUMBER ROWBLOCKNUMBER COLUMNBLOCKNUMBER BLOCKMBR RASTERBLOCK Type -----------------NUMBER NUMBER NUMBER NUMBER NUMBER MDSYS.SDO_GEOMETRY BLOB Speicherung der Rasterdaten Datenmodell GEORASTER-Tabelle (Metadaten) Raster SDO_GEORASTER Rasterdaten-Tabelle (Daten) Rasterblock Rasterblock Rasterblock Weitere Informationen VAT, GCP, etc. SDO_RASTER BLOBs ... Speicherung der Rasterdaten Blocking Rasterdateien können extrem groß werden Effizientere Speicherung in kleineren Blöcken GeoRaster erlaubt das "Blocking" anhand … – "Bands", "Zeilen", "Spalten" Beispiel – – Vor dem Laden: 1 (große) Rasterdatei Nach dem Laden: 4 (kleinere) Blöcke Blocking "4 x 4" Speicherung der Rasterdaten Blocking Erzeugung von 4 Blöcken beim Laden des Rasters GEORASTER-Tabelle (Metadaten) Raster SDO_GEORASTER Rasterdaten-Tabelle (Daten) Rasterblock Rasterblock Rasterblock Rasterblock SDO_RASTER Georeferenzierung Raster "Spatial-Extent": Zuordnung des Rasters zu einem Koordinatensystem X Y GeoRaster Spatial Reference System (SRS) Breitengrade National Park Restaurant Längengrade Georeferenzierung "Spatialextent" Spatial Extent zu einem Raster abrufen Koordinatensystem: GK Zone 3 (DHDN) select e.georaster.spatialextent from georaster_table e where georid=1; GEORASTER.SPATIALEXTENT(SDO_GTYPE, SDO_SRID, SDO_POINT( ------------------------------------------------------SDO_GEOMETRY(2003, 82027, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(3699985.79, 5969990.98, 36 99985.79, 5929975.35, 3699985.79, 5889990.98, 3740001.4 2, 5889990.98, 3779985.79, 5889990.98, 3779985.79, 5929 975.35, 3779985.79, 5969990.98, 3740001.42, 5969990.98, 3699985.79, 5969990.98)) Auflösungspyramiden Level 2 Vorberechnung von Ansichten der Rasterdaten mit geringerer Auflösung Höhere "Pyramidenebene" bedeutet geringere Auflösung Level 0 sdo_geor.generatePyramid( georaster => gr, pyramidparams => 'rlevel=2, resampling=NN' ); Level 1 Ebene 0: Originaldaten Wertetabelle Zuordnung der Zahlenwerte im Raster zu Attributen Normale relationale Tabelle sdo_geor.setVAT( georaster => gr, layernumber => 0, vatname => 'MY_VAT_TAB' ); Wertetabelle (Value Attribute Table) WERT 1 2 3 0 BEDEUTUNG niedrige Verschmutzung mittlere Verschmutzung hohe Verschmutzung keine Daten Rasterdaten … 2 2 2 2 1 2 2 1 1 1 1 1 1 2 1 3 2 2 2 3 1 3 1 0 3 3 1 2 3 3 3 1 1 2 2 0 3 3 3 1 1 1 0 3 3 1 1 1 0 0 0 2 1 1 0 0 2 2 1 1 1 0 0 0 Farbtabelle Falschfarbendarstellung Farbzuordnung für jeden Wert im Raster Angabe von RGB-Werten sdo_geor.setColorMapTable( georaster => gr, layernumber => 0, tablename => 'MY_COLOR_TAB' ); CELL VALUE 1 2 Red 255 82 Green 255 123 3 0 142 0 230 0 Blue 0 67 98 0 Falschfarbendarstellung am Beispiel Falschfarbendarstellung am Beispiel Darstellen von Zellwerten und Ändern der RGB-Farben je Layer Visualisierung der Rasterdaten OracleAS MapViewer GeoRaster Setup - Syntaxbeispiele 1. Schritt: Anlegen der Rastertabelle CREATE TABLE MY_RASTER_TAB( ID NUMBER PRIMARY KEY, SOURCE_FILE VARCHAR2(80), DESCRIPTION VARCHAR2(32), GEORASTER SDO_GEORASTER ) call SDO_GEOR_UTL.createDMLTrigger('MY_RASTER_TAB','GEORASTER') 2. Schritt: Anlegen der Rasterdatentabelle CREATE TABLE RDT_1 OF SDO_RASTER( PRIMARY KEY ( RASTERID, PYRAMIDLEVEL, BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER ) ) LOB(RASTERBLOCK) STORE AS (NOCACHE NOLOGGING); GeoRaster Setup - Syntaxbeispiele 3. Schritt: Initialisierung der Raster-Objekte – Erzeugung "leerer" Rasterobjekte INSERT INTO MY_RASTER_TAB (ID, GEORASTER) VALUES (1, SDO_GEOR.INIT('RDT_1', 1)); : : INSERT INTO MY_RASTER_TAB (ID, GEORASTER) VALUES (4, SDO_GEOR.INIT('RDT_1', 100)); Rasterdaten laden ... Unterstützte Formate – – – – – TIFF mit "World File" JPEG GIF BMP PNG Unterstützte Wege – – – Außerhalb der Datenbank GeoRasterLoader (Java-Werkzeug) In der Datenbank: PL/SQL Paket SDO_GEOR 3rd-Party Werkzeuge Beispiel: PCI Geomatics GeoRaster Setup – Syntaxbeispiele GeoRasterLoader Beispielaufruf von der Kommandozeile java -Xms900M -Xmx900M GeoRasterLoader 127.0.0.1 orcl101 1521 georaster georaster thin 32 T JDBC connection parameters my_raster_tab georaster Table and column "blocking=true,blocksize=(512,512,1)" Raster blocking "../images/image01.tif" Source file 1 "RDT_1" Raster id and data table GeoRaster Setup – Syntaxbeispiele Laden mit PL/SQL Paket SDO_GEOR declare g sdo_georaster; begin select georaster into g from my_raster_tab where id = 1 for update; sdo_geor.importFrom( georaster => g, storageparam => 'blocksize=(512,512)', r_sourceformat => 'TIFF', r_sourcetype => 'file', r_sourcename => '../images/image01.tif', h_sourceformat => 'WORLDFILE', h_sourcetype => 'file', h_sourcename => '../images/image01.tfw', ); update my_raster_tab set georaster = g where id = 1; end; Raster sperren Importieren Update Raster GeoRaster Setup – Syntaxbeispiele Auflösungspyramide generieren declare geor sdo_georaster; begin select georaster into geor from my_raster_tab Raster sperren where id = 1 for update; sdo_geor.generatePyramid( georaster => geor, pyramidparams => 'rlevel=4' ); update my_raster_tab set georaster = geor where id = 1; end; Auflösungspyramide generieren Update Raster GeoRaster Setup – Syntaxbeispiele Teile aus dem Raster extrahieren … PL/SQL Prozedur BLOB als OUT-Parameter sdo_geor.getRasterSubset( georaster => g, pyramidlevel => 0, layernumbers => '1-3', window => sdo_geometry( 2003, 8307, null, sdo_elem_info_array(1, 1003, 3), sdo_ordinate_array( -4.8095747, 50.3160369, -3.4189001, 50.7910561 ) ), rasterBlob => b ); GeoRaster Setup – Syntaxbeispiele Teile aus dem Raster extrahieren … java -Xms900M -Xmx900M GeoRasterExporter 127.0.0.1 orcl101 1521 georaster georaster thin 32 T JDBC Parameter my_raster_tab georaster Tabelle "1,RDT_1" Raster ID "JPEG" Ausgabeformat raster_1_p0_0_0.500_500 Dateiname "pLevel=0,cropArea=(0,0,500,500)" Formatierung GeoRaster Setup – Syntaxbeispiele Fazit Oracle10g unterstützt Raster- und Vektordaten – – – – – – – Laden Indizieren (Spatial Indizes) Georeferenzierung Auflösungspyramiden Bearbeiten Visualisieren (MapViewer) Exportieren Anwendungsintegration – Oracle HTML DB als Beispiel Q U E S T A N S W I O N S E R S