DE-9IM 空間關系模型
簡述
DE-9IM 是Dimensionally Extended 9-Intersection Model 的縮寫,直接翻譯為 維度擴展的 9 相交模型好像比較別扭,但一時也找不到比較好的翻譯。
DE-9IM 模型是用於描述兩個 二維幾何對象(點、線、面) 之間的空間關系的一種模型,它使用一個 3 x 3 的矩陣來描述幾何關系類別(相交部分的維度)。
網上很多關於 DE-9IM 的介紹都是翻譯自 https://en.wikipedia.org/wiki/DE-9IM 或者 GeoTools/userguide/dim9 等文檔的,我這里就不做這些翻譯了。
因為要給別人講述清楚這個東西,所以自己總結了下,在這里做個記錄。
空間關系
這里主要是說二維平面下的兩個幾何對象之間的空間關系。
主要有兩種關系:
- 相交(Intersects)
- 相離(Disjoint)
相離 關系很簡單,就是兩個幾何對象相互獨立,之間沒有任何相接觸到的地方。形象的說,比如一張紙上畫了兩個多邊形(或者點或線),你可以再畫一條線把它們分開,而且這條畫的線可以不碰到這兩個多邊形。

相交(Intersects)關系圖解
相交(Intersects)關系就比較復雜一點了,它又可以分為好幾類。
下面對相交(Intersects)的各種情況進行分類介紹,包括點、線、面相互之間形成相應關系的9種情況的圖像說明(圖是網上找的,來自一個國外的網站)。
下面的關系又稱為空間謂詞,下面的圖式中都說明的是 紅色 幾何對象 相對於 藍色 幾何對象的空間關系(方向不能反)。
包含(Contains )
包含表示一個幾何對象完全在另一個幾何對象內部。
下面圖是紅色幾何對象包含(Contains)了藍色幾何對象的在其里頭的示意圖。
點不可能包含線和面,線也不可能包含面在里頭,所以有三個位置是 X。

橫跨(Crosses)
橫跨關系一般又叫做交叉或者跨立,這里我還是覺得橫跨比較合適。
橫跨關系一定是建立在線與線或者線與面之間(可以理解為線才能夠橫在別的形狀上嘛)。
下面圖是紅色幾何對象橫跨(Crosses)在藍色幾何對象的上面的示意圖。

等於(Equals)
等於(Equals)表示兩幾何對象完全一致(包括形狀和位置),是一種完全重合的情況。
下面圖是紅色幾何對象等於(Equals) 藍色幾何對象的示意圖。

重疊(Overlaps)
重疊(Overlaps)表示兩個幾何對象對象之間有一部分是重合的情況(完全重合就是 Equals 了)。
重疊只發生在 線-線、面-面 之間,線與面只能是Crosses、Within或者Touches,點沒有長度和面積(就是不存在部分,不可以分割),不可能Overlaps。
下面圖是紅色幾何對象重疊(Overlaps)在藍色幾何對象上的示意圖。

觸碰(Touches)
觸碰(Touches)這個一般又叫做接觸或者觸及,表示兩個幾何對象的邊界部分有重合部分的情況,也就是說兩個幾何對象有公共點或者公共邊線的情況。
點和點之間是沒有Touches關系,點和線與面的觸碰關系一定是點在線的端點或者面的邊上。
線和面兩種形狀之間的Touches關系可能是有公共點,也可能是有公共邊。

被包含(Within)
被包含(Within)一般也描述為在什么內部(所以也有用 inside 的),表示一個幾何對象完全處於另一個幾何對象內部。這個其實就是包含(Contains)的反向關系。
就是說 A Within B 就等於是 B Contains A。
下面圖是紅色幾何對象被包含(Within)在藍色幾何對象里頭的示意圖。

DE-9IM 模型
DE-9IM 模型把幾何對象分為 內部、邊界、外部 三個部分,兩個幾何對象這三個部分兩兩之間的關系,就可以組合為一個3X3大小(就是 9 個值)的矩陣,這9個值的組合,就表示兩個幾何對象的空間關系。

如上圖所示,淡紫色的多邊形為條件幾何對象(A),淡紅色的多邊形為 測試幾何對象(B),圖中的 黑色 部分表示兩個幾何對象對應的部分(內部、邊界、外部)之間的相交(或者說重合)部分( A.[I/B/E] intersection B.[I/B/E])。
DE-9IM 用數值來表示相交(重合)部分的情況(維度),是點還是線還是面,或者是沒有。
-1沒有重合部分0重合部分為點(零維)1重合部分為線(一維)2重合部分為面(二維)
如上面圖中,它的 DE-9IM 計算值(在 GeoTools/GEOS 中使用 relate 計算)就是 2 1 2 1 0 1 2 1 2。
使用下面的方式來表示矩陣中①~⑨的值是以下的任意一種空間關系:
T= 相交部分維度為0、1、2。F= 相交部分維度< 0。*= 相交部分維度為任意值。0= 相交部分維度為0。1= 相交部分維度為1。2= 相交部分維度為2。
而兩個幾何對象具有什么空間關系(就是上面所說的Intersects、Disjoint、Contains...等),就可以通過兩個幾何對象的 DE-9IM 值來確定。
根據上面對各個空間謂詞的定義,可以得到每個空間謂詞對於的 DE-9IM 關系表示。一般我們寫程序的時候不直接使用 relate 計算的結果去判斷兩個幾何對象的空間關系,而是直接使用相應的空間謂詞去判斷。
| 空間謂詞 | DE-9IM值 | 說明 | 等價於 |
|---|---|---|---|
| Equals | T*F**FFF* |
如果兩個幾何對象的內部相交,並且一個幾何對象的內部或邊界沒有任何部分與另一個幾何對象的外部相交,那么這兩個幾何對象在拓撲上是相等的 | Within & Contains |
| Disjoint | FF*FF**** |
兩個幾何對象它們沒有公共點。 它們形成了一組不連續的幾何形狀。 | not Intersects |
| Touches | FT******* 或 F**T***** 或 F***T**** |
兩個幾何對象它們至少有一個公共點,但它們的內部不相交。 | |
| Contains | T*****FF* |
被測試幾何對象B位於條件幾何對象A內部(A Contains B)。 | Within(B,A) |
| Within(Inside) | T*F**F*** |
上面的 Contains 操作對象調換下方向就是。 | Contains(B,A) |
| Crosses | 線 Corsses 面 = T*T******面 Corsses 線 = T*****T**線 Corsses 線 = 0******** |
A Contains B:它們有一些但不是全部的內部點是相同的,並且相交部分的維度數小於A或B中至少一個的維度數。 | |
| Overlaps | 面 Overlaps 面 = T*T***T**線 Overlaps 線 = 1*T***T** |
A Overlaps B:它們有一些但不是所有的點是相同的,它們有相同的維數,兩個幾何內部的交點和這些幾何本身的維數是相同的。 | |
| Intersects | T******** 或*T*******或***T***** 或****T**** |
兩個幾何對象它們至少有一個公共點。 | not Disjoint |
| Covers (涵蓋了) |
T*****FF* 或 *T****FF* 或 ***T**FF* 或 ****T*FF* |
A Covers B:A的至少一個點位於B,A的任何點都不位於B的外部 | CoveredBy(B,A) |
| CoveredBy (被涵蓋) |
T*F**F*** 或*TF**F*** 或 **FT*F*** 或**F*TF*** |
A CoveredBy B:A上至少有一個點在 B 上,而 A 上沒有一個點在b的外部 | Covers(B,A) |
