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