私は、グーグルマップ上にポリゴンを描画するために、次のJavaを使用します。SimplePolygon2Dを使って多角形を正しくバッファリングするにはどうしたらいいですか?
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は、私のユースケースには十分ですが、私はないです確かwhy4と7は持っているし、バッファをオフにスロー余分な頂点ように見えます。
私はisBounded()メソッドをチェックして、必要に応じて頂点の順序を逆転させる前に、元々問題がありました。私が気付いたもう一つの興味深いことは、余分な頂点が私が作成した最初と最後の頂点の間に追加されることです。
私はおそらく単純なものがありませんが、なぜこのようなことが起こるのか分かりません。
これに関する考え方や方向性はありますか?
あなたはJTS - https://en.wikipedia.org/wiki/JTS_Topology_Suiteを意味しましたか? –
@ Michael-7はい。申し訳ありません。私はそれを更新します。 – testing123