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_GK3',
MDSYS.SDO_DIM_ARRAY(
MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5),
MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5)
),
8307
);
-- 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:
SELECTOftmals wird auch ein Spatial-Index zur Datenvisualisierung benötigt:
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 10
CREATE INDEX "MEINE_GEO_DATEN_IDX" ON "MEINE_GEO_DATEN" ("GEO_WGS84")
INDEXTYPE IS "MDSYS"."SPATIAL_INDEX" ;