如何控制latLngBounds.southwest和latLngBounds.northeast进入多边形外部?

时间:2019-03-29 06:59:24

标签: android google-maps gis polygon

我使用latlongbounds找到了中心点,东北和西南坐标,但是东北和西南坐标位于多边形之外,如何控制该点

     LatLngBounds latLngBounds = getPolygonCenterPoint(mMap, mLatLngCollection);

 mPolylineOptions.color(Color.GREEN);
 mPolylineOptions.add(latLngBounds.southwest);
 mPolylineOptions.add(latLngBounds.northeast);

 mMap.addPolyline(mPolylineOptions);
 mMap.addMarker(new MarkerOptions()
  .position(latLngBounds.southwest));
 mMap.addMarker(new MarkerOptions()
  .position(latLngBounds.northeast));
 mMap.addMarker(new MarkerOptions()
  .position(latLngBounds.getCenter())); 

enter image description here

`

private LatLngBounds getPolygonCenterPoint(GoogleMap mMap, List 
     < LatLng > polygonPointsList) {
      LatLngBounds.Builder builder = new LatLngBounds.Builder();
      for (int i = 0; i < polygonPointsList.size(); i++) {
       builder.include(polygonPointsList.get(i));
       mMap.addMarker(new MarkerOptions()
        .position(polygonPointsList.get(i)));
      }
      LatLngBounds bounds = builder.build();
      return bounds;
     } 

`

1 个答案:

答案 0 :(得分:0)

以下是使用以下几点的边界框:布里斯班,悉尼,墨尔本和 阿德莱德在北上地图上。如您所见,NE,SW角点与绿线的终点一致。仅在一种情况下,边界框不会位于所包含的多边形之外:当多边形是沿纵向线定向并因此与边界框重合的矩形时。

我建议重申您的目标是-如果有帮助,请使用图片。

为防止绿线超出多边形边界,您必须计算绿线与每个遇到的边缘的相交点-这在任意情况下都具有挑战性。

enter image description here

对于任意情况(如下图所示),我怀疑您追捕的是NE-SW对角线的相交部分,例如绿线(实线,无破折号)。

由于有了中心点Z和角点NE,SW,因此可以使用SphericalUtil.computeHeading从Z-NE和Z-SW计算航向。 (Hne,Hsw)。

查找边缘和对角线的相交点最好通过以下方法来解决:首先将线转换为笛卡尔平面-计算交点-然后转换回WGS84椭球体(有错误)。 enter image description here

图片由在线边界框工具提供:https://boundingbox.klokantech.com/