DE-9IM (Dimensionally Extended 9 Intersection Model)
GIS Matldaでは
DE-9IMとして知られている2つ図形の空間関係に対してクエリを実行するための機能が備わっています。超強力でありながら管理が容易なメカニズムを内蔵しています。
|
内側 |
境界 |
外側 |
ポイント |
ポイント自身 |
なし |
内側以外の全て |
マルチポイント |
ポイント全て |
なし |
内側以外の全て |
ライン |
始終点以外のライン自身 |
ラインの始終点 |
ラインの内側と外側以外の全て |
ポリゴン |
ポリゴン全て |
ポリゴンの輪郭線 |
ポリゴンの内側と外側以外の全て |
形状交差(インターセクション)は、内側、境界、外側の関係可能性により定義されており、3×3の表で構成することができます。
A/B |
内側 |
境界 |
外側 |
内側 |
* |
* |
* |
境界 |
* |
* |
* |
外側 |
* |
* |
* |
テーブル表記は1行の文字列として代表表記することができます。(例)T*F**FFF*(←3x3)
テーブルの各要素は交差(インターセクション)の可能性を表しています。
種類 |
内容 |
T |
交差が存在 |
F |
交差が存在しない |
* |
関係なし |
0 |
交差はポイント |
1 |
交差はライン |
2 |
交差はポリゴン |
Contains(含む)
内容の説明
A contains B (AはBを含む)
内部が交差しているが、Aの外部がBの内部または境界と交差していない場合
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
* |
境界 |
* |
* |
* |
外側 |
F |
F |
* |
文字列で表すと:T*****FF*
内部での呼び方:RELATE_CONTAINS
Completely Contains(完全に含む)
AがBを完全に含むというパターンもあります。この場合は、Aの境界はBの内部と境界とは交差していない状態を言います。
文字列で表すと:T**FF*FF*
内部での呼び方:RELATE_CONTAINS_COMPLETELY
Cross(交差)
内容の説明
Cross
異なる型の図形の関係性に使います。なのでポリゴンはラインと交差する事ができますが他のポリゴンとでは交差ではない(オーバーラップは
こちら)
Bの内側が交差して、更にBの外側がAの内側と交差する場合(ラインとラインの時を省く)
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
T |
境界 |
* |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:T*T******
内部での呼び方:RELATE_CROSS
別のパターン
交差がポイントの時(インターセクションの種類が0)ラインとラインの関係性のときのみ
A/B |
内側 |
境界 |
外側 |
内側 |
0 |
* |
* |
境界 |
* |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:0********
内部での呼び方:RELATE_CROSS_LINE
Disjoint(交わらない)
内容の説明
いかなる交差もない。
A/B |
内側 |
境界 |
外側 |
内側 |
F |
F |
* |
境界 |
F |
F |
* |
外側 |
* |
* |
* |
文字列で表すと:FF*FF****
内部での呼び方:RELATE_DISJOINT
Equality(完全な一致)
内容の説明
AとBは内部が完全に交差していて、その図形の内部か境界がもう1つの図形の外部または境界と交差していない。
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
F |
境界 |
* |
* |
F |
外側 |
F |
F |
* |
文字列で表すと:T*F**FFF*
内部での呼び方:RELATE_EQUALITY
Intersect(交差)
内容の説明
交差するもの。
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
* |
境界 |
* |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:*T*******
内部での呼び方:RELATE_INTERSECT
別のパターン1
Aの内側でBの境界と交差
A/B |
内側 |
境界 |
外側 |
内側 |
* |
T |
* |
境界 |
* |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:*T*******
内部での呼び方:RELATE_INTERSECT1
別のパターン2
Aの境界はBの境界と交差
A/B |
内側 |
境界 |
外側 |
内側 |
* |
* |
* |
境界 |
T |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:****T****
内部での呼び方:RELATE_INTERSECT2
別のパターン3
Aの境界はBの境界と交差
A/B |
内側 |
境界 |
外側 |
内側 |
* |
* |
* |
境界 |
* |
T |
* |
外側 |
* |
* |
* |
文字列で表すと:***T*****
内部での呼び方:RELATE_INTERSECT3
Overlap(オーバーラップ)
内容の説明
同じ図形の型の関係性。なのでポリゴンは他のポリゴンとオーバーラップする事ができるが、ラインとのオーバーラップではありません。
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
T |
境界 |
* |
* |
* |
外側 |
T |
* |
* |
文字列で表すと:T*T***T**
内部での呼び方:RELATE_OVERLAP
別のパターン
ABのオーバーラップ。外部が交差しているとき(ラインとラインの場合のみ)
A/B |
内側 |
境界 |
外側 |
内側 |
1 |
* |
T |
境界 |
* |
* |
* |
外側 |
T |
* |
* |
文字列で表すと:1*T***T**
内部での呼び方:RELATE_OVERLAP_LINE
Touch(タッチ)
内容の説明
Aの境界線はBの内側で交差している。
A/B |
内側 |
境界 |
外側 |
内側 |
F |
* |
* |
境界 |
T |
* |
* |
外側 |
* |
* |
* |
文字列で表すと:F**T*****
内部での呼び方:RELATE_TOUCH_INTERIOR
別のパターン
Aの境界はBの境界と交差している(Bの内部ではない)
A/B |
内側 |
境界 |
外側 |
内側 |
F |
* |
* |
境界 |
* |
T |
* |
外側 |
* |
* |
* |
文字列で表すと:F***T****
内部での呼び方:RELATE_TOUCH
Within(間または中)
内容の説明
内部が交差していて、Bの外部がAの内部または境界と交差していない場合。
A/B |
内側 |
境界 |
外側 |
内側 |
T |
* |
F |
境界 |
* |
* |
F |
外側 |
* |
* |
* |
文字列で表すと:T*F**F***
内部での呼び方:RELATE_WITHIN