書式
SDO_UTIL.EXTRACT_ALL( geometry IN SDO_GEOMETRY, flatten IN NUMBER DEFAULT 1 ) RETURN SDO_GEOMETRY_ARRAY;
説明
2次元の入力ジオメトリのすべての要素およびサブ要素を、1つ以上のジオメトリの配列として戻します。VARRAY OF SDO_GEOMETRY
として定義されるSDO_GEOMETRY_ARRAY型のオブジェクトを戻します。
パラメータ
すべての要素とサブ要素の抽出元となるジオメトリを指定します。2次元のジオメトリを指定する必要があります。
外部の輪と1つ以上の内部の輪を含むジオメトリについて、輪を個別のジオメトリに「フラット化」するかどうかを示すフラグを指定します。
0
(ゼロ)を指定すると、要素ごとに1つのジオメトリが戻されますが、リングを個別のジオメトリにフラット化しません。(入力ジオメトリの各要素に対して1つのジオメトリが戻されることは変わりません。)
1
(デフォルト)またはその他のゼロ以外の値を指定すると、リングを個別のジオメトリにフラット化します。
たとえば、ポリゴンに外部の輪と内部の輪が1つずつ含まれる場合、0
の値を指定すると、両方の輪を含む1つのジオメトリが戻され、1
を指定すると、2つのジオメトリ(それぞれに1つの輪がジオメトリとして含まれる)が戻されます。
外部の輪と1つ以上の内部の輪を含まないジオメトリの場合、このパラメータは無視されます。
使用上の注意
このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。
このファンクションを使用すると、ジオメトリに含まれる要素とサブ要素の数に関係なく、ジオメトリからすべての要素とサブ要素を抽出できます。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(「SDO_GTYPE」を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。個々の要素を抽出するには、SDO_UTIL.EXTRACTファンクションをかわりに使用します。
1つ以上の穴のあるポリゴンで、flatten
パラメータにデフォルト値が指定されている場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。ただし、flatten
パラメータ値が0である場合は、方向の変更は実行されません。
geometry
がNULLの場合、または0(ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。
geometry
には、タイプが0(ゼロ)の要素を含めることはできません。タイプが0 (ゼロ)の要素については、「タイプ0 (ゼロ)要素」を参照してください。
このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。
例
次の例では、cola_b
ジオメトリからすべての要素を抽出します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)
SELECT * FROM TABLE( SELECT SDO_UTIL.EXTRACT_ALL(c.shape) FROM cola_markets c WHERE c.name = 'cola_b'); SDO_GTYPE SDO_SRID ---------- ---------- SDO_POINT(X, Y, Z) -------------------------------------------------------------------------------- SDO_ELEM_INFO -------------------------------------------------------------------------------- SDO_ORDINATES -------------------------------------------------------------------------------- 2003 SDO_ELEM_INFO_ARRAY(1, 1003, 1) SDO_ORDINATE_ARRAY(5, 1, 8, 1, 8, 6, 5, 7, 5, 1)
次の例では、(「穴のあるポリゴン」の例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、polygon_with_hole
ジオメトリからすべての要素とサブ要素を抽出します。flatten
パラメータが指定されていないため、入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACT_ALLファンクションによって戻された2つ目のジオメトリでは、頂点が反時計回りで表現されていることに注意してください。
-- Insert polygon with hole. INSERT INTO cola_markets VALUES( 10, 'polygon_with_hole', SDO_GEOMETRY( 2003, -- two-dimensional polygon NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5) ) ); 1 row created. -- Extract all, with default for flatten. SELECT * FROM TABLE( SELECT SDO_UTIL.EXTRACT_ALL(c.shape) FROM cola_markets c WHERE c.name = 'polygon_with_hole'); SDO_GTYPE SDO_SRID ---------- ---------- SDO_POINT(X, Y, Z) -------------------------------------------------------------------------------- SDO_ELEM_INFO -------------------------------------------------------------------------------- SDO_ORDINATES -------------------------------------------------------------------------------- 2003 SDO_ELEM_INFO_ARRAY(1, 1003, 1) SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4) SDO_GTYPE SDO_SRID ---------- ---------- SDO_POINT(X, Y, Z) -------------------------------------------------------------------------------- SDO_ELEM_INFO -------------------------------------------------------------------------------- SDO_ORDINATES -------------------------------------------------------------------------------- 2003 SDO_ELEM_INFO_ARRAY(1, 1003, 1) SDO_ORDINATE_ARRAY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5)
次の例では、(前述の例で挿入された) polygon_with_hole
ジオメトリからすべての要素とサブ要素を抽出し、flatten
パラメータ値を0 (ゼロ)として指定します。これにより、戻される配列には、入力ジオメトリと同じ1つのジオメトリが含まれます(つまり、EXTRACT_ALLファンクションによって戻されるジオメトリでは、穴(2つ目のサブ要素)の頂点は、入力ジオメトリでの場合と同様に時計回りです)。
-- Extract all, with flatten = 0. SELECT * FROM TABLE( SELECT SDO_UTIL.EXTRACT_ALL(c.shape, 0) FROM cola_markets c WHERE c.name = 'polygon_with_hole'); SDO_GTYPE SDO_SRID ---------- ---------- SDO_POINT(X, Y, Z) -------------------------------------------------------------------------------- SDO_ELEM_INFO -------------------------------------------------------------------------------- SDO_ORDINATES -------------------------------------------------------------------------------- 2003 SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 2003, 1) SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4, 7, 5, 7, 10, 10, 10, 10, 5, 7, 5) SDO_GTYPE SDO_SRID ---------- ---------- SDO_POINT(X, Y, Z) -------------------------------------------------------------------------------- SDO_ELEM_INFO -------------------------------------------------------------------------------- SDO_ORDINATES --------------------------------------------------------------------------------
関連項目