我使用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()));
`
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;
}
`
答案 0 :(得分:0)
以下是使用以下几点的边界框:布里斯班,悉尼,墨尔本和 阿德莱德在北上地图上。如您所见,NE,SW角点与绿线的终点一致。仅在一种情况下,边界框不会位于所包含的多边形之外:当多边形是沿纵向线定向并因此与边界框重合的矩形时。
我建议重申您的目标是-如果有帮助,请使用图片。
为防止绿线超出多边形边界,您必须计算绿线与每个遇到的边缘的相交点-这在任意情况下都具有挑战性。
对于任意情况(如下图所示),我怀疑您追捕的是NE-SW对角线的相交部分,例如绿线(实线,无破折号)。
由于有了中心点Z和角点NE,SW,因此可以使用SphericalUtil.computeHeading
从Z-NE和Z-SW计算航向。 (Hne,Hsw)。
查找边缘和对角线的相交点最好通过以下方法来解决:首先将线转换为笛卡尔平面-计算交点-然后转换回WGS84椭球体(有错误)。
图片由在线边界框工具提供:https://boundingbox.klokantech.com/。