書式
SDO_GEOM.RELATE( geom1 IN SDO_GEOMETRY, dim1 IN SDO_DIM_ARRAY, mask IN VARCHAR2, geom2 IN SDO_GEOMETRY, dim2 IN SDO_DIM_ARRAY ) RETURN VARCHAR2;
または
SDO_GEOM.RELATE( geom1 IN SDO_GEOMETRY, mask IN VARCHAR2, geom2 IN SDO_GEOMETRY, tol IN NUMBER ) RETURN VARCHAR2;
説明
2つのジオメトリ・オブジェクトの空間的関係を判断するために、2つのオブジェクトを検査します。
パラメータ
ジオメトリ・オブジェクト。
geom1
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。
チェックする関係のリストを指定します。「使用方法」のキーワードのリストを参照してください。
ジオメトリ・オブジェクト。
geom2
に対応する次元情報の配列を指定します。通常、xxx_SDO_GEOM_METADATAビューの1つから選択します(「ジオメトリのメタデータ・ビュー」を参照)。
許容差(「許容差」を参照)。
使用上の注意
パフォーマンスを向上させるには、SDO_GEOM.RELATE
ファンクションを使用する必要がないかぎり、このファンクションのかわりにSDO_RELATE演算子またはその簡易演算子形式(「空間演算子」を参照)の1つを使用します。たとえば、SDO_RELATE演算子を使用する場合、DETERMINE maskキーワードは適用されません。演算子およびファンクションを使用する場合のパフォーマンスに関する注意点の詳細は、「空間演算子、空間プロシージャおよび空間ファンクション」を参照してください。
SDO_GEOM.RELATE
ファンクションの戻り値には、次の種類があります。
mask
に1つ以上の関係が登録されている場合、ジオメトリ・ペアについて1つ以上の関係が真であれば、指定されたmask
値を戻します。すべての関係が偽であれば、プロシージャはFALSEを戻します。
mask
のキーワードにDETERMINEを指定すると、ジオメトリ間の関係に最も一致する関係キーワードが1つ戻されます。
mask
のキーワードにANYINTERACTを指定すると、2つのジオメトリが非接続でなければ、TRUEが戻されます。
mask
では、次の関係について判断します。
ANYINTERACT: オブジェクトが非接続ではない場合にTRUEを戻します。
CONTAINS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつオブジェクト境界が接していない場合にCONTAINSを戻し、そうでない場合はFALSEを戻します。
COVEREDBY: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が1つ以上の点で接している場合にCOVEREDBYを戻し、そうでない場合はFALSEを戻します。
COVERS: 第2オブジェクトが完全に第1オブジェクトの内部にあり、かつ境界が1つ以上の位置で接している場合にCOVERSを戻し、そうでない場合はFALSEを戻します。
DISJOINT: 2つのオブジェクトが、境界または内部の点を共有していない場合にDISJOINTを戻し、そうでない場合はFALSEを戻します。
EQUAL: オブジェクトの境界と内部(オブジェクト内のすべての穴を含む)のすべての点を2つのオブジェクトが共有している場合にEQUALを戻し、そうでない場合はFALSEを戻します。
INSIDE: 第1オブジェクトが完全に第2オブジェクトの内部にあり、かつオブジェクト境界が接していない場合にINSIDEを戻し、そうでない場合はFALSEを戻します。
ON: 線(第1オブジェクト)の境界および内部が完全にポリゴン(第2オブジェクト)の境界上に存在する場合にONを戻し、そうでない場合はFALSEを戻します。
OVERLAPBDYDISJOINT: 2つのオブジェクトは重なっているが、その境界が相互作用しない場合にOVERLAPBDYDISJOINTを戻し、そうでない場合はFALSEを戻します。
OVERLAPBDYINTERSECT: 2つのオブジェクトが重なり、かつその境界が1つ以上の位置で交差する場合にOVERLAPBDYINTERSECTを戻し、そうでない場合はFALSEを戻します。
TOUCH: 2つのオブジェクトが1つの境界点を共有しているが、内部の点は共有していない場合にTOUCHを戻し、そうでない場合はFALSEを戻します。
mask
の値は、論理ブール演算子ORを使用して組み合せることができます。たとえば、ジオメトリ間の関係がINSIDEまたはTOUCHあるいはINSIDEとTOUCHの両方である場合、「INSIDE + TOUCH」はINSIDE+TOUCH
を戻し、ジオメトリ間の関係がINSIDEまたはTOUCHのいずれでもない場合はFALSE
を戻します。
geom1
およびgeom2
が異なる座標系に基づく場合、例外が発生します。
例
次の例では、SHAPE列内の各ジオメトリとcola_b
ジオメトリとの関係を調べます。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。出力は、読みやすくするために変更が加えられています。)
SELECT c.name, SDO_GEOM.RELATE(c.shape, 'determine', c_b.shape, 0.005) relationship FROM cola_markets c, cola_markets c_b WHERE c_b.name = 'cola_b'; NAME RELATIONSHIP --------------------------- cola_a TOUCH cola_b EQUAL cola_c OVERLAPBDYINTERSECT cola_d DISJOINT
関連項目
SDO_RELATE演算子