1. 程式人生 > >GIS演算法基礎(一) 計算幾何基礎(上)

GIS演算法基礎(一) 計算幾何基礎(上)

最近在學習GIS演算法,在學習過程中,想把一些經典的演算法或者思想記錄下來,分享給大家

 

計算幾何基礎本來是計算機圖形學的內容,但是GIS在影象處理中是離不開計算機處理的,所以GIS演算法基礎第一個應該是計算幾何基礎。

如何把空間實體的點線面以及他們之間的關係(例如,相交,包含,鄰接,疊置等等)用計算機語言表達出來,應該是這裡解決的第一個問題。前人已經有過這樣這樣的解決模型---DE-9IM模型(Dimensionally Extended nine-Intersection Model

DE9IM模型是一種拓撲模型,他用於描述多邊形之間的關係。現有兩個多邊形,如果他們相交,那他們的邊界,內部,外部的交集情況是怎麼樣的?如果相離呢?情況又是怎樣的?DE9IM實際上就是一個3X3的矩陣,他儲存著兩個多邊形,邊界,內部,外部,的交集情況。

假如交集的結果用維數dim ={-1,0,1,2} 表示,-1代表無交集,0代表交集為一個點,1代表線,2代表面。

上面這個圖能很好的說明這個問題。 a,b代表兩個面,他們邊界,內部,外部,相交的結果就是 紅色的部分

例如a的內部和b的內部  交集應該是一個面,所以是2;a的邊界和b的邊界,交集應該是兩個點,所以是0;

總結一下:dim = -1 無交集;

                  dim = 0 交集中不包含線和麵,但至少包含一個點

                  dim = 1  交集中不包含面,但至少包含一個面

                  dim = 2 交集至少包含一個面

 

 現在多邊形之間的問題的模型解決了,那麼如何用計算機語言表達呢?

上面也說了,這個交集的結果可以用一個3x3的矩陣表達。例如上邊的a,b交集結果 表達為:

2 1 2

1 0 1

2 1 2

於是,空間關係的描述可以歸納為:兩個幾何體,以表示兩個幾何體的DE-9IM結果的矩陣輸入,然後把這個矩陣轉為字串,例如上面這個就變為"212101212"了

如果我們說兩個多邊形相交,那就是他們的結果要有 0,1,2 也就是交集中游點或線或面

在計算機中就是 (0,1,2) ->true

                           (-1) ->false

                            (-1,0,1,2)->*

那麼上面那個字串就可以表示成"TTTTTTTTT"

 

經過前人的整理,空間關係的判斷可以通過特定的一些模式進行判斷

謂詞 返回值   描述
相等(Equals) T*F**FFF* 邊界上的點和內部的點全部重合。屬於相交的一種
相離(Disjoint) FF*FF**** 不相交,與相交相反
相接(Touches) FT*******\F**T*****\F***T**** 只有邊界上有共同點,內部沒有。屬於相交的一種
覆蓋(Covers) T*****FF*\*T****FF*\***T**FF*\****T*FF* b上的每個點都在a上(邊界和內部),且所有點都不在a外部。屬於相交的一種  
疊置(Overlaps) T*T***T**\1*T***T** a和b相交,且具有一部分共同點,但不是全部內部點。屬於相交的一種

 

所以,只要我們得到了兩個多邊形的DE9IM矩陣結果,我們就可以判斷他們之間的關係了。

那怎樣獲得兩個多邊形的交集結果呢?這關係到點,線,面-點,線,面 之間的判斷,這也是GIS演算法計算幾何中的一大部分的內容,這些我之後在寫把