プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

31.11 SDO_UTIL.EXTRACT_ALL

書式

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型のオブジェクトを戻します。

パラメータ

geometry

すべての要素とサブ要素の抽出元となるジオメトリを指定します。2次元のジオメトリを指定する必要があります。

flatten

外部の輪と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                                                                   
--------------------------------------------------------------------------------

関連項目