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.