标签:分割 根据 IGeometry pline pFeature Shape pMap pFeatureLayer 进行
public static void SplitByLine(IMap map,IPolyline line, ILayer layer)
{
if (line != null)
{
IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
//划线
IGeometry pline = (IGeometry)line;
//拿到划线范围内的所有feature
IGeometry pGeometry = pline as IGeometry;
IMap pMap = map;
pMap.SelectByShape(pGeometry, null, false);
//转成IRealtionOperator接口,以便在遍历时判断几何位置关系。
IRelationalOperator rela = (pline as IPolyline) as IRelationalOperator;
//拿到切割目标集合
IEnumFeature pEnumFeature = (IEnumFeature)pMap.FeatureSelection;
IFeature pFeature = pEnumFeature.Next();
//依次遍历
while (pFeature != null)
{
if (rela.Crosses(pFeature.Shape))//判断是否Cross
{
try
{
//把面转成ITopologicalOperator,使用Cut函数
ITopologicalOperator topo = (pFeature.Shape as IPolygon) as ITopologicalOperator;
//新建两个面,作为切割函数的参数,切割后的两个对象保存于这两个面之中
IGeometry pLeftGeometry = new PolygonClass();
IGeometry pRightGeometry = new PolygonClass();
topo.Cut((pline as IPolyline), out pLeftGeometry, out pRightGeometry);
//由FeatureClass新建Feature
IFeature pFeatureLeft = pFeatureLayer.FeatureClass.CreateFeature();
IFeature pFeatureRight = pFeatureLayer.FeatureClass.CreateFeature();
//保存
pFeatureLeft.Shape = pLeftGeometry;
pFeatureRight.Shape = pRightGeometry;
pFeatureLeft.Store();
pFeatureRight.Store();
//删除
pFeature.Delete();
}
catch (Exception ms)
{
MessageBox.Show(ms.Message);
}
}
pFeature = pEnumFeature.Next();
}
//清除选择
IFeatureSelection pFeatureSelectionClear = layer as IFeatureSelection;
pFeatureSelectionClear.Clear();
ArcMap.Document.ActiveView.Refresh();
}
}
标签:分割,根据,IGeometry,pline,pFeature,Shape,pMap,pFeatureLayer,进行 来源: https://www.cnblogs.com/wzyong/p/16066467.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。