google / google/s2-geometry-library-java

S2polygon.getCentroid seems wrong in some case?

オープン
#10 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
587
フォーク
231
PR マージ指標
30日以内にマージされた PR はありません

説明

I encountered a problem where the centroid seems wrong, i.e., the centroid is outside the polygon even when the polygon itself is a convex.

The code below plots a hexagon but the centroid seems to be way off, did I do anything wrong, thanks a lot for help?

double[] coordinates = new double[]{
47.167511,-122.1521,
47.167568,-122.151952,
47.167684,-122.151952,
47.167746,-122.1521,
47.167691,-122.152248,
47.16757,-122.152248,
47.167511,-122.1521,
};
List s2Points = new ArrayList<>();
for (int i = 0; i < coordinates.length /2; i++) {
double lat = coordinates[2 * i];
double lng = coordinates[2 * i + 1];
System.out.println(lat + "," + lng + ",");
S2LatLng s2LatLng = S2LatLng.fromDegrees(lat, lng);
s2Points.add(s2LatLng.toPoint());
}
S2Loop s2Loop = new S2Loop(s2Points);
s2Loop.normalize();
S2Polygon s2Polygon = new S2Polygon(s2Loop);
S2Point s2PolygonCentroid = s2Polygon.getCentroid();
System.out.println("Center: " + s2PolygonCentroid.toDegreesString() + " in_polygon " + s2Polygon
.contains(s2PolygonCentroid));

Output:
Center: (47.167557150782145, -122.15163675765044) in_polygon false

Kml file:


layer

<LineStyle>
<color>ff000000</color>
<width>1.2000000476837158</width>
</LineStyle>
<PolyStyle>
<color>4d000000</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
<BalloonStyle>
<text>&lt;![CDATA[&lt;h3&gt;$[name]&lt;/h3&gt;]]&gt;</text>
</BalloonStyle>


<LineStyle>
<color>ff000000</color>
<width>1.7999999523162842</width>
</LineStyle>
<PolyStyle>
<color>4d000000</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
<BalloonStyle>
<text>&lt;![CDATA[&lt;h3&gt;$[name]&lt;/h3&gt;]]&gt;</text>
</BalloonStyle>



normal
#style-polygon-normal


highlight
#style-polygon-highlight



<LineStyle>
<color>ff000000</color>
<width>1.2000000476837158</width>
</LineStyle>
<PolyStyle>
<color>4d000000</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
<BalloonStyle>
<text>&lt;![CDATA[&lt;h3&gt;$[name]&lt;/h3&gt;]]&gt;</text>
</BalloonStyle>


<LineStyle>
<color>ff000000</color>
<width>1.7999999523162842</width>
</LineStyle>
<PolyStyle>
<color>4d000000</color>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
<BalloonStyle>
<text>&lt;![CDATA[&lt;h3&gt;$[name]&lt;/h3&gt;]]&gt;</text>
</BalloonStyle>



normal
#style-s2cell-normal


highlight
#style-s2cell-highlight



test
test
#style-polygon




-122.15210000000002,47.167511 -122.151952,47.16756800000001 -122.15195200000002,47.16768400000001 -122.15210000000002,47.167746 -122.15224799999999,47.167691000000005 -122.15224799999999,47.16757 -122.15210000000002,47.167511




-122.15163675765044,47.167557150782145



screen shot 2017-11-01 at 11 19 06 pm

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

提供された S2Loop/S2Polygon の再現ケースと S2Polygon.getCentroid の呼び出しから始め、緯度/経度の値がどのように S2Point インスタンスになるかを確認します。返された点をポリゴンの座標および contains の結果と比較します。完了条件は、報告された外部の点の原因が重心計算にあるのか入力の解釈にあるのかを特定し、それを回帰テストでカバーすることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
computer-graphics
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。