arcengine erase 擦除

来源:互联网 发布:汽车车身电脑在线编程 编辑:程序博客网 时间:2024/05/16 11:58

擦除后图层保存在新图层中

使用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.还有待发现其他可能产生的问题。

0 0
原创粉丝点击