[轉]ArcGIS中判斷兩個Geometry之間的關係

[轉]ArcGIS中判斷兩個Geometry之間的關係



操作兩個Geometry時,常用的接口是ITopologicalOperator,比如clip,Intersect,Union,cut等。

當判斷兩個Geometry之間的拓撲關係式,用IRelationalOperator ,它有Contains、Crosses、Disjoint、Equals、Overlaps、Within、Touches等方法。

示例:

 

[c-sharp] view plaincopy
  1. ITopologicalOperator sourcePolygon= (ITopologicalOperator)outerPolygon;  
  2. IPolygon resultPolygon = (IPolygon)sourcePolygon.Difference(cutPolygons);  

 

[c-sharp] view plaincopy
  1. IRelationalOperator re = (IRelationalOperator)outerPolygon;  
  2. if (!re.Contains(inPolygon))  
  3. {  
  4.     throw new Exception("abcdefg");  
  5. }  

 

在進行這兩個接口的運算前要注意下,如果參加運算的兩個Geometry對象不是簡單對象時,(注1:Simple對象,見下圖)(注2:可以用ITopologicalOperator接口的IsSimple函數進行判斷)(注3:當使用IPointCollection等接口生成或編輯的Geometry對象比較常出現這種情況),運算有可能會出錯,並得不出想要的結果,這時需要對其進行處理:

[c-sharp] view plaincopy
  1. ((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

判斷兩個圖形的邊界是否相交,如果兩個圖形的交集不爲空,但兩個圖形內部的交集爲空,則返回值爲真。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章