如何正确使用SimplePolygon2D缓冲多边形?

时间:2016-05-04 22:57:22

标签: java google-maps-api-3 polygon

我使用以下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;
}

这对于正方形产生了良好的结果,但对于其他多边形则没有。见下面的结果:

enter image description here

1,2,3,5和6对于我的用例来说已经足够了,但我不确定为什么4和7似乎有以及抛出缓冲区的额外顶点。

在我开始检查isBounded()方法之前,我遇到了一些问题,并在需要时颠倒了顶点的顺序。我注意到的另一个有趣的事情是额外的顶点被添加到我创建的第一个和最后一个顶点之间。

我可能错过了一些简单的东西,但我似乎无法弄清楚为什么会发生这种情况。

有没有人对此有任何想法或指示?

1 个答案:

答案 0 :(得分:0)

看起来它只是JavaGeom库中的一个错误。我只是尝试使用JTS库来做同样的事情,结果更好。我试过用疯狂的多边形打破它,但它对所有这些都很有效(非常令人印象深刻)。见下面的结果:

enter image description here

更新:JTS库摇滚!自从我写这篇文章以来,我已经将它用于很多事情。