使用缓冲区从折线获取多边形

时间:2017-10-31 19:18:16

标签: c# algorithm gis shapes

我正在寻找C#中的算法,该算法将采用折线(即具有节点/角的线),并且在给定宽度/缓冲区的情况下,生成多边形。换句话说,如果你想象一个具有一定宽度的折线,我想得到适合该折线的边界多边形。

折线只是一个(x,y)坐标列表,我希望将其输入到算法中,并加上一定的宽度,并让它吐出一个(x,y)坐标列表多边形的节点/角落。

类似于:

point[] PolylineToPolygon(Point[] points, double width)
{
    // algorithm
}

void Convert()
{
    Point[] linePoints = new Point[] { new Point { X = -25.125675, Y = 28.434342 }, new Point { X = -26.232687, Y = 29.958363 }, new Point { X = -24.554377, Y = 26.445767 } };
    point[] polygonPoints = PolylineToPolygon(linePoints, 0.003);
}

从我读过的内容来看,我需要使用Minkowski算法,但我找不到C#中的实现,也不确定要使用哪种Minkowski算法......

非常感谢任何帮助或指示!

1 个答案:

答案 0 :(得分:2)

您可以使用lib NetTopologySuite。请参阅github.com/NetTopologySuite/NetTopologySuite您可以在此处缓冲折线,生成的几何图形将为多边形。 你的代码是这样的:

LineString ls = new LineString(new Coordinate[] { new Coordinate { X = -25.125675, Y = 28.434342 }, new Coordinate { X = -26.232687, Y = 29.958363 }, new Coordinate { X = -24.554377, Y = 26.445767 } }); 
Polygon result = ls.Buffer(0.003) as Polygon; 

顺便说一句:这是Minkowski总和的实现。