码迷,mamicode.com
首页 > 其他好文 > 详细

获取Polyline自相交点

时间:2014-05-14 15:43:53      阅读:599      评论:0      收藏:0      [点我收藏+]

标签:esri self_inersect polyline 自相交

  • 背景:

       如果Polyline不为简单的几何图形,则求出其自相交的点。如果FromPoint和ToPoint重合也一并返回。


  • 实现逻辑:

       一、创建IMulitPoint pTargetPoint

       二、判断Polyline是否首尾相接,如果首尾相接,将点加入到pTargetPoint;

       三、判断Polyline是否为简单的几何图形,如果不是则进行以下步骤:

            1)得出Polyline中所有Path的起点和终点,List<IPoint> lstOrigin;

            2)将Polyline简单化,得出所有Path在LstOrigin中找不到的起点和终点,添加到pTargetPoint中


  • 第三步的代码:

private IMultipoint getInersectPoint(IPolyline pPolyline)
{
IGeometryCollection pGeoColl = pPolyline as IGeometryCollection;
List<IPoint> lstPoint = new List<IPoint>();
for (int i = 0; i < pGeoColl.GeometryCount; i++)
{
IPath pPath = pGeoColl.get_Geometry(i) as IPath;
IPoint pTemp = lstPoint.Find(p => (p.X == pPath.FromPoint.X && p.Y == pPath.FromPoint.Y));
if (pTemp == null) lstPoint.Add(pPath.FromPoint);
pTemp = lstPoint.Find(p => (p.X == pPath.ToPoint.X && p.Y == pPath.ToPoint.Y));
if (pTemp == null) lstPoint.Add(pPath.ToPoint);
}
ITopologicalOperator2 ptopo = pPolyline as ITopologicalOperator2;
ptopo.IsKnownSimple_2 = false;
ptopo.Simplify();
IMultipoint pMultipoint = new MultipointClass();
IPointCollection pPointColl = pMultipoint as IPointCollection;
for (int i = 0; i < pGeoColl.GeometryCount; i++)
{
IPath pPath = pGeoColl.get_Geometry(i) as IPath;
IPoint pTemp = lstPoint.Find(p => (p.X == pPath.FromPoint.X && p.Y == pPath.FromPoint.Y));
if (pTemp == null) pPointColl.AddPoint(pPath.FromPoint);
pTemp = lstPoint.Find(p => (p.X == pPath.ToPoint.X && p.Y == pPath.ToPoint.Y));
if (pTemp == null) pPointColl.AddPoint(pPath.ToPoint);
}
return pMultipoint;
}

 

本文出自 “LittleByLittle” 博客,请务必保留此出处http://zhangzt.blog.51cto.com/8901678/1410836

获取Polyline自相交点,布布扣,bubuko.com

获取Polyline自相交点

标签:esri self_inersect polyline 自相交

原文地址:http://zhangzt.blog.51cto.com/8901678/1410836

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!