2017-10-26 15 views
0

Google S2ライブラリを使用して矩形を作成できましたが、ポリゴンを作成できません。私は別の方法で試しましたが、これを解決することはできません。JavaでGoogle S2ライブラリを使用してポリゴンを作成する方法

Double point1_lat= 12.9751; 
    Double point1_long = 77.5599; 
    Double point2_lat= 12.9952; 
    Double point2_long = 77.5954; 
    Double point3_lat= 12.9741; 
    Double point3_long = 77.6246; 
    Double point4_lat= 12.9495; 
    Double point4_long = 77.59336; 
    Double point5_lat= 12.9482; 
    Double point5_long = 77.5630; 

    S2Point point1 = new S2Point(point1_lat, point1_long, 0); 
    S2Point point2 = new S2Point(point2_lat, point2_long, 0); 
    S2Point point3 = new S2Point(point3_lat, point3_long, 0); 
    S2Point point4 = new S2Point(point4_lat, point4_long, 0); 
    S2Point point5 = new S2Point(point5_lat, point5_long, 0); 

    S2PolygonBuilder polygonBuilder = new S2PolygonBuilder(); 

    polygonBuilder.addEdge(point1, point2); 
    polygonBuilder.addEdge(point2, point3); 
    polygonBuilder.addEdge(point3, point4); 
    polygonBuilder.addEdge(point4, point5); 
    polygonBuilder.addEdge(point5, point1); 

    S2Polygon polygon = polygonBuilder.assemblePolygon(); 

    System.out.println("*************** debug point 1 ****************" + polygon.toString()); 

    S2RegionCoverer coverer = new S2RegionCoverer(); 
    coverer.setMinLevel(5); 
    coverer.setMaxLevel(10); 
    coverer.setMaxCells(100); 

    System.out.println("*************** debug point 2 ****************"); 


    S2CellUnion union = coverer.getCovering(polygon); 

    System.out.println("*************** debug point 3 ****************"); 


    System.out.println("cells inside the region : "+union.cellIds().size()); 

出力は次のとおりです:私のコードも出力を共有

*************** debug point 1 ****************Polygon: (1) loops: 
    loop < 
    (0.0, 80.52526814804811) 
    (0.0, 80.52256106366895) 
    (0.0, 80.50285721964708) 
    (0.0, 80.4926857166327) 
    (0.0, 80.51134710630562) 
    > 

    *************** debug point 2 **************** 
    finally checking for loop end2047 
    *************** debug point 3 **************** 
    cells inside the region : 6 

あなたは、私が唯一の6個の細胞を作成することができる午前うちに見ることができますが、それはもっとあるべき領域全体が細胞のみで満たされなければならないため、6よりも大きい。

どうすればいいか教えてください。

ありがとう!!!!

答えて

0

ライブラリには、独自の内部Lat long表現があります。あなたは、思うよりもまったく異なるエリアをカバーする形を作っています。あなたが6つのセルのレベルを返す場合、私はあなたがすべて非常に高いレベル(0または1または2)であることがわかるでしょう。

S2latlong.FromDegreees(y、x)を使用してS2latlongオブジェクトを作成する必要があります。次に、作成したS2LatLngオブジェクトで.ToPoint()を呼び出すことができます。

残りの部分は正しいものです。これらの点を使用して、ポリゴンを作成するエッジとエッジを形成します。一度latlong変換を行うと、それはあなたのために動作するはずです。

S2Point p = S2LatLng.FromDegrees(y, x).ToPoint(); 
関連する問題