首页 > 学院 > 开发设计 > 正文

arcengine erase 擦除

2019-11-10 21:27:16
字体:
来源:转载
供稿:网友

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表