使用GP工具。
參考:
點擊打開鏈接
代碼為:
public void EraSEOper(IFeatureClass ExSourceFC,IFeatureClass ExEraseFC) { IFeatureClass mFeatureClass = null; IFeatureClass mSourceFeatureClass = null; IFeatureCursor mFeatureCursor = mFeatureClass.Search(null, false); IFeature mFeature = mFeatureCursor.NextFeature(); while (mFeature != null) { ISpatialFilter tSF = new SpatialFilterClass(); tSF.Geometry = mFeature.Shape; tSF.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; //求出與裁切框相交要素 IFeatureCursor tFeatureCursor = mSourceFeatureClass.Search(tSF, false); IFeature tFeature = tFeatureCursor.NextFeature(); while (tFeature != null) { IGeometry tGeo2 = tFeature.ShapeCopy; ITopologicalOperator tTope2 = tGeo2 as ITopologicalOperator; tTope2.Simplify(); IGeometry tGeo = tFeature.ShapeCopy; ITopologicalOperator tTope = tGeo as ITopologicalOperator; tTope.Simplify(); //用Envelope對要素進行裁切 tTope.Intersect(mFeature.Shape, esriGeometryDimension.esriGeometry2Dimension); //tTope.Clip(this._Envelope); IGeometry tGeoClip = (IGeometry)tTope; //用裁切出來的要素,再與其源要素進行求差處理,即得到外圍要素 IGeometry tGeoDe = tTope2.Difference(tGeoClip); //把外圍要素賦予源要素 tFeature.Shape = tGeoDe; tFeature.Store(); tFeature = tFeatureCursor.NextFeature(); mFeature = mFeatureCursor.NextFeature(); } } }需要完善的內容
1.沒有判斷IFeatureClass對象是否為面對象,如果不為面對象則無法實現擦除。2.沒有考慮投影問題。3.還有待發現其他可能產生的問題。
新聞熱點
疑難解答