首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# NetTopologySuite库:偏移多边形

C# NetTopologySuite库:偏移多边形
EN

Stack Overflow用户
提问于 2022-09-22 14:37:49
回答 1查看 97关注 0票数 0

我一直在C#做一个基于几何的项目。为此,我使用NetTopologySuite。我有一个Z_Point类,它是一个基本类,构造函数对于X、Y和Z需要三个双倍。然后我有一个Z_Polygon类,它有一个构造函数,它以一个点列表作为参数。为了补偿多边形,我使用NetTopologySuite,Z_Polygon的偏移方法有以下实现;

代码语言:javascript
复制
        public List<Z_Polygon> Offset(double distance)
    {
        Coordinate[] coords = new Coordinate[Vertices.Count];
        for (int i = 0; i < this.Vertices.Count; i++)
        {
            coords[i] = new Coordinate(this.Vertices[i].X, this.Vertices[i].Y);
        }

        LinearRing rng1 = new LinearRing(coords);
        Polygon pol1 = new Polygon(rng1);

        var bufParams = new BufferParameters();
        bufParams.MitreLimit = 5;
        bufParams.JoinStyle = JoinStyle.Mitre;
        Geometry b = BufferOp.Buffer(pol1, distance, bufParams);

        List<Z_Polygon> result = new List<Z_Polygon>();
        List<Z_Point> newVertices = new List<Z_Point>();

        if (b is MultiPolygon)
        {
            b = (MultiPolygon)b;
            for (int i = 0; i < b.NumGeometries; i++)
            {
                Polygon pol = (Polygon)b.GetGeometryN(i);
                Geometry g = (Geometry)pol;

                foreach (var item in pol.Coordinates)
                {
                    newVertices.Add( new Z_Point(item.X, item.Y));
                }
                result.Add(new Z_Polygon(newVertices));
            }
        }
        else
        {
            Polygon pol = (Polygon)b;
            foreach (var item in pol.Coordinates)
            {
                newVertices.Add(new Z_Point(item.X, item.Y));
            }
            result.Add(new Z_Polygon(newVertices));
        }
        return result;
    }

然而,这并不是返回正确的结果。它给出了一些不需要的额外行。请查看下面的图像;该图像并排显示实际结果和预期结果。

这是多边形的代码;

代码语言:javascript
复制
Z_Point p1 = new Z_Point(1300.0, 1200.0);
        Z_Point p2 = new Z_Point(1300.0, 9800.0);
        Z_Point p3 = new Z_Point(6200.0, 9800.0);
        Z_Point p4 = new Z_Point(6200.0, 6500.0);
        Z_Point p5 = new Z_Point(2600.0, 6500.0);
        Z_Point p6 = new Z_Point(2600.0, 5300.0);
        Z_Point p7 = new Z_Point(10700.0, 5300.0);
        Z_Point p8 = new Z_Point(10700.0, -2900.0);
        Z_Point p9 = new Z_Point(3200.0, -2900.0);
        Z_Point p10 = new Z_Point(3200.0, -800.0);
        Z_Point p11 = new Z_Point(9700.0, -800.0);
        Z_Point p12 = new Z_Point(9700.0, 1200.0);
        Z_Polygon polygon1 = new Z_Polygon(new List<Z_Point>() { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p1 });

List<Z_Point> new_polygon = polygon1.Offset(-800);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-23 08:04:08

在结果中添加一个新的多边形后,忘记清除newVertices列表。可能有必要在循环中创建一个新列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73816540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档