NetTopologySuite GetPolygons返回空结果的原因排查
NetTopologySuite Polygonizer无法生成多边形问题
我尝试使用NetTopologySuite的Polygonizer.GetPolygons方法将一批线段转换为多边形,这些线段明显相交且可形成闭合区域,但GetPolygons始终返回空结果,所有线段都被归类到dangles中。
我的实现代码如下:
NetTopologySuite.Geometries.GeometryFactory geometryFactory = new NetTopologySuite.Geometries.GeometryFactory(); List<NetTopologySuite.Geometries.Geometry> lines = new List<NetTopologySuite.Geometries.Geometry>(); foreach(var line in segments) { List<NetTopologySuite.Geometries.Coordinate> coords = new List<NetTopologySuite.Geometries.Coordinate>(); NetTopologySuite.Geometries.Coordinate lineStart = new NetTopologySuite.Geometries.Coordinate(line.X1, line.Y1); NetTopologySuite.Geometries.Coordinate lineEnd = new NetTopologySuite.Geometries.Coordinate(line.X2, line.Y2); coords.Add(lineStart); coords.Add(lineEnd); var lineGeometry = geometryFactory.CreateLineString(coords.ToArray()); Console.WriteLine("L=" + lineGeometry.ToString()); lines.Add(lineGeometry); } Polygonizer polygonizer = new Polygonizer(); polygonizer.Add(lines); var polys = polygonizer.GetPolygons(); // 返回空 var dangles = polygonizer.GetDangles(); // 返回空
不确定是我的使用方式错误,还是该方法本就无法实现我的预期效果?
输入线段图示:
预期效果:闭合线段形成多边形,其余线段(红色叉标记)为dangles
以下是我的线段序列化列表:
string ls = @"[{"Start":{"X":326.7043151855469,"Y":72.9458999633789,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":0,"Visible":false,"ID":0,"Tag":null,"Opacity":0},"End":{"X":948.3546752929688,"Y":77.146240234375,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":0,"Visible":false,"ID":0,"Tag":null,"Opacity":0},"X1":326.7043151855469,"Y1":72.9458999633789,"X2":948.3546752929688,"Y2":77.146240234375,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":false,"ID":100001,"Tag":"temp","Opacity":0},{"Start":{"X":452.7145080566406,"Y":35.14283752441406,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":446.41400146484375,"Y":215.75747680664062,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":452.7145080566406,"Y1":35.14283752441406,"X2":446.41400146484375,"Y2":215.75747680664062,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100002,"Tag":"temp","Opacity":1},{"Start":{"X":654.3308715820312,"Y":35.14283752441406,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":643.8300170898438,"Y":209.4569549560547,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":654.3308715820312,"Y1":35.14283752441406,"X2":643.8300170898438,"Y2":209.4569549560547,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100003,"Tag":"temp","Opacity":1},{"Start":{"X":792.9420776367188,"Y":35.14283752441406,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":795.042236328125,"Y":213.6573028564453,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":792.9420776367188,"Y1":35.14283752441406,"X2":795.042236328125,"Y2":213.6573028564453,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100004,"Tag":"temp","Opacity":1},{"Start":{"X":330.9046325683594,"Y":165.3533935546875,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":918.9522705078125,"Y":169.55372619628906,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":330.9046325683594,"Y1":165.3533935546875,"X2":918.9522705078125,"Y2":169.55372619628906,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100005,"Tag":"temp","Opacity":1},{"Start":{"X":547.22216796875,"Y":49.84402847290039,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":549.3223266601562,"Y":117.04946899414062,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":547.22216796875,"Y1":49.84402847290039,"X2":549.3223266601562,"Y2":117.04946899414062,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100006,"Tag":"temp","Opacity":1},{"Start":{"X":549.3223266601562,"Y":117.04946899414062,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":685.8333740234375,"Y":127.55032348632812,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":549.3223266601562,"Y1":117.04946899414062,"X2":685.8333740234375,"Y2":127.55032348632812,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100007,"Tag":"temp","Opacity":1},{"Start":{"X":549.3223266601562,"Y":112.84913635253906,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"End":{"X":551.4224853515625,"Y":192.6555938720703,"ShapeType":0,"Stroke":null,"Fill":null,"StrokeThickness":1,"Visible":true,"ID":0,"Tag":null,"Opacity":1},"X1":549.3223266601562,"Y1":112.84913635253906,"X2":551.4224853515625,"Y2":192.6555938720703,"ShapeType":1,"Stroke":"#FFFFFF","Fill":null,"StrokeThickness":3,"Visible":true,"ID":100008,"Tag":"temp","Opacity":1}]"; var lines = JsonSerializer.Deserialize<List<Line>>(ls);
内容的提问来源于stack exchange,提问作者Tim Davis
相关产品推荐
相关产品推荐

