V2 android haritaları için haritanın merkezi nasıl alınır?


83

Android için Google Maps yılında v1 , MapView bir kolaylık yöntemi vardı: getMapCenter(). Şimdi birlikte harita merkezini nasıl bilemiyorum v2 Bu API arasında. API belgelerini inceledim, ancak böyle bir özellikten söz edilmiyor. Tavsiye lütfen.

Teşekkürler, Igor

Yanıtlar:


196

Ben de aynı sorunu yaşadım. Görünüşe göre merkezi şu şekilde alabilirsiniz:

mMap.getCameraPosition().target

mMap, etkinliğinizin GoogleMap örneğidir. Bu, temel olarak haritanın merkezini temsil eden bir LatLng nesnesi döndürecektir.

Not GeoPointsınıf artık kullanılamaz.

Http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html'ye göre

hedef "Kameranın baktığı konum." (Örnek kodla test ettim ve benim için iyi çalıştı)


1
Teşekkürler, GeoPoint'in v2'de kullanılamadığını bilmiyordum. Harita görüntüsünün dört köşesi arasındaki orta noktayı hesaplamak için VisibleRegion nesnesini kullanacaktım.
— IgorGanapolsky

@Radu Comaneci html javascript ile aynısını nasıl yapabilirim? Herhangi bir fikir
— Ankesh kumar Jaisansaria

Güzel cevap, ancak örneğin telif hakkı google işaretini hareket ettirmek için bir dolgu kullanıyorsam bu durum etkilenir, böylece haritanın merkezi de bu dolgu değerini alır
— sdelvalle57

34

Bunu yapmanın iki yolunu buldum:

1) En kolayı, İlki, Haritanın CameraPosition Nesnesinde target özelliğini kullanmaktır.

 LatLng center = mMap.getCameraPosition().target;

2) İkincisi bir VisibleRegion nesnesi kullanıyor:

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

Her iki cevabı da karşılaştırdım:

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
Seçenek 2, benim için 1. seçeneğe göre tamamen farklı bir cevap veriyor. Belki şeffaf bir Araç Çubuğum olduğundan? Bahşiş için teşekkürler!
— Flyingkiwi

3
peki hangi yöntem doğrudur?
— Abdullah Shoaib

@shontauro Aynı şeyi html javascript ile nasıl yapabilirim? Herhangi bir fikir
— Ankesh kumar Jaisansaria

1
javascript fikrim yok.
— shontauro

15

Kullanabilirsiniz :

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

Doğruluğu bu çözümle alın
— VVB

6

haritanın merkezini almak için etkinlikte onMapReady () yöntemini kullandım, sonra kullandım 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

Konumu yalnızca bir kez almak istiyorsanız (örneğin, kullanıcı haritayı kaydırmayı bıraktıktan sonra), şunu kullanın 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);
    }
});

veya Java 8 lambda kullanarak:

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

Kayıtlı dinleyicinin setOnCameraChangeListenerbirçok kez çağrıldığını ve belgelerin belirttiği gibi:

Bu, her çerçevede bir kez çağrılabilir ve pahalı işlemler gerçekleştirmemelidir.


3

en iyi yol cameraPosition kullan

java:

LatLng centerMap = googleMap.getCameraPosition().target;

kotlin:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.