Как получить центр карты для Android-карт v2?
В Google Maps для Android v1 у MapView был удобный метод: getMapCenter()
, Теперь я не могу понять, как получить центр карты с v2 этого API. Я просмотрел документацию по API, но о такой возможности не упоминается. Пожалуйста, порекомендуйте.
Спасибо Игорь
6 ответов
У меня такая же проблема. Кажется, вы можете получить центр таким образом:
mMap.getCameraPosition().target
где mMap - это экземпляр GoogleMap из вашей деятельности. Это вернет объект LatLng, который в основном представляет центр карты.
Обратите внимание, что GeoPoint
класс больше не доступен.
Согласно http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
цель - "Местоположение, на которое указывает камера". (Я проверил это с примером кода, и он работал хорошо для меня)
Я нашел два способа сделать это:
1) Самый простой, первый - это использование свойства target в объекте CameraPosition карты
LatLng center = mMap.getCameraPosition().target;
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
:
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
Джава:
LatLng centerMap = googleMap.getCameraPosition().target;
Котлин:
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}