如何在J中使用googles2库创建多边形

2024-06-16 13:58:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以创建矩形使用谷歌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());

输出为:

^{pr2}$

你可以看到,我只能创建6个单元格,但它应该多于6个,因为整个区域必须只填充单元格。在

谢谢你的时间,如果你能建议我怎么做。在

谢谢!!!!在


Tags: newoutsystemlongdoublelataddedgepoint1
1条回答
网友
1楼 · 发布于 2024-06-16 13:58:32

图书馆有它自己的内部横向表示。你所做的形状覆盖了一个与你想象的完全不同的区域。如果你返回它返回的6个单元格的级别,我想你会发现它们都是非常高的级别(0、1或2)。在

您需要使用S2创建一个S2latlong对象latlong.FromDegreees公司(y,x)然后可以对刚才创建的S2LatLng对象调用.ToPoint()。在

剩下的你有正确的。使用这些点形成边,使用这些边构建多边形。一旦你做了拉特朗转换,它应该对你有用。在

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

相关问题 更多 >