Как получить центр карт для v2 android карт?
в Google Maps для Android v1, MapView имел удобный метод:
getMapCenter()
. Теперь я не могу понять, как получить map center с 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) Самый простой, первый использует целевое свойство в объекте 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);
чтобы получить центр карты я использовал метод onMapReady () в activity, а затем использовал
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 lambda:
mMap.setOnCameraIdleListener(() -> { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); });
обратите внимание, что слушатель зарегистрирован с
setOnCameraChangeListener
- Это называется много раз, и как документация гласит:это может быть вызвано так часто, как один раз каждый кадр и не должны выполнять дорогостоящие операции.