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

前
次

31.10 SDO_UTIL.EXTRACT

書式

SDO_UTIL.EXTRACT(
     geometry IN SDO_GEOMETRY, 
     element  IN NUMBER, 
     ring     IN NUMBER DEFAULT 0 
     ) RETURN SDO_GEOMETRY;

説明

2次元の入力ジオメトリの特定の要素(およびオプションで輪)を表現する2次元のジオメトリを戻します。

パラメータ

geometry

戻されるジオメトリの抽出元のジオメトリを指定します。2次元のジオメトリを指定する必要があります。

element

ジオメトリ内の要素の番号を指定します。1は1つ目の要素、2は2つ目の要素のようになります。1、2または3で終わるSDO_GTYPE値を持つジオメトリ(「SDO_GTYPE」を参照)は、1つの要素を持ちます。4、5、6または7で終わるSDO_GTYPE値を持つジオメトリは、複数の要素を持つ可能性があります。たとえば、SDO_GTYPEが2007の複数ポリゴンには、3つの要素(ポリゴン)が含まれる場合があります。

ring

要素内のサブ要素(輪)の番号を指定します。1は1つ目のサブ要素、2は2つ目のサブ要素のようになります。このパラメータは、1つ以上の穴があるポリゴンのサブ要素または点クラスタのサブ要素を指定する場合にのみ有効です。

  • 穴があるポリゴンの場合、1つ目のサブ要素は外部の輪、2つ目のサブ要素は1つ目の内部の輪、3つ目のサブ要素は2つ目の内部の輪のようになります。たとえば、「穴のあるポリゴン」図2-4に示す穴のあるポリゴンでは、外部の輪がサブ要素1、内部の輪(穴)がサブ要素2になります。

  • 点クラスタの場合、1つ目のサブ要素は点クラスタの1つ目の点、2つ目のサブ要素は点クラスタの2つ目の点のようになります。

デフォルト値は0(ゼロ)です。この場合、要素全体が抽出されます。

使用上の注意

このファンクションは、2次元のジオメトリにのみ適用されます。3次元のジオメトリについては、SDO_UTIL.EXTRACT3Dファンクションを使用します。

このファンクションは、複雑なジオメトリから特定の要素またはサブ要素を抽出する場合に有効です。たとえば、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションまたはSDO_GEOM.VALIDATE_LAYER_WITH_CONTEXTプロシージャ(いずれについても「SDO_GEOMパッケージ(ジオメトリ)を参照)を使用してジオメトリが無効であると特定した場合は、EXTRACTファンクションを使用して無効なジオメトリを抽出し、調べることができます。

1つ以上の穴のあるポリゴンの場合、抽出された内部の輪を表現するジオメトリは、戻されると方向が変更され、頂点が(内部の輪内では時計回りであったのに対して)反時計回りで表現されます。

geometryがNULLの場合、または0(ゼロ)で終わるSDO_GTYPE値を持つ場合、このファンクションはNULLのジオメトリを戻します。

geometryには、タイプが0(ゼロ)の要素を含めることはできません。タイプが0 (ゼロ)の要素については、「タイプ0 (ゼロ)要素」を参照してください。

このファンクションは、縦座標がNULL値のジオメトリでの使用は想定されていません。戻されるジオメトリでは、縦座標のNULL値は0(ゼロ)で置き換えられます。

elementまたはringgeometryに対して無効な数である場合は、例外が発生します。

次の例では、cola_cジオメトリの1つ目(1つのみ)の要素を抽出します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SELECT c.name, SDO_UTIL.EXTRACT(c.shape, 1)
   FROM cola_markets c WHERE c.name = 'cola_c';

NAME                                                                            
--------------------------------                                                
SDO_UTIL.EXTRACT(C.SHAPE,1)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_IN
--------------------------------------------------------------------------------
cola_c                                                                          
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3))

次の例では、(「穴のあるポリゴン」例2-7に示すINSERT文と同じ文を使用して)穴のあるポリゴンを挿入し、穴(2つ目のサブ要素)を表現するジオメトリを抽出します。入力ジオメトリの穴(2つ目のサブ要素)では頂点が時計回りで表現されているのに対し、EXTRACTファンクションによって戻されたジオメトリでは頂点が反時計回りで表現されていることに注意してください。

-- 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 the hole geometry (second subelement).
SELECT SDO_UTIL.EXTRACT(c.shape, 1, 2)
   FROM cola_markets c WHERE c.name = 'polygon_with_hole';

SDO_UTIL.EXTRACT(C.SHAPE,1,2)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(7, 5, 10, 5, 10, 10, 7, 10, 7, 5))