83 votes

Comment obtenir le centre de la carte pour les cartes Android v2 ?

Dans Google Maps pour Android v1 MapView disposait d'une méthode de commodité : getMapCenter() . Maintenant, je n'arrive pas à comprendre comment obtenir le centre de la carte avec v2 de cette api. J'ai parcouru la documentation de l'API, mais il n'y a aucune mention d'une telle fonctionnalité. Merci de me conseiller.

Merci, Igor

201voto

Radu Comaneci Points 653

J'ai eu le même problème. Il semble que l'on puisse obtenir le centre de cette manière :

mMap.getCameraPosition().target

où mMap est l'instance GoogleMap de votre activité. Cet objet renvoie un objet LatLng qui représente le centre de la carte.

Il convient de noter que le GeoPoint n'est plus disponible.

Selon le http://developer.Android.com/reference/com/google/Android/gms/maps/model/CameraPosition.html

target est "L'endroit vers lequel pointe la caméra". (Je l'ai testé avec l'exemple de code et cela a fonctionné pour moi)

34voto

shontauro Points 778

J'ai trouvé deux façons de procéder :

1) La plus simple, La première consiste à utiliser la propriété target de l'objet CameraPosition de la carte.

 LatLng center = mMap.getCameraPosition().target;

2) La seconde consiste à utiliser un objet 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);

J'ai comparé les deux réponses :

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

15voto

AAP Points 179

Vous pouvez utiliser :

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

6voto

commonSenseCode Points 9296

Pour obtenir le centre de la carte, j'ai utilisé la méthode onMapReady() dans l'activité, puis j'ai utilisé la méthode 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);

        }
    });
}

5voto

friederbluemle Points 796

Si vous voulez seulement obtenir le poste une fois (par exemple, après que l'utilisateur a cessé d'effectuer un panoramique sur la carte), utilisez l'option 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);
    }
});

ou en utilisant un lambda Java 8 :

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

Notez que l'écouteur enregistré avec setOnCameraChangeListener est appelé plusieurs fois, et comme le la documentation États :

Elle peut être appelée aussi souvent qu'une fois par trame et ne doit pas effectuer d'opérations coûteuses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X