Як отримати центр карти для v2 карт Android?


83

В Google Maps для Android v1 , MapView був зручний метод: getMapCenter(). Зараз я не можу зрозуміти, як отримати центр мапи за допомогою v2 цього api. Я ознайомився з документацією API, але про таку функцію немає жодної згадки. Порадьте, будь ласка.

Дякую, Ігоре

Відповіді:


196

У мене була та сама проблема. Здається, ви можете отримати центр таким чином:

mMap.getCameraPosition().target

де mMap - екземпляр GoogleMap з вашої активності. Це поверне об’єкт LatLng, який в основному представляє центр карти.

Зверніть увагу, що GeoPointклас більше не доступний.

Відповідно до http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html

ціль - "Місце розташування, на яке вказує камера". (Я протестував його за зразком коду, і він у мене працював нормально)


1
Дякую, я не розумів, що GeoPoint був недоступний у версії 2. Я збирався використовувати об’єкт VisibleRegion для обчислення середньої точки між чотирма кутами відображення карти.
Ігор Ганапольський

@Radu Comaneci Як зробити те саме з html javascript? Будь-яка ідея
Ankesh kumar Jaisansaria

Хороша відповідь, але це зачіпається, якщо я використовую відступ, наприклад, для переміщення знака google, захищеного авторським правом, тому центр карти також отримає це значення
відступа

34

Я знайшов два способи зробити це:

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

1
Варіант 2 дає для мене зовсім іншу відповідь, ніж варіант 1. Можливо, тому, що у мене прозора панель інструментів? Дякуємо за підказку!
Flyingkiwi

3
так який метод є точним?
Абдулла Шоайб

@shontauro Як зробити те ж саме з html javascript? Будь-яка ідея
Ankesh kumar Jaisansaria

1
javascript не маю ідеї.
shontauro

15

Ви можете використовувати:

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

Отримайте точність за допомогою цього рішення
VVB

6

щоб отримати центр карти, я використовував метод 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);

        }
    });
}

5

Якщо ви хочете отримати позицію лише один раз (наприклад, після того, як користувач припинив панорамування карти), використовуйте 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, викликається багато разів, і, як зазначено в документації :

Це може називатися так часто, як один раз у кожному кадрі, і не повинно виконувати дорогих операцій.


3

найкращий спосіб використовувати

java:

LatLng centerMap = googleMap.getCameraPosition().target;

kotlin:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.