ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DotSpatial 要素删除节点

2021-12-05 21:00:16  阅读:158  来源: 互联网

标签:Count layer 删除 DotSpatial poly listCoorExtRing listCoorIntRing ic 节点



/// <summary>
/// 要素删除节点
/// </summary>
/// <param name="selectedFeature">被选中的要素</param>
/// <param name="deleteCoord">节点坐标</param>

1  private void DeleteVertex(IFeature selectedFeature, Coordinate deleteCoord)
  2         {
  3             if (selectedFeature == null)
  4             {
  5                 return;
  6             }
  7 
  8             if (_layer.DataSet.FeatureType == FeatureType.Polygon)
  9             {
 10                 _layer.EditMode = true;
 11 
 12                 for (int prt = 0; prt < selectedFeature.Geometry.NumGeometries; prt++)
 13                 {
 14                     IGeometry g = _selectedFeature.Geometry.GetGeometryN(prt);
 15                     Polygon poly = (Polygon)g;
 16 
 17                     #region 外环中查找
 18 
 19                     List<Coordinate> listCoorExtRing =poly.ExteriorRing.Coordinates.ToList<Coordinate>();
 20 
 21                     for (int ic = 0; ic < listCoorExtRing.Count; ic++)
 22                     {
 23                         if (listCoorExtRing[ic] == deleteCoord)
 24                         {
 25                             if (ic == 0 || ic == listCoorExtRing.Count - 1)//首节点被选中时,首末节点均删除
 26                             {
 27                                 listCoorExtRing.RemoveAt(listCoorExtRing.Count - 1);
 28                                 listCoorExtRing.RemoveAt(ic);
 29 
 30                                 listCoorExtRing.Add(listCoorExtRing[0]);
 31                                 break;
 32                             }
 33                             else
 34                             {
 35                                 listCoorExtRing.RemoveAt(ic);
 36 
 37                                 break;
 38                             }
 39                         }
 40                     }
 41                     //创建外环
 42                     LinearRing ringExterior = new LinearRing(listCoorExtRing.ToArray());
 43 
 44                     #endregion
 45 
 46                     #region 内环中查找
 47 
 48                     LinearRing[] ringInterior = null;
 49                     if (poly.NumInteriorRings > 0)
 50                     {
 51                         ringInterior = new LinearRing[poly.NumInteriorRings];
 52 
 53                         //遍历内环
 54                         for (int i = 0; i < poly.NumInteriorRings; i++)
 55                         {
 56                             List<Coordinate> listCoorIntRing =poly.GetInteriorRingN(i).Coordinates.ToList<Coordinate>();
 57                             //判断
 58                             for (int ic = 0; ic < listCoorIntRing.Count; ic++)
 59                             {
 60                                 if (listCoorIntRing[ic] == deleteCoord)
 61                                 {
 62                                     if (ic == 0 || ic == listCoorIntRing.Count - 1)//首节点被选中时,首末节点均删除
 63                                     {
 64                                         listCoorIntRing.RemoveAt(listCoorIntRing.Count - 1);
 65                                         listCoorIntRing.RemoveAt(ic);
 66 
 67                                         listCoorIntRing.Add(listCoorIntRing[0]);
 68                                         break;
 69                                     }
 70                                     else
 71                                     {
 72                                         listCoorIntRing.RemoveAt(ic);
 73                                         break;
 74                                     }
 75                                 }
 76                             }
 77 
 78                             ringInterior[i] = new LinearRing(listCoorIntRing.ToArray());
 79                             listCoorIntRing = null;
 80                         }
 81                     }
 82 
 83                     #endregion
 84 
 85                     #region 要素Geometry更新
 86                                       
 87                     Polygon polyNew = null;
 88                     if (poly.NumInteriorRings > 0)//存在内环
 89                     {
 90                         polyNew = new Polygon(ringExterior, ringInterior);
 91                     }
 92                     else //仅存在外环
 93                     {
 94                         polyNew = new Polygon(ringExterior);
 95                     }
 96 
 97                     selectedFeature.Geometry = polyNew;
 98 
 99                     #endregion
100 
101                 }
102                 _layer.DataSet.InvalidateVertices();
103                 _layer.DataSet.UpdateExtent();
104                 _layer.DataSet.Save();
105 
106                 _layer.EditMode = false;
107 
108                 Map.Invalidate();
109             }
110         }

 

标签:Count,layer,删除,DotSpatial,poly,listCoorExtRing,listCoorIntRing,ic,节点
来源: https://www.cnblogs.com/kogame/p/15647063.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有