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
親トピック: SDO_TOPOパッケージ・サブプログラム