我一直在C#做一个基于几何的项目。为此,我使用NetTopologySuite。我有一个Z_Point类,它是一个基本类,构造函数对于X、Y和Z需要三个双倍。然后我有一个Z_Polygon类,它有一个构造函数,它以一个点列表作为参数。为了补偿多边形,我使用NetTopologySuite,Z_Polygon的偏移方法有以下实现;
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;
}然而,这并不是返回正确的结果。它给出了一些不需要的额外行。请查看下面的图像;该图像并排显示实际结果和预期结果。
这是多边形的代码;
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);发布于 2022-09-23 08:04:08
在结果中添加一个新的多边形后,忘记清除newVertices列表。可能有必要在循环中创建一个新列表。
https://stackoverflow.com/questions/73816540
复制相似问题