1.8 空間関係およびフィルタ処理

Spatialは、2次フィルタを使用して、データベース内のエンティティ間の空間関係を判断します。空間関係は、ジオメトリの位置に基づいています。

空間関係の最も多くは、位相および距離に基づいています。たとえば、領域の境界は、その他の座標領域から領域を分割する曲線の集合で構成されています。領域の内部は、その境界上の点を除いて、領域のすべての点で構成されています。このため、領域内部の点ではなく境界の一部を共有している場合、2つの領域は接しているといえます。

2つの空間オブジェクトの距離は、それらのオブジェクトの点と点の最短距離です。2つのオブジェクトは、オブジェクト間の距離が指定された距離より短い場合、互いに指定された距離内にあるといえます。

空間関係を判断するために、Spatialにはいくつかの2次フィルタ・メソッドがあります。

  • SDO_RELATE演算子は、位相的な基準で判断します。

  • SDO_WITHIN_DISTANCE演算子は、2つの空間オブジェクトが互いに指定された距離内にあるかどうかを判断します。

  • SDO_NN演算子は、最も近くにある空間オブジェクトを識別します。

SDO_RELATE演算子は、点、線およびポリゴンのバイナリ位相関係を分類する、9交差モデルを実装します。各空間オブジェクトには、内部、境界および外部があります。境界は、内部と外部を分ける点または線で構成されます。単一線ストリングの境界は、その終了点で構成されています。ただし、終了点が重なる(同じ点である)場合、その線ストリングには境界が存在しません。複数線ストリングの境界は、それを構成する各線ストリングの終了点です。ただし、終了点が重なる場合、奇数回重なる終了点のみが境界になります。ポリゴンの境界は、ポリゴンの周囲を描く線です。内部はオブジェクト内にあり、境界上にはない点で構成され、外部はオブジェクト内にはない点で構成されます。

オブジェクトAには3つの構成要素(境界Ab、内部Aiおよび外部Ae)があり、どのようなオブジェクトの組合せにも、それらの構成要素間には、9つの相互作用の可能性があります。構成要素の組合せには、空(0)または空ではない(1)セットの交差があります。2つのジオメトリ間で相互作用するセットは、交差する構成要素の組合せを指定する9交差マトリックスによって表現されます。図1-5に、互いに接している2つのポリゴンの9交差マトリックスを示します。このマトリックスによって、行優先形式(行を主にした順序で、ビット列を表記する形式)「101001111」に生成された、次のビット・マスクが得られます。

Max Egenhofer博士(Maine州立大学)およびその仲間による研究で発見された一部の位相関係には、彼らに関係のある名前が付けられています。Spatialでは、次の名前を使用します。

  • DISJOINT: 境界および内部が交差しない。

  • TOUCH: 境界は交差するが、内部は交差しない。

  • OVERLAPBDYDISJOINT: 1つのオブジェクトの内部が他のオブジェクトの境界および内部と交差するが、その2つの境界は交差しない。この関係は、たとえば、1本の線がポリゴンの外側から始まり、ポリゴンの内側で終わる場合に発生します。

  • OVERLAPBDYINTERSECT: 2つのオブジェクトの境界および内部が交差する。

  • EQUAL: 2つのオブジェクトの境界および内部が同じである。

  • CONTAINS: 1つのオブジェクトの内部および境界が完全にもう1つのオブジェクトの内部に含まれている。

  • COVERS: 1つのオブジェクトの境界と内部が、完全にもう1つのオブジェクトの内部または境界に含まれ、その内部が交差し、1つのオブジェクトの境界または内部ともう1つのオブジェクトの境界が交差する。

  • INSIDE: CONTAINSの逆。A INSIDE Bは、B CONTAINS Aを意味します。

  • COVEREDBY: COVERSの逆。A COVEREDBY Bは、B COVERS Aを意味します。

  • ON: 1つのオブジェクトの内部および境界が、もう1つのオブジェクトの境界上にある。この関係は、たとえば、1本の線がポリゴンの境界上にある場合に発生します。

  • ANYINTERACT: オブジェクトがなんらかの形で接合する。

図1-6に、これらの位相関係を示します。

SDO_WITHIN_DISTANCE演算子では、2つの空間オブジェクトAおよびBが、互いに指定された距離内にあるかどうかが判断されます。この演算子は、まず、参照オブジェクトの周りに距離バッファDbを構成します。その後、AとDbが結合していないことを確認します。オブジェクトの距離バッファは、そのオブジェクトから指定距離内にあるすべての点で構成されます。図1-7に、点、線およびポリゴンの距離バッファを示します。

図1-7 点、線およびポリゴンの距離バッファ

図1-7の説明が続きます。
図1-7「点、線およびポリゴンの距離バッファ」の説明

次に、図1-7に示す点、線およびポリゴンのジオメトリについて説明します。

  • 破線は、距離バッファを表します。オブジェクトの角の近くで、どのようにバッファが丸められるかに注意してください。

  • 右のジオメトリは、穴のあるポリゴンです。大きい矩形はポリゴンの外部の輪で、小さい矩形はポリゴンの内部の輪(穴)です。大きい矩形の外側の破線は外部の輪に対するバッファで、小さい矩形の内側の破線は内部の輪に対するバッファです。

SDO_NN演算子は、指定したジオメトリに最も近いジオメトリ列から、指定した数のオブジェクト(たとえば、公園に最も近いレストラン5件)を戻します。2つのオブジェクトの近さを判断するには、各オブジェクトの領域上にある2点間の最短距離が使用されます。