В Google Maps для Android v1 , MapView был удобный метод:
getMapCenter()
. Теперь я не могу понять, как получить центр карты с v2 этого api. Я просмотрел документацию по API, но там нет упоминания о такой функции. Пожалуйста, порекомендуйте.
Спасибо игорь
android
google-maps-api-2
Игорь Ганапольский
источник
источник
Я нашел два способа сделать это:
1) Самый простой. Первый - использовать свойство target в объекте CameraPosition на карте.
2) Второй использует объект VisibleRegion:
VisibleRegion visibleRegion = mMap.getProjection() .getVisibleRegion(); Point x = mMap.getProjection().toScreenLocation( visibleRegion.farRight); Point y = mMap.getProjection().toScreenLocation( visibleRegion.nearLeft); Point centerPoint = new Point(x.x / 2, y.y / 2); LatLng centerFromPoint = mMap.getProjection().fromScreenLocation( centerPoint);
Я сравнил оба ответа:
Log.d("MapFragment: ", "Center From camera: Long: " + center.longitude + " Lat" + center.latitude); Log.d("Punto x", "x:" + x.x + "y:" + x.y); Log.d("Punto y", "y:" + y.x + "y:" + y.y); Log.d("MapFragment: ", "Center From Point: Long: " + centerFromPoint.longitude + " Lat" + centerFromPoint.latitude);
источник
Вы можете использовать :
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
источник
чтобы получить центр карты, я использовал метод onMapReady () в действии, а затем использовал
googleMap.setOnCameraChangeListener() method to get position of Came
:@Override public void onMapReady(GoogleMap googMap) { googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { Log.i("centerLat",cameraPosition.target.latitude); Log.i("centerLong",cameraPosition.target.longitude); } }); }
источник
Если вы хотите получить позицию только один раз (например, после того, как пользователь перестал панорамировать карту), используйте
setOnCameraIdleListener
:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnCameraIdleListener
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { @Override public void onCameraIdle() { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); } });
или используя лямбда Java 8:
mMap.setOnCameraIdleListener(() -> { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); });
Обратите внимание, что зарегистрированный слушатель
setOnCameraChangeListener
вызывается много раз, и, как указано в документации :источник
лучший способ использовать cameraPosition
Ява:
Котлин:
googleMap?.cameraPosition?.target?.let { // it is LatLng center }
источник