You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:50:20