ここまでの節では、地理情報関数に関する以下の区分を紹介しました。
この節では、さらに次の 3 つの区分を紹介します。
いくつかの地理情報関数は、地形が相互に関連または比較する仕方についての情報を戻します。これらの関数のほとんどは、整数値を戻します。ここでは、一般的な述部関数について記した後、各関数を個別に説明します。
述部関数は、比較が関数の基準に適合すれば 1 (TRUE)、比較が失敗すれば 0 (FALSE) を戻します。地理関係をテストする述部は、2 つの図形を比較します。この 2 つの図形は、タイプや次元が異なっていても構いません。
述部は、送られた図形の X および Y 座標を比較します。 Z 座標および測定値 (ある場合) は無視されます。これにより、Z 座標または測定値がある図形と、それらがない図形を比較することができます。
Dimensionally Extended 9 Intersection Model (DE-9IM) 1 は、タイプおよび次元の異なる図形同士の地理関係 (のようなもの) を定義する、数学的な手法です。このモデルでは、結果の交差部分の次元を考慮に入れた上で、図形のすべてのタイプの間の地理関係を、内部、境界、および外部の交差部分として表現しています。
a と b という図形があるとします。 I(a)、B(a)、および E(a) は、それぞれ a の内部、境界、外部を表します。そして I(b)、B(b)、および E(b) は、 b の内部、境界、および外部を表します。 I(a)、B(a)、および E(a) と、 I(b)、B(b)、および E(b) との交差部分は、3 x 3 の行列になります。それぞれの交差部分は、異なる次元の図形になる場合があります。たとえば、2 つのポリゴンの境界の交差部分は、ポイントおよび折れ線で構成されています。この場合、dim 関数は最大次元として 1 を戻します。
dim 関数は -1、0、1 または 2 の値を戻します。
1 は ヌル集合または dim(null) (交差部分が見つからない場合に戻される) に対応しています。
|
内部
|
境界
|
外部
|
内部
|
dim(I(a) ∩ I(b))
|
dim(I(a) ∩ B(b))
|
dim(I(a) ∩ E(b))
|
境界
|
dim(B(a) ∩ I(b))
|
dim(B(a) ∩ B(b))
|
dim(B(a) ∩ E(b))
|
外部
|
dim(E(a) ∩ I(b))
|
dim(E(a) ∩ B(b))
|
dim(E(a) ∩ E(b))
|
地理関係の述部の結果は、述部の結果を DE-9IM の許容値を表すパターン行列と比較することによって、理解または検査することができます。
パターン行列には、交差部分の行列のセルごとの許容値が含まれています。可能なパターン値は、以下のとおりです。
たとえば、ST_Within 述部の場合、以下のパターン行列に値 T、F、* が含まれます。
図形の組み合わせの ST_Within のパターン行列 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
境界
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
両方の図形の内部が交差する場合、および a の内部および境界が b の外部と交差しない場合、 ST_Within 述部は TRUE を戻します。ほかのすべての条件では、関係ありません。
各述部には最低 1 つのパターン行列がありますが、一部の述部では、さまざまな図形タイプの組み合わせの関係を記述するために、複数のパターン行列が必要です。
ST_Equals は、同じタイプの 2 つの図形が同一の X、Y 座標値を持っている場合、 1 (TRUE) を戻します。
図 14. ST_Equals. X、Y 座標が一致している場合、図形は同一です。
equals の DE-9IM パターン行列では、内部が交差することと、どちらの図形の内部または境界も他方の外部と交差しないことが保証されています。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
境界
|
*
|
*
|
F
|
|
外部
|
F
|
F
|
*
|
詳細については、ST_Equals を参照してください。
ST_OrderingEquals は 2 つの図形を比較し、図形が等しく、座標が同じ順序であれば 1 (TRUE) を戻し、そうでなければ 0 (FALSE) を戻します。詳細については、ST_OrderingEquals を参照してください。
ST_Disjoint は、2 つの図形の交差部分が空のセットの場合、1 (TRUE) を戻します。
図 15. ST_Disjoint. いかなる形でも互いに交わっていない場合、図形は結合していません。
ST_Disjoint 述部のパターン行列は、単にどちらかの図形の内部も境界も交差しないことを示しています。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
F
|
F
|
*
|
|
境界
|
F
|
F
|
*
|
|
外部
|
*
|
*
|
*
|
詳細については、ST_Disjoint を参照してください。
ST_Intersects は、交差部分が空のセットにならない場合に 1 (TRUE) を戻します。 ST_Intersects は、ST_Disjoint とまったく逆の結果を戻します。
以下のパターン行列のいずれかの条件が TRUE を戻す場合、
ST_Intersects 述部は TRUE を戻します。
両方の図形の内部が交わっている場合、ST_Intersects 述部は TRUE を戻します。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
*
|
|
境界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
最初の図形の境界と 2 番目の図形の境界が交わっている場合、 ST_Intersects 述部は TRUE を戻します。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
*
|
T
|
*
|
|
境界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
最初の図形の境界と 2 番目の図形の内部が交わっている場合、 ST_Intersects 述部は TRUE を戻します。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
*
|
*
|
*
|
|
境界
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
どちらかの図形の境界が交わっている場合、ST_Intersects 述部は TRUE を戻します。 | ||||
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
*
|
*
|
*
|
|
境界
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
詳細については、ST_Intersects を参照してください。
この関数は、2 つの図形のエンベロープが交差する場合に 1 (TRUE) を戻します。これは、ST_Intersects (ST_Envelope(g1),ST_Envelope(g2)) を効率的に実装する便利な関数です。詳細については、EnvelopesIntersect を参照してください。
ST_Touches は、2 つの図形に共通するポイントのうち、両方の図形の内部で交差するものが存在しない場合に、1 (TRUE) を戻します。少なくとも 1 つの図形が、折れ線、ポリゴン、複数折れ線、または複数ポリゴンのいずれかでなければなりません。
以下のパターン行列は、図形の内部が交わらず、どちらかの図形の境界が他方の内部または境界と交わる場合に、
ST_Touches 述部が TRUE を戻すことを示しています。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
F
|
T
|
*
|
|
境界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
F
|
*
|
*
|
|
境界
|
T
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
F
|
*
|
*
|
|
境界
|
*
|
T
|
*
|
|
外部
|
*
|
*
|
*
|
詳細については、ST_Touches を参照してください。
ST_Overlaps は、同じ次元の 2 つの図形を比較します。この関数は、交差部分のセットがどちらとも違う図形であるものの、同じ次元である場合に、1 (TRUE) を戻します。
表 51 のパターン行列は、重なっているポリゴン / ポリゴン、複数ポイント / 複数ポイント、および複数ポリゴン / 複数ポリゴンの組み合わせに適用されます。これらの組み合わせで、両方の図形の内部が他方の内部および外部と交差する場合に、オーバーレイ述部は TRUE を戻します。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
T
|
|
境界
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
表 52 のパターン行列は、折れ線 / 折れ線および複数折れ線 / 複数折れ線の組み合わせに適用されます。この場合、図形の交差部分は次元が 1 である図形 (別の折れ線) でなければなりません。内部の交差部分の次元が 1 であれば、ST_Overlaps 述部は FALSE を戻しますが、
ST_Crosses 述部は TRUE を戻します。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
1
|
*
|
T
|
|
境界
|
*
|
*
|
*
|
|
外部
|
T
|
*
|
*
|
詳細については、ST_Overlaps を参照してください。
ST_Crosses は、次の場合に 2 つの図形を引き数とし、1 (TRUE) を戻します。
ST_Crosses が 1 (TRUE) を戻すのは、複数ポイント / ポリゴン、複数ポイント / 折れ線、折れ線 / 折れ線、折れ線 / ポリゴン、および折れ線 / 複数ポリゴンの組み合わせを比較する場合だけです。
表 53 のパターン行列は、複数ポイント / 折れ線、複数ポイント / 複数折れ線、複数ポイント / ポリゴン、複数ポイント / 複数ポリゴン、折れ線 / ポリゴン、および折れ線 / 複数ポリゴンの組み合わせに適用されます。この行列は、内部が交差しなければならないことと、
1 番目の図形 (図形 a) の内部が、
2 番目の図形 (図形 b) の外部と交差しなければならないことを示しています。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
T
|
|
境界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
表 54 のパターン行列は、折れ線 / 折れ線、折れ線 / 複数折れ線、および複数折れ線 / 複数折れ線の組み合わせに適用されます。この行列は、内部の交差部分の次元が 0 (ポイントで交差する) でなければならないことを示しています。この交差部分の次元が 1 (折れ線で交差する) であれば、
ST_Crosses 述部は FALSE を戻しますが、ST_Overlaps 述部は TRUE を戻します。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
0
|
*
|
*
|
|
境界
|
*
|
*
|
*
|
|
外部
|
*
|
*
|
*
|
詳細については、ST_Crosses を参照してください。
ST_Within は、最初の図形が完全に 2 番目の図形の中にある場合に、1 (TRUE) を戻します。 ST_Within は、ST_Contains とまったく逆の結果を戻します。
この ST_Within 述部のパターン行列は、両方の図形の内部が交差しなければならないことと、
1 番目の図形 (図形 a) の内部と境界が、
2 番目の図形 (図形 b) の外部と交差してはならないことを示しています。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
F
|
|
境界
|
*
|
*
|
F
|
|
外部
|
*
|
*
|
*
|
詳細については、ST_Within を参照してください。
ST_Contains は、2 番目の図形が完全に最初の図形の中にある場合に、1 (TRUE) を戻します。 ST_Contains 述部は、ST_Within 述部とまったく逆の結果を戻します。
ST_Contains 述部のパターン行列は、両方の図形の内部が交差しなければならないことと、
2 番目の図形 (図形 b) の内部と境界が、
1 番目の図形 (図形 a) の外部と交差してはならないことを示しています。
|
|
b
|
|
|
|
|
内部
|
境界
|
外部
|
a
|
内部
|
T
|
*
|
*
|
|
境界
|
*
|
*
|
*
|
|
外部
|
F
|
F
|
*
|
詳細については、ST_Contains を参照してください。
ST_Relate 関数は 2 つの図形を比較し、図形が DE-91M パターン行列ストリングで指定された条件に適合する場合は 1 (TRUE) を戻し、そうでなければ 0 (FALSE) を戻します。詳細については、ST_Relate を参照してください。
ST_Distance 関数は、2 つの分離している地形の隔たりの最短距離を報告します。地形が分離していない場合、この関数は最短距離として 0 を報告します。
たとえば、ST_Distance は、飛行機が 2 つの地点間を飛ぶのに必要な最短距離を報告します。この情報を示しているのが図 20 です。
図 20. 2 都市間の最短距離. ST_Distance は、ロサンゼルスとシカゴの場所を示す座標を入力データとして受け取り、 2 地点間の最短距離を示す値を戻します。
詳細については、ST_Distance を参照してください。
地理情報エクステンダーは、既存の図形から新しい図形を生成する述部関数と変換関数を提供します。
ST_Intersection 関数は、2 つの図形の交差部分のセットを戻します。常に交差部分セットは、次元がソース図形の最小の次元と同じである集合として戻されます。たとえば、ポリゴンと交差する折れ線の場合、ST_Intersection 関数は、折れ線のうちポリゴンの内部および境界と共通な部分で構成される複数折れ線を戻します。ソース折れ線が複数の連続していない区画でポリゴンと交差している場合、この複数折れ線には複数の折れ線が含まれます。図形が交差していない、または交差部分の次元が両方のソース図形の次元よりも低い場合、空の図形が戻されます。
図 21. ST_Intersection. ST_Intersection 関数の例。
詳細については、ST_Intersection を参照してください。
ST_Difference は 2 つの図形を入力として引き数にします。最初の図形を 1 次図形、 2 番目を 2 次図形 といいます。ST_Difference 関数は、最初の図形のうち、2 番目の図形と交差しない部分を戻します。これはスペースの論理 AND NOT です。 ST_Difference 関数は同じ次元の図形だけを操作し、ソース図形と同じ次元を持つ集合を戻します。ソース図形が同じである場合、空の図形が戻されます。 ST_Difference に入力として指定される図形の次元が一致しない場合、 ST_Difference はヌルを戻します。
詳細については、ST_Difference を参照してください。
ST_Union 関数は、2 つの図形の和集合のセットを戻します。これは、スペースの論理 OR です。ソース図形の次元は同じでなければなりません。 ST_Union は結果を必ず集合として戻します。
詳細については、ST_Union を参照してください。
ST_SymmetricDiff 関数は、次元が同じである 2 つの交差する図形の対称差 (スペースのブール論理) を戻します。これらの図形が等しい場合、ST_SymmetricDiff は空の図形を戻します。等しくない場合、これらの図形の一方または両方の部分が、交差する領域の外側に置かれます。ST_SymmetricDiff は、交差しない部分をコレクションとして、たとえば複数ポリゴンとして戻します。
ST_SymmetricDiff が、入力として指定される異なる次元の図形である場合、ヌルが戻されます。
ST_Buffer 関数は、指定の距離を置いて囲んだ図形を生成します。最初の図形に緩衝地帯 (buffer) が付けられている場合や、緩衝地帯のポリゴンがすべて重なるほど集合の要素が近くにある場合には、ポリゴンが戻されます。ただし、緩衝地帯が付いている集合で、緩衝地帯のポリゴンの要素の間に十分の距離がある場合、 ST_Buffer 関数は複数ポリゴンを戻します。
ST_Buffer 関数は、正と負の両方の距離を受け入れますが、負の緩衝地帯が適用されるのは、2 次元の図形 (ポリゴンおよび複数ポリゴン) だけです。ソース図形の次元が 2 よりも低い場合 (ポリゴンまたは複数ポリゴン以外のすべての図形) はいつでも、緩衝地帯の距離の絶対値が使用されます。
一般に、外部リングの場合、緩衝地帯の距離が正の場合はソース図形の中心から離れる方向にポリゴンのリングが生成され、距離が負の緩衝地帯の場合はポリゴンまたは複数ポリゴンが中心の方向に生成されます。ポリゴンまたは複数ポリゴンの内部リングの場合、緩衝地帯の距離が正なら緩衝地帯のリングが中心に向かって生成され、緩衝地帯の距離が負なら緩衝地帯のリングが中央とは逆の方向に生成されます。
緩衝地帯を付ける処理では、重なり合うポリゴンが結合されます。負の距離が、ポリゴンの内部の最長部分の半分より大きい場合、空の図形が生成されます。
詳細については、ST_Buffer を参照してください。
測定値を持つ図形の場合、特定の測定値の場所を LocateAlong 関数を使用して見つけることができます。 LocateAlong は、複数ポイントとして位置を戻します。ソース図形の次元が 0 (すなわち、ポイントまたは複数ポイント) の場合、それらは完全に一致していなければならず、測定値が一致しているそれらのポイントが複数ポイントとして戻されますただし、ソース図形の次元が 0 より大きい場合は、位置が補間されます。たとえば、入力した測定値が 5.5 で、折れ線の頂点の測定値がそれぞれ 3、4、5、6、および 7 である場合、測定値が 5 および 6 の頂点のちょうど中間に位置する補間されたポイントが戻されます。
詳細については、LocateAlong を参照してください。
LocateBetween 関数は、測定値を持つソース図形の 2 つの測定値の間にある一連のパスまたは位置を戻します。ソース図形の次元が 0 の場合、 LocateBetween は、2 つのソース測定値の間に測定値があるすべてのポイントを含む複数ポイントを戻します。次元が 0 よりも大きいソース図形について、 LocateBetween は、パスを補間できれば複数折れ線を戻します。それができなければ、LocateBetween はポイントの位置を含む複数ポイントを戻します。 LocateBetween がパスを補間できない場合や、測定値間の位置を見つけられない場合は、常に空のポイントが戻されます。 LocateBetween は図形の包括的な検索を行います。そのため、図形の測定値は必ず起点の測定値以上 で、なおかつ終点の測定値以下 でなければなりません。
詳細については、LocateBetween を参照してください。
ST_ConvexHull 関数は、最低でも 3 つの頂点が凸を形成している任意の図形の凸包 (convex hull) ポリゴンを戻します。図形の頂点が凸を形成していない場合、ST_ConvexHull はヌルを戻します。 ST_ConvexHull は、ポイントの集合から TIN ネットワークを作成する際に行うモザイク化の最初のステップでしばしば使用されます。
詳細については、ST_ConvexHull を参照してください。
折れ線からポリゴンを生成します。詳細については、ST_Polygon を参照してください。
地理情報エクステンダーは 3 つの GIS データ交換形式をサポートしています。
地理情報エクステンダーには、テキスト記述から図形を生成する関数がいくつかあります。
テキスト表現は ASCII ストリングです。このため、図形を ASCII テキスト形式で交換することができます。これらの関数では、バイナリー表現をマップするための特殊なプログラム構造を定義する必要はありません。そのため、3GL または 4GL プログラムのどちらでも使用することができます。
ST_AsText 関数は、既存の図形値をテキスト表現に変換します。詳細については、ST_AsText を参照してください。
事前割り当てテキスト表現の詳細については、OGC による事前割り当てテキスト表現を参照してください。
地理情報エクステンダーには、事前割り当てバイナリー (WKB) 表現から図形を生成する関数がいくつかあります。
事前割り当てバイナリー表現は、連続する一連のバイトです。これにより、ODBC クライアントと SQL データベースの間で図形をバイナリー形式で交換することができます。これらの関数では、バイナリー表現をマップする C 構造を定義する必要があります。そのため、3GL プログラムで使用するよう意図されており、4GL 環境での使用には適していません。
ST_AsBinary 関数は、既存の図形値を事前割り当てバイナリー表現に変換します。詳細については、ST_AsBinary を参照してください。
事前割り当てバイナリー表現の詳細については、OGC による事前割り当てバイナリー (WKB) 表現を参照してください。
地理情報エクステンダーには、ESRI 形状表現から図形を生成する関数がいくつかあります。 ESRI 形状表現は、テキストおよび事前割り当てバイナリー表現でサポートされる 2 次元表現に加えて、 Z 座標と測定値をサポートします。
これらの関数の一般的な構文は同じです。最初の引き数は、BLOB データ・タイプとして入力される形状表現です。 2 番目の引き数は、図形に割り当てられる地理情報参照 ID です。たとえば、GeometryFromShape 関数は以下のような構文になります。
GeometryFromShape(shapegeometry, SRID)
バイナリー表現をマップできるよう、これらの形状関数では C 構造を定義する必要があります。そのため、3GL プログラムで使用するよう意図されており、4GL 環境での使用には適していません。
AsBinary 関数は、図形値を ESRI 形状表現に変換します。詳細については、AsShape を参照してください。
形状表現の詳細については、ESRI 形状表現を参照してください。