热门IT资讯网

获取Polyline自相交点

发表于:2024-11-26 作者:热门IT资讯网编辑
编辑最后更新 2024年11月26日,背景:如果Polyline不为简单的几何图形,则求出其自相交的点。如果FromPoint和ToPoint重合也一并返回。实现逻辑:一、创建IMulitPoint pTargetPoint二、判断Pol
  • 背景:

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


  • 实现逻辑:

一、创建IMulitPoint pTargetPoint

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

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

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

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


  • 第三步的代码:

private IMultipoint getInersectPoint(IPolyline pPolyline){IGeometryCollection pGeoColl = pPolyline as IGeometryCollection;List lstPoint = new List();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;}
0