GIS應用開發AO(2)-空間分析ITopologicalOperate
---恢復內容開始---
學院的安排也是可以,大三還要再學一遍大二的課程,不過,我喜歡編寫代碼喲,今天看了一下空間分析,主要用到了ITopologicalOperate,IProximityOperate,IRealationOperate三個接口,
這三個可以實現Arcgis許多常用功能,比如緩沖,裁剪......等等你能想到的功能。
話不多說,對了,今天女朋友病了,陪她去看病,希望她能早日康復,又能活蹦亂跳,下面進入代碼環節,上代碼,緩沖為例
IGraphicsContainerSelect gcs = map as IGraphicsContainerSelect;if (gcs.ElementSelectionCount == 0) { MessageBox.Show("當前沒有選擇任何Element!請先選取。"); return; } IElement el = gcs.SelectedElement(0); IGeometry geo = el.Geometry; ITopologicalOperator to = geo as ITopologicalOperator;if (to != null) { IGeometry ch = to.Buffer(distance); // 其余代碼簡單,自己添加,主要是顯示緩沖面,參考polygon的繪制 }
IGraphicsContainerSelect 專門用於選擇元素的管理,IGraphicsContainerSelect::UnselectAllElements用來清除選中元素,講一講ITopologicalOperate,這個接口可以實現很多功能,如下圖:
功能簡直多,只用過一些功能,就不多說了,免得暴露了我的孤陋寡聞,哈哈,要實現這些功能簡單,把
IGeometry ch = to.Buffer(.......);的buffer換成你需要的功能函數,比如Interact,把兩個polygon相交的部分提取出來,語句改為
IGeometry intersect = to.Intersect(....., esriGeometryDimension.esriGeometry2Dimension);esriGeometryDimension描述幾何對象的緯度,2維剛好繪制一個區域。
這些功能分別是:
Boundary屬性
如圖所示Polygon幾何對象的Boundary是組成它的Polyline幾何對象
Polyline幾何對象的[Boundary是組成它的頂點Point幾何對象
而Point幾何對象的Boundary是空對象,示意圖如下圖所示:
Buffer方法:
Buffer方法可以給一個高級幾何對象產生一個緩沖區,無論是Polygon,Polyline,Point它們的緩沖區都是具有面積的幾何對象
Clip方法
Clip方法可以將用一個Envelope對象對一個幾何對象進行裁剪,參見結果是幾何對象被Envelope 對象所包圍的部分如圖所示:
ConvexHull方法
ConvexHull方法可以產生一個幾何圖形的最小的邊框凸多邊形(沒有凹面包含幾何圖形的最小多邊形)
Cut方法
Cut方法不支持GeometryBags幾何對象,它可以指定一條切割曲線和一個幾何圖形,經過切割運算後把幾何圖形分為左右兩部分,做,右兩部分是相對曲線的方向而言。點與多點不能被切割,Polyline和Polygon只有與切割曲線相交時才能執行Cut方法,
Difference方法
Difference方法用於產生兩個幾何對象的差集。如圖所示:
Union方法和ConstructUnion都用於合並幾何對象,所不同的是前者合並兩個同維度的幾何對象為單個幾何對象,而後者是高效的合並多個枚舉幾何對象與單個幾何對象合並為單個幾何對象,這對於大量幾何對象的合並非常高效的。
Intersect方法
Intersect方法用於返回兩個同維度幾何對象的交集,即兩個幾何對象的重合部分。如下圖所示:
SymetricDifference方法
SymetricDifference方法用於產生兩個幾何圖形的對稱差分,即兩個幾何的並集部分減去兩個幾何的交集部分。
IsSimple屬性和Simplify方法
IsSimple屬性用於檢測幾何對象是否是拓撲正確即為簡化幾何對象,而Simplify方法用於簡化幾何對象使幾何對象的拓撲正確。
---恢復內容結束---
GIS應用開發AO(2)-空間分析ITopologicalOperate