2016-05-04 4 views
0

私は、グーグルマップ上にポリゴンを描画するために、次の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; 
} 

これは正方形のためではなく、他の多角形のために良い結果が得られます。以下の結果を参照してください。

enter image description here

1、2、3、5、および6は、私のユースケースには十分ですが、私はないです確かwhy4と7は持っているし、バッファをオフにスロー余分な頂点ように見えます。

私はisBounded()メソッドをチェックして、必要に応じて頂点の順序を逆転させる前に、元々問題がありました。私が気付いたもう一つの興味深いことは、余分な頂点が私が作成した最初と最後の頂点の間に追加されることです。

私はおそらく単純なものがありませんが、なぜこのようなことが起こるのか分かりません。

これに関する考え方や方向性はありますか?

答えて

0

JavaGeomライブラリのバグであるようです。私はちょうどJTSライブラリを使って同じことをやってみましたが、その結果はずっと良くなっています。私は狂ったポリゴンでそれを壊そうとしましたが、それはすべて(非常に印象的)で働いています。

enter image description here

UPDATE:JTSライブラリ岩下記の結果を参照してください!私はこれを書いて以来、私は多くのことのためにそれを使用してきました。

+0

あなたはJTS - https://en.wikipedia.org/wiki/JTS_Topology_Suiteを意味しましたか? –

+0

@ Michael-7はい。申し訳ありません。私はそれを更新します。 – testing123

関連する問題