> 技术文档 > 【NetTopologySuite库】使用Polygonizer线构面,并获取割边、悬挂边、无效环

【NetTopologySuite库】使用Polygonizer线构面,并获取割边、悬挂边、无效环


文章目录

效果图

【NetTopologySuite库】使用Polygonizer线构面,并获取割边、悬挂边、无效环
进行线构面:

  • 构成了两个多边形ABCD、EFGH
  • DI、IE是割边(CutEdge)
  • 有三条悬挂边:CK、FJ、OP
  • 有自相交的无效环:ALMN

示例代码

 var r = new WKTReader(); var wkts = new string[] { \"linestring(0 0,3 0)\", \"linestring(3 3,3 0)\", \"linestring(3 3,0 3)\", \"linestring(0 0,0 3)\", \"linestring(4 2,0 3)\", \"linestring(0 3,-1 4)\", \"linestring(0 5,-1 4)\", \"linestring(0 5,2 5)\", \"linestring(2 7,2 5)\", \"linestring(2 7,0 7)\", \"linestring(0 5,0 7)\", \"linestring(2 5,4 6)\", \"linestring(-3 3,-3 5)\", \"linestring(0 0,-3 2)\", \"linestring(-1 2,-3 2)\", \"linestring(-1 2,-3 0)\", \"linestring(0 0,-3 0)\", }; var lines = wkts.Select(x => r.Read(x)).ToList(); var pz = new Polygonizer(); foreach (var line in lines) { pz.Add(line); } var dangles = pz.GetDangles(); var cutEdges = pz.GetCutEdges(); var invalidRings = pz.GetInvalidRingLines(); var polygons = pz.GetPolygons(); Console.WriteLine(\"多边形:\"); foreach (var polygon in polygons) { Console.WriteLine(polygon.AsText()); } Console.WriteLine(\"\\n悬挂边:\"); foreach (var item in dangles) { Console.WriteLine(item.AsText()); } Console.WriteLine(\"\\n割边:\"); foreach (var item in cutEdges) { Console.WriteLine(item.AsText()); } Console.WriteLine(\"\\n无效环:\"); foreach (var item in invalidRings) { Console.WriteLine(item.AsText()); }

打印结果:

多边形:POLYGON ((3 0, 0 0, 0 3, 3 3, 3 0))POLYGON ((2 5, 0 5, 0 7, 2 7, 2 5))悬挂边:LINESTRING (2 5, 4 6)LINESTRING (4 2, 0 3)LINESTRING (-3 3, -3 5)割边:LINESTRING (0 3, -1 4)LINESTRING (0 5, -1 4)无效环:LINESTRING (0 0, -3 2, -1 2, -3 0, 0 0)LINESTRING (-3 2, 0 0, -3 0, -1 2, -3 2)

安全知识大全