操作兩個geometry時,常用的介面是itopologicaloperator,比如clip,intersect,union,cut等。
當判斷兩個geometry之間的拓撲關係式,用irelationaloperator ,它有contains、crosses、disjoint、equals、overlaps、within、touches等方法。
示例:[c-sharp]view plain
copy
itopologicaloperator sourcepolygon= (itopologicaloperator)outerpolygon;
ipolygon resultpolygon = (ipolygon)sourcepolygon.difference(cutpolygons);
[c-sharp]view plain
copy
irelationaloperator re = (irelationaloperator)outerpolygon;
if (!re.contains(inpolygon))
在進行這兩個介面的運算前要注意下,如果參加運算的兩個geometry物件不是簡單物件時,(注1:******物件,見下圖)(注2:可以用itopologicaloperator介面的is******函式進行判斷)(注3:當使用ipointcollection等介面生成或編輯的geometry物件比較常出現這種情況),運算有可能會出錯,並得不出想要的結果,這時需要對其進行處理:
[c-sharp]view plain
copy
((itopologicaloperator)outerpolygon).simplify();
簡單物件的定義及處理
附1:itopologicaloperator的一些函式示意:
方法名稱
說明boundary
幾何圖形物件的邊界
buffer
對幾何圖形物件進行緩衝區空間拓撲操作
clip
對幾何圖形物件進行裁剪空間拓撲操作
constructunion
高效的合併多個列舉幾何物件與單個幾何物件合併為單個幾何物件,這對於大量幾何物件的合併非常高效
convexhull
構建幾何物件的凸邊形
cut切割幾何物件
difference
乙個幾何圖形減去它與另乙個幾何圖形相交的部分
intersect
兩個同維度幾何物件的交集部分
simplify
使幾何物件拓撲一致
symmetricdifference
對稱差分將兩個幾何圖形的並集部分減去兩個幾何圖形交集的部分
union
合併兩個同維度的幾何物件為單個幾何物件
**:附2:irelationaloperator的一些關係型別:
關係型別
描述contains
判斷乙個圖形是否包含另外乙個圖形
within
判斷乙個圖形是否被另外乙個圖形所包含。
crosses
判斷兩個圖形是否在維數較少的那個圖形的內部相交
disjoint
判斷兩個圖形間是否沒有相同點
equals
判斷兩個圖形是否是同乙個型別並且在平面上的點是否是相同的位置。如果返回值為真,則它們應該包含(contains)另外乙個圖形同時也被另外乙個圖形所包含(within)。
overlaps
判斷兩個圖形的交集是否和其中的乙個圖形擁有相同的維數,並且他們交集不能和其中任何乙個圖形相等。該方法只使用與兩個polyline 之間或者兩個polygon 之間。
touch
判斷兩個圖形的邊界是否相交,如果兩個圖形的交集不為空,但兩個圖形內部的交集為空,則返回值為真。
判斷兩個線段相交
我們首先將問題分成如下幾個小問題討論 首先要解決的第乙個問題是判斷直線是否平行,我們首先假設四個點的座標為 前兩個點為a x1,y1 b x2,y2 後兩個點為 c x3,y3 d x4,y4 求出兩個直線的方向向量e1 x 1 x2 y1 y2 e2 x 3 x4 y3 y4 通過e 1 e2 求...
判斷兩個線段是否相交
html xmlns lang en charset utf 8 判斷兩個線段是否相交問題title rel stylesheet href css reset.css rel stylesheet href css style.css head class wrap 判斷兩個線段是否相交h2 br...
判斷兩個矩形是否重疊
兩個矩形的邊均與x軸或y軸平行,即軸對齊的矩形 將第乙個矩形記做a,第二個矩形記做b 判斷矩陣a與矩陣b是否重疊 邊沿重疊也認為是重疊 第一種方案,正向思維 按照一般的思路,先列舉出所有的矩形重疊的情況,然後,判斷是否是其中一種,如圖所示,共有四種重疊情況,我們使用紫色代表矩形a,紅色代表矩形b,並...