[轉]ArcGIS中判斷兩個Geometry之間的關係
操作兩個Geometry時,常用的接口是ITopologicalOperator,比如clip,Intersect,Union,cut等。
當判斷兩個Geometry之間的拓撲關係式,用IRelationalOperator ,它有Contains、Crosses、Disjoint、Equals、Overlaps、Within、Touches等方法。
示例:
- ITopologicalOperator sourcePolygon= (ITopologicalOperator)outerPolygon;
- IPolygon resultPolygon = (IPolygon)sourcePolygon.Difference(cutPolygons);
- IRelationalOperator re = (IRelationalOperator)outerPolygon;
- if (!re.Contains(inPolygon))
- {
- throw new Exception("abcdefg");
- }
在進行這兩個接口的運算前要注意下,如果參加運算的兩個Geometry對象不是簡單對象時,(注1:Simple對象,見下圖)(注2:可以用ITopologicalOperator接口的IsSimple函數進行判斷)(注3:當使用IPointCollection等接口生成或編輯的Geometry對象比較常出現這種情況),運算有可能會出錯,並得不出想要的結果,這時需要對其進行處理:
- ((ITopologicalOperator)outerPolygon).Simplify();
簡單對象的定義及處理
附1:ITopologicalOperator的一些函數示意:
方法名稱 |
說明 |
Boundary |
幾何圖形對象的邊界 |
Buffer |
對幾何圖形對象進行緩衝區空間拓撲操作 |
Clip |
對幾何圖形對象進行裁剪空間拓撲操作 |
ConstructUnion |
高效的合併多個枚舉幾何對象與單個幾何對象合併爲單個幾何對象,這對於大量幾何對象的合併非常高效 |
ConvexHull |
構建幾何對象的凸邊形 |
Cut |
切割幾何對象 |
Difference |
一個幾何圖形減去它與另一個幾何圖形相交的部分 |
Intersect |
兩個同維度幾何對象的交集部分 |
Simplify |
使幾何對象拓撲一致 |
SymmetricDifference |
對稱差分將兩個幾何圖形的並集部分減去兩個幾何圖形交集的部分 |
Union |
合併兩個同維度的幾何對象爲單個幾何對象 |
圖解:
http://www.gisjc.com/a/ArcGIS_Engine/2010/0425/239.html
附2:IRelationalOperator的一些關係類型:
關係類型 | 描述 |
Contains | 判斷一個圖形是否包含另外一個圖形 |
Within | 判斷一個圖形是否被另外一個圖形所包含。 |
Crosses | 判斷兩個圖形是否在維數較少的那個圖形的內部相交 |
Disjoint | 判斷兩個圖形間是否沒有相同點 |
Equals |
判斷兩個圖形是否是同一個類型並且在平面上的點是否是相同的位置。如果返回值爲真,則它們應該包含(Contains)另外一個圖形同時也被另外一個圖形所包含(Within)。 |
Overlaps |
判斷兩個圖形的交集是否和其中的一個圖形擁有相同的維數,並且他們交集不能和其中任何一個圖形相等。該方法只使用與兩個Polyline 之間或者兩個Polygon 之間。 |
Touch |
判斷兩個圖形的邊界是否相交,如果兩個圖形的交集不爲空,但兩個圖形內部的交集爲空,則返回值爲真。 |