Aus einer zusammengesetzten Geometrie (Multipolygon, welches mehrere Elemente, optional auch Subelemente/Ringe enthält) können mit Hilfe der Funktion EXTRACT einzelne Elemente herausgezogen werden.
Diese Funktion für 2D-Vektordaten, sowie analog EXTRACT3D für 3D-Vektordaten, steht im PL/SQL Package SDO_UTIL zur Verfügung. Letztere Funktion gibt es allerdings erst seit der DB Version 11.1 im Package.
Das Format ist wie folgt kurz beschrieben:
Und wie geht´s konkret?
Gegeben sei das Multipolgyon "Brandenburg" (SDO_GTYPE = 2007) aus dem World Sample NAVTEQ Data Bundle.
-- Extraction von Element 1, Ring 1
-- Extraction von Element 1, Ring 2
-- Extraction von Element 2, Ring 2
Weitere Infos finden sich natürlich in der Online-Doku auf OTN (http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14255/sdo_util.htm#sthref1955).
sdo_util.extract (
geometry IN SDO_GEOMETRY,
element IN NUMBER,
ring IN NUMBER default 0
) return sdo_geometry; -- 2D
SQL> select sdo_util.extract(geometry, 1, 1) from m_admin_area2 where feature_name = 'Brandenburg';
-- Ergebnis ist der äußere Ring von Brandenburg
SQL> select sdo_util.extract(geometry, 1, 2) from m_admin_area2 where feature_name = 'Brandenburg';
-- Ergebnis ist der innere Ring von Brandenburg, gleichzeitig die administrative Grenze des Bundeslandes Berlin
SQL> select sdo_util.extract(geometry, 2, 1) from m_admin_area2 where feature_name = 'Brandenburg';
-- Ergebnis hier ist eine kleine Brandenburgische Exklave in Sachsen-Anhalt
Tipps, Tricks, Best Practices und Aktuelles zu Oracle Spatial Technologies
Mittwoch, 8. September 2010
De-aggregieren zusammengesetzter Geometrien
Abonnieren
Kommentare zum Post (Atom)
Wer übrigens herausfinden möchte, wieviel Elemente eine Geometrie enthält, kann hierfür die Funktion GETNUMELEM im gleichen Package benutzen.
AntwortenLöschenWieder auf das Beispiel Brandenburg bezogen:
select sdo_util.getnumelem(geometry) from m_admin_area2 where feature_name = 'Brandenburg';
Im Ergebnis werden 6 Elemente angezeigt. Und wenn man sich diese anschaut, stellen diese insgesamt fünf Exklaven in Sachsen-Anhalt dar.