Как получить центр карт для v2 android карт?


в Google Maps для Android v1, MapView имел удобный метод: getMapCenter(). Теперь я не могу понять, как получить map center с v2 этого api. Я просмотрел документацию API, но нет никакого упоминания о такой функции. Посоветуйте, пожалуйста.

спасибо, Игорь

6 61

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);

вы можете использовать :

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();

чтобы получить центр карты я использовал метод 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:

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 lambda:

mMap.setOnCameraIdleListener(() -> {
    LatLng position = mMap.getCameraPosition().target;
    Log.d("MapActivity", "Position: " + position);
});

обратите внимание, что слушатель зарегистрирован с setOnCameraChangeListener - Это называется много раз, и как документация гласит:

это может быть вызвано так часто, как один раз каждый кадр и не должны выполнять дорогостоящие операции.

лучший способ использовать cameraPosition

java:

LatLng centerMap = googleMap.getCameraPosition().target;

Котлин:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}