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