使用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.还有待发现其他可能产生的问题。
新闻热点
疑难解答