Ответ 1
Для API Android Карт Google вы можете получить границы с помощью...
С помощью ссылки на карту введите Projection
на getProjection(). И,
для перевода между расположением экрана и географическими координатами используется проекция.
Итак, из проекции мы можем использовать getVisibleRegion() и получить VisibleRegion карты, которая содержит LatLngBounds, который является классом, который содержит 2 LatLng
переменные, один для северо-восточного угла границы и один для юго-западного угла.
Итак, код должен выглядеть примерно так:
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
LatLng northeast = bounds.northeast;
LatLng southwest = bounds.southwest;
Context context = getApplicationContext();
CharSequence text = "ne:"+northeast+" sw:"+southwest;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
= - = - = - = - = - = Редактирование:
Возможно, я был слишком наивен, учитывая, что только NE и SW могут решить эту проблему, но только в специальном случае, когда пользователь не поворачивал карту или не наклонялся для 3D-карты.
Поэтому вместо этого вы можете просто захватить VisibleRegion
, который предоставил 4 переменные, farRight, farLeft, nearRight, nearLeft, каждый из которых представляет 4 соединения этой области.
Затем мы можем вычислить ширину и высоту области для этих 4 точек и выбрать меньшую (ну, иногда ширина может быть больше высоты, я думаю.)
И для вычисления мы можем просто использовать функцию Location.distanceBetween(x1,y1,x2,y2,result)
...
который делает код похожим на следующее:
VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion();
LatLng farRight = visibleRegion.farRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng nearLeft = visibleRegion.nearLeft;
float[] distanceWidth = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceWidth
);
float[] distanceHeight = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceHeight
);
float distance;
if (distanceWidth[0]>distanceHeight[0]){
distance = distanceWidth[0];
} else {
distance = distanceHeight[0];
}