3.10 SDO_TOPO.RELATE

構文

SDO_TOPO.RELATE(     
  geom1  IN SDO_TOPO_GEOMETRY,      
  geom2  IN SDO_TOPO_GEOMETRY,      
  mask   IN VARCHAR2      
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
  feature1  IN SDO_TOPO_GEOMETRY,
  feature2  IN SDO_GEOMETRY,
  mask      IN VARCHAR2
) RETURN VARCHAR2;

または

SDO_TOPO.RELATE(
  geom            IN SDO_TOPO_GEOMETRY,
  topo_elem_array IN SDO_TOPO_OBJECT_ARRAY,
  mask            IN VARCHAR2      
) RETURN VARCHAR2;

説明

2つのトポロジ・ジオメトリ・オブジェクト、トポロジ・ジオメトリと空間ジオメトリ、またはトポロジ・ジオメトリとトポロジ・オブジェクト配列(SDO_TOPO_OBJECT_ARRAYオブジェクト)を調べて、これらの空間関係を決定します。

パラメータ

geom1

トポロジ・ジオメトリ・オブジェクトを指定します。

geom2

トポロジ・ジオメトリ・オブジェクトを指定します。

feature1

トポロジ・ジオメトリ・オブジェクトを指定します。

feature2

空間ジオメトリ・オブジェクトを指定します。

geom

トポロジ・ジオメトリ・オブジェクトを指定します。

topo_elem_array

SDO_TOPO_OBJECT_ARRAY型(「挿入操作用のコンストラクタ: 位相要素の指定」を参照)のトポロジ・オブジェクト配列を指定します。

mask

確認する1つ以上の関係を指定します。「使用上のノート」でキーワードのリストを参照してください。

使用上のノート

大量のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションよりもトポロジ演算子(「トポロジ演算子」を参照)を使用した方が、パフォーマンスが向上します。ただし、2つのオブジェクトや少数のオブジェクトを確認する場合は、SDO_TOPO.RELATEファンクションの方が高いパフォーマンスを得られます。また、トポロジ演算子ではなくSDO_TOPO.RELATEファンクションを使用する必要がある場合もあります。たとえば、トポロジ演算子にはDETERMINEマスク・キーワードを指定できません。

次のキーワードをmaskパラメータで指定して、2つのオブジェクト間の空間関係を決定することができます。

  • ANYINTERACT: オブジェクトが非接続ではない場合にTRUEを戻します。

  • CONTAINS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • COVEREDBY: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が1つ以上の点で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • COVERS: 2番目のオブジェクトが完全に最初のオブジェクト内にあり、オブジェクト境界が1つ以上の場所で触れている場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • DETERMINE: ジオメトリに最も一致する1つの関係キーワードを戻します。

  • DISJOINT: オブジェクトが共通の境界点や内部点を持たない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • EQUAL: オブジェクトが境界と内部のすべての点(オブジェクト内のすべての穴を含む)を共有している場合は、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • INSIDE: 最初のオブジェクトが完全に2番目のオブジェクト内にあり、オブジェクト境界が触れていない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • ON: 線(最初のオブジェクト)の境界と内部が完全にポリゴン(2番目のオブジェクト)の境界上にある場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • OVERLAPBDYDISJOINT: オブジェクトが重なっているが、その境界は相互作用していない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • OVERLAPBDYINTERSECT: オブジェクトが重なっており、その境界が1つ以上の場所で相互作用している場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

  • TOUCH: 2つのオブジェクトが共通の境界点を共有するが、内部点は共有しない場合、TRUEを戻します。それ以外の場合は、FALSEを戻します。

maskの値(DETERMINEを除く)は、論理ブール演算子ORを使用して組み合せることができます。たとえば、'INSIDE + TOUCH'を指定すると、テストの結果に応じて文字列TRUEまたはFALSEを戻します。

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトとP3土地区画との間にANYINTERACT関係が存在するかどうか(つまり、土地区画と相互作用する通り)を検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを参照しています。出力は、読みやすくするために変更が加えられています。)

SELECT c.feature_name,
  SDO_TOPO.RELATE(c.feature, l.feature, 'anyinteract') Any_Interaction
  FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';
 
FEATURE_NAME  ANY_INTERACTION                                                                     
------------  ---------------        
R1            TRUE
R2            FALSE                
R3            FALSE                            
R4            FALSE

次の例では、CITY_STREETS表内の各トポロジ・ジオメトリ・オブジェクトと、P3という名前の土地区画フィーチャと偶然同じになったSDO_TOPO_OBJECT_ARRAYオブジェクトの間に、ANYINTERACT関係が存在するかどうかを検出します。(この例では、「トポロジの例(PL/SQL)」の定義およびデータを使用しています。)結果は前述の例と同様です。また、読みやすいように形式を変更しています。

SELECT c.feature_name, 
  SDO_TOPO.RELATE(c.feature,
    SDO_TOPO_OBJECT_ARRAY (SDO_TOPO_OBJECT (5, 3), SDO_TOPO_OBJECT (8, 3)), 
    'anyinteract') Any_Interaction 
  FROM city_streets c, land_parcels l WHERE l.feature_name = 'P3';
 
FEATURE_NAME  ANY_INTERACTION                                                                     
------------  ---------------        
R1            TRUE
R2            FALSE                
R3            FALSE                            
R4            FALSE