2017-10-26 2 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

라이브러리의 자체 내부 길이는 길기 때문에 생각보다 완전히 다른 영역을 커버하는 모양을 만들고 있습니다. 6 개의 셀에 대한 레벨을 반환하면 반환되는 셀은 모두 매우 높은 레벨 (0 또는 1 또는 2)임을 알게 될 것입니다.

S2latlong.FromDegreees (y, x)를 사용하여 S2latlong 개체를 만들어야합니다. 방금 만든 S2LatLng 개체에서 .ToPoint()를 호출 할 수 있습니다.

그 나머지는 정확합니다. 이 점들을 사용하여 모서리를 형성하고 그 모서리를 사용하여 다각형을 만듭니다. 일단 latlong 변환을 수행하면, 그것은 당신을 위해 작동합니다.

S2Point p = S2LatLng.FromDegrees(y, x).ToPoint();