使用缓冲区从折线获取多边形
Getting polygon from polyline with buffer
我正在 C# 中寻找一种算法,该算法将采用折线(即带有 nodes/corners 的线),并在给定 width/buffer 的情况下生成多边形。换句话说,如果您描绘一条具有一定宽度的多段线,我想获得适合该多段线的边界多边形。
折线只是我想输入到算法中的 (x,y) 坐标列表,以及一定的宽度,并让它吐出一个 (x,y) 坐标列表来描述多边形的nodes/corners。
所以像这样:
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 算法...
任何帮助或指点将不胜感激!
您可以使用 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 和的一个实现。
我正在 C# 中寻找一种算法,该算法将采用折线(即带有 nodes/corners 的线),并在给定 width/buffer 的情况下生成多边形。换句话说,如果您描绘一条具有一定宽度的多段线,我想获得适合该多段线的边界多边形。
折线只是我想输入到算法中的 (x,y) 坐标列表,以及一定的宽度,并让它吐出一个 (x,y) 坐标列表来描述多边形的nodes/corners。
所以像这样:
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 算法...
任何帮助或指点将不胜感激!
您可以使用 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 和的一个实现。