參考部落格:
空間拓撲關係描述:9交叉模型(DE-9IM) | 會飛的大象
DE-9IM 空間關係模型 - 烏合之眾 - 部落格園
DE-9IM 空間關係模型 與Boost Geometry Lib - SuperVan - 部落格園
簡述
DE-9IM 是Dimensionally Extended 9-Intersection Model的縮寫,它是Egenhofer在《point set topological spatial relations》中提出的,用於描述兩個二維幾何物件(點、線、面)之間的空間關係的一種模型,它使用一個 3 x 3 的矩陣來描述幾何關係類別(相交部分的維度)。
維度(Dimension)的定義
dim是dimension的縮寫,指的是維度。在計算幾何中,維度是幾何要素的重要資訊之一,透過維度,可以進行一些判斷。比如,高維度的要素(比如線),是不可能within在低維度的要素中的(比如點)。再比如,兩個要素的交集的維度不會超過兩者維度中最小者。在geos中(以及其他類似系統):
- 多邊形的維度是2,含組合多邊形,帶洞多邊形等。
- 折線的維度為1,含多線。
- 點的維度為0,含多點。
- 空集(無交集)維度為F。
講到這裡,我們有必要了解不同型別的幾何物件的內部,邊界,外部各指的是什麼。
內部,邊界,外部的定義
對於多邊形,內部是多邊形的外環和內環圍起來的面部分,邊界由內環和外環構成,外部是除內部和邊界以外的空間其他所有部分。
對於線要素,邊界是線首尾節點(中間節點不算),內部是線上除了首尾節點之外的部分。外部是空間除了內部與邊界的部分。
點要素的內部是點本身,其邊界是空集,外部是除了點本身外的空間其他部分。當然,對於點與其他要素的拓撲關係,我們通常習慣用“點在物件上”、“點不在物件上”進行描述,而且,在空間關係的計算上,也會按照這樣的思路設計演算法。我的意思是,對於點的拓撲關係處理一般先判斷“點是否在物件上”然後填充9交叉模型矩陣的,而不是像多邊形之間的關係判斷。
空間關係
相離(Disjoint)
相離關係就是兩個幾何物件相互獨立,二者之間沒有任何相接觸到的地方。形象的說,比如一張紙上畫了兩個多邊形(或者點或線),你可以再畫一條線把它們分開,而且這條畫的線可以不碰到這兩個多邊形。
相交(Intersects)
相交是指兩物件的內部或邊界存在交集,相交關係廣泛的存在於點、線、面三種物件之間,同時它也包含了其他種類的拓撲關係。
包含(Contains)
包含表示一個幾何物件完全在另一個幾何物件內部。
下面圖是紅色幾何物件包含(Contains)了藍色幾何物件的在其裡頭的示意圖。
點不可能包含線和麵,線也不可能包含面在裡頭,所以有三個位置是X。
被包含(Within)
被包含(Within)一般也描述為在什麼內部(所以也有用inside的),表示一個幾何物件完全處於另一個幾何物件內部。這個其實就是包含(Contains)的反向關係。
就是說 A Within B 就等於是 B Contains A。
下面圖是紅色幾何物件被包含(Within)在藍色幾何物件裡頭的示意圖。
等於(Equals)
等於(Equals)表示兩幾何物件完全一致(包括形狀和位置),是一種完全重合的情況。
下面圖是紅色幾何物件等於(Equals)藍色幾何物件的示意圖。
橫跨(Crosses)
橫跨關係一般又叫做交叉或者跨立,這裡我還是覺得橫跨比較合適。
橫跨關係一定是建立線上與線或者線與面之間(可以理解為線才能夠橫在別的形狀上嘛)。
下面圖是紅色幾何物件橫跨(Crosses)在藍色幾何物件的上面的示意圖。
重疊(Overlaps)
重疊(Overlaps)表示兩個幾何物件物件之間有一部分是重合的情況(完全重合就是Equals了)。
重疊只發生線上-線、面-面之間,線與面只能是Crosses、Within或者Touches,點沒有長度和麵積(就是不存在部分,不可以分割),不可能Overlaps。
下面圖是紅色幾何物件重疊(Overlaps)在藍色幾何物件上的示意圖。
觸碰(Touches)
觸碰(Touches)這個一般又叫做接觸或者觸及,表示兩個幾何物件的邊界部分有重合部分的情況,也就是說兩個幾何物件有公共點或者公共邊線的情況。
點和點之間是沒有Touches關係,點和線與面的觸碰關係一定是點線上的端點或者面的邊上。
線和麵兩種形狀之間的Touches關係可能是有公共點,也可能是有公共邊。
DE-9IM 模型
DE-9IM模型圖示
DE-9IM模型把幾何物件分為內部、邊界、外部三個部分,兩個幾何物件這三個部分兩兩之間的關係,就可以組合為一個3X3大小(就是9個值)的矩陣,這9個值的組合,就表示兩個幾何物件的空間關係。
DE-9IM | 內部 (Interior) | 邊界 (Boundary) | 外部 (Exterior) |
---|---|---|---|
內部 (Interior) | |||
邊界 (Boundary) | |||
外部 (Exterior) |
如上圖所示,淡紫色的多邊形為條件幾何物件(A),淡紅色的多邊形為測試幾何物件(B),圖中的黑色部分表示兩個幾何物件對應的部分(內部、邊界、外部)之間的相交(或者說重合)部分(A.[I/B/E] intersection B.[I/B/E])。
DE-9IM模型的布林形式
9交叉模型交集矩陣的定義域為{F,0,1,2},那麼一共可能有49種可能的拓撲關係。簡單的考慮到外部與外部的交集的維度一定是2 ,那麼可能的拓撲關係仍有89種,考慮很多種關係是矛盾的,剩下的組合仍然很多。這與我們希望直觀,簡單的表達拓撲關係的目標相差甚遠。實際上,常見的拓撲關係描述符大概10種左右。為了方便描述這些關係,可以對矩陣的定義域做補充:
- 0,1,2表示非空,用T進行表示;
- 空集仍然用F表示;
- 引入*表示是什麼都可以,geos中為“DONTCARE”
我們常用的拓撲關係描述符,就是採用上述6種型別描述出來的。
常用拓撲關係描述
Intersects
相交是指兩物件的內部或邊界存在交集,對應下面四種Intersection Matrix
就是說 對應Interior,Boundary的2×2的部分任意一個單元是T就可以了,其他的都“DONTCARE”。注意,這些矩陣都是對稱的。
Disjoint
相離就是不相交,因此對應於相交的“Interior,Bountry 任意存在交集”,相離的定義是Interior,Boundary均不存在交集。
,這個矩陣也是對稱的。
Contains
A.Contains(B)表示B完全在A內部。即A,B的interior相交併且 B的Interior與Boundary均不與A的exterior相交。
Within
Within 與Contains互為轉置。A.Contains(B) = B.Within(A)。為什麼叫互為轉置呢,這是因為within的相交矩陣是Contains矩陣的轉置就好了。
Equal
Equal表示的是A和B的形狀完全相同(但是,並不代表他們所有的座標都是完全一樣的。A或者B都可能有冗餘的座標,比如多點共線)。Equal的交集矩陣是內部相交,但任意一方的內部與邊界均不與對方的外界相交
Overlap
疊置判斷對A與B的維度有要求,要求A與B的維度相同,並且要求A與B的內部的交集的維度與AB的維度相同。因為多邊形(面)之間的交集,點之間的交集均與他們的維度相同,線之間的交集可能會是點,線兩種情況,所以特別將線與面、點之間的矩陣進行了區分,要求線的內部交集為線。
面、點的疊置矩陣:
線疊置矩陣:
Touch
Touch表示的是兩個幾何要素之間的臨接關係。touch關係的要點是:
兩個元素的內部(interior)不能有交集,但是內部與邊界,邊界與邊界可以有交集。
參與的兩種元素不能同時為點型別。(點沒有邊界,內部與內部不相交變成相離了)
三個矩陣中,前兩個互為轉置關係,最後一個是對稱矩陣。所以說這個關係也是對稱的。
Cross
穿越的定義是A與B的內部有交集,但交集的維度要比A與B最大的維度要小。按照這個標準,點點與面面不可能存在cross關係,因為他們內部的交集的維度與他們的維度是相同的。同樣,對於線線的交集要區別對待,指定其內部的交集為0(而不是1)。
非線線交集矩陣:
線線交集矩陣:
對拓撲關係的分析:從矩陣的角度
從上述9交叉模型矩陣的表達上,能分析出很多資訊。
1. 如果交集矩陣是對稱的,那麼對應的拓撲關係滿足交換律的。
A.Relation(B)=B.Relation(A)
可以交換的拓撲關係有(對應矩陣對稱):
Intersects, Disjoint, Equal, Overlap, Touch, Cross(線線)
不可以交換的拓撲關係有:
Contains, Within, Cross(非線線)
2. 如果兩個關係矩陣互為轉置,那麼這兩個關係可以調換位置
A.Relation1(B)=B.Relation2(A)。滿足條件的關係有:
Contains, Within
3. 如果兩個矩陣互補,那麼兩種關係也是互斥關係。滿足條件的關係有
Intersects, Disjoint
4. 拓撲關係之間的關係
上述8種關係並全不是互斥的,元素A,B可以同時滿足多種拓撲關係。可以將這些拓撲關係的“關係”使用韋恩圖來描述: