如何正确缓冲使用 SimplePolygon2D 的多边形?
How can I buffer a polygon using SimplePolygon2D correctly?
我使用以下 Java 在 google 地图上绘制多边形:
public List<LatLng> create(List<LatLng> footprint)
{
SimplePolygon2D polygon = createPolygon(footprint);
if (polygon.isBounded())
{
polygon = createPolygon(Lists.reverse(footprint));
}
Collection<Point2D> bufferPoints = polygon.buffer(-.00003).boundary().vertices();
List<LatLng> footprintOfBuffer = new ArrayList<LatLng>();
for (Point2D point2D : bufferPoints)
{
footprintOfBuffer.add(new LatLng(point2D.x(), point2D.y()));
}
return footprintOfBuffer;
}
private SimplePolygon2D createPolygon(List<LatLng> footprint)
{
SimplePolygon2D polygon = new SimplePolygon2D();
for (LatLng latLng : footprint)
{
polygon.addVertex(new Point2D(latLng.getLat(), latLng.getLng()));
}
return polygon;
}
这对正方形产生了很好的结果,但对其他多边形却没有。查看以下结果:
1、2、3、5 和 6 对我的用例来说已经足够好了,但我不确定为什么 4 和 7 似乎有额外的顶点会抛出缓冲区。
在我开始检查 isBounded() 方法并在需要时颠倒顶点顺序之前,我最初遇到了一些问题。我注意到的另一件有趣的事情是,在我创建的第一个和最后一个顶点之间添加了额外的顶点。
我可能遗漏了一些简单的东西,但我似乎无法弄清楚为什么会这样。
有没有人对此有任何想法或方向?
看起来这只是 JavaGeom 库中的一个错误。我只是尝试使用 JTS 库来做同样的事情,结果要好得多。我曾尝试用疯狂的多边形打破它,但它对所有多边形都有效(非常令人印象深刻)。查看以下结果:
更新:JTS 库棒极了!自从我写这篇文章以来,我已经用它做了很多事情。
我使用以下 Java 在 google 地图上绘制多边形:
public List<LatLng> create(List<LatLng> footprint)
{
SimplePolygon2D polygon = createPolygon(footprint);
if (polygon.isBounded())
{
polygon = createPolygon(Lists.reverse(footprint));
}
Collection<Point2D> bufferPoints = polygon.buffer(-.00003).boundary().vertices();
List<LatLng> footprintOfBuffer = new ArrayList<LatLng>();
for (Point2D point2D : bufferPoints)
{
footprintOfBuffer.add(new LatLng(point2D.x(), point2D.y()));
}
return footprintOfBuffer;
}
private SimplePolygon2D createPolygon(List<LatLng> footprint)
{
SimplePolygon2D polygon = new SimplePolygon2D();
for (LatLng latLng : footprint)
{
polygon.addVertex(new Point2D(latLng.getLat(), latLng.getLng()));
}
return polygon;
}
这对正方形产生了很好的结果,但对其他多边形却没有。查看以下结果:
1、2、3、5 和 6 对我的用例来说已经足够好了,但我不确定为什么 4 和 7 似乎有额外的顶点会抛出缓冲区。
在我开始检查 isBounded() 方法并在需要时颠倒顶点顺序之前,我最初遇到了一些问题。我注意到的另一件有趣的事情是,在我创建的第一个和最后一个顶点之间添加了额外的顶点。
我可能遗漏了一些简单的东西,但我似乎无法弄清楚为什么会这样。
有没有人对此有任何想法或方向?
看起来这只是 JavaGeom 库中的一个错误。我只是尝试使用 JTS 库来做同样的事情,结果要好得多。我曾尝试用疯狂的多边形打破它,但它对所有多边形都有效(非常令人印象深刻)。查看以下结果:
更新:JTS 库棒极了!自从我写这篇文章以来,我已经用它做了很多事情。