标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。