【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)