Damit Tools wie
- Oracle Spatial Reader
- FeatureReader
- OracleQuerier
- GeoServer
mit Oracle Spatial Tabellen arbeiten können, müssen diese in einer Meta-Schicht bekannt gemacht werden. Dies ist im Prinzip ganz einfach, denn dazu muss nur die View USER_SDO_GEOM_METADATA gefüllt werden.
Die View beinhaltet die folgenden Spalten:
(
TABLE_NAME VARCHAR2(32),
COLUMN_NAME VARCHAR2(32),
DIMINFO SDO_DIM_ARRAY,
SRID NUMBER
);
Um diese richtig zu füllen muss neben Tabelle, Spalte und SRID (Geotyp), auch die Matrix in welchen Bereich sich die Daten befinden hinterlegt werden.
Dies ist relativ einfach über ein SQL Statement abbildbar.
Hierbei beziehe ich mich auf meine Testtabelle aus dem 1. Teil meiner Spatial Posts:
Die Quelle des Teilmenge-Statements stammt von dem Spatial Blog: http://spatialdbadvisor.com/
Wenn Ihr tiefergehendes Wissen zum Thema USER_SDO_GEOM_METADATA sucht, dann schaut euch mal diese Beiträge an:
docs.oracle.com - Geometry Metadata Views
knowledge.safe.com - Adding metadata entries for Oracle spatial tables or views
Ergebnis:
Der hinterlegte Bereich kann nun noch mit den Detaildaten verifiziert werden:
- Oracle Spatial Reader
- FeatureReader
- OracleQuerier
- GeoServer
mit Oracle Spatial Tabellen arbeiten können, müssen diese in einer Meta-Schicht bekannt gemacht werden. Dies ist im Prinzip ganz einfach, denn dazu muss nur die View USER_SDO_GEOM_METADATA gefüllt werden.
Die View beinhaltet die folgenden Spalten:
(
TABLE_NAME VARCHAR2(32),
COLUMN_NAME VARCHAR2(32),
DIMINFO SDO_DIM_ARRAY,
SRID NUMBER
);
Um diese richtig zu füllen muss neben Tabelle, Spalte und SRID (Geotyp), auch die Matrix in welchen Bereich sich die Daten befinden hinterlegt werden.
Dies ist relativ einfach über ein SQL Statement abbildbar.
Hierbei beziehe ich mich auf meine Testtabelle aus dem 1. Teil meiner Spatial Posts:
-- Komplette Matrix INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'GV_STANDORT_LAYER2_LIST', 'GEO_WGS84', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5), MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5) ), 8307 ); ---------------------------------------------------- -- Insert auf Basis eines vorhandenen Eintrags INSERT INTO USER_SDO_GEOM_METADATA ( TABLE_NAME, COLUMN_NAME, DIMINFO, SRID ) select 'GV_STANDORT_LAYER2_LIST' as TABLE_NAME, COLUMN_NAME, DIMINFO, SRID from USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'GV_STANDORT_LAYER1' ---------------------------------------------------- -- Teilmenge aus Ausgangsdaten INSERT INTO USER_SDO_GEOM_METADATA ( TABLE_NAME, COLUMN_NAME, DIMINFO, SRID ) SELECT 'MEINE_GEO_DATEN' AS TABLE_NAME, 'GEO_WGS84' COLUMN_NAME, MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', MINX, MAXX, 0.05), MDSYS.SDO_DIM_ELEMENT('Y', MINY, MAXY, 0.05) ) AS DIMINFO, 8307 AS SRID -- WGS84 FROM ( SELECT TRUNC( MIN( V.X ) - 1,0) AS MINX, ROUND( MAX( V.X ) + 1,0) AS MAXX, TRUNC( MIN( V.Y ) - 1,0) AS MINY, ROUND( MAX( V.Y ) + 1,0) AS MAXY FROM ( SELECT SDO_AGGR_MBR(DS.GEO_WGS84) AS AMBR FROM MEINE_GEO_DATEN DS --WHERE DS.X_KOORDINATE IS NOT NULL -- Geodaten dürfen nicht leer sein ) DA, TABLE(MDSYS.SDO_UTIL.GETVERTICES(DA.AMBR)) V )
Die Quelle des Teilmenge-Statements stammt von dem Spatial Blog: http://spatialdbadvisor.com/
Wenn Ihr tiefergehendes Wissen zum Thema USER_SDO_GEOM_METADATA sucht, dann schaut euch mal diese Beiträge an:
docs.oracle.com - Geometry Metadata Views
knowledge.safe.com - Adding metadata entries for Oracle spatial tables or views
Ergebnis:
Der hinterlegte Bereich kann nun noch mit den Detaildaten verifiziert werden:
SELECT ADRESSE, SDO_GEOM.VALIDATE_GEOMETRY(LAY.GEO_WGS84, MET.DIMINFO) RESULT FROM MEINE_GEO_DATEN LAY CROSS JOIN USER_SDO_GEOM_METADATA MET WHERE ROWNUM BETWEEN 1 AND 10Oftmals wird auch ein Spatial-Index zur Datenvisualisierung benötigt:
CREATE INDEX "MEINE_GEO_DATEN_IDX" ON "MEINE_GEO_DATEN" ("GEO_WGS84") INDEXTYPE IS "MDSYS"."SPATIAL_INDEX" ;