En Google Maps para Android v1 , MapView tenía un método de conveniencia:
getMapCenter()
. Ahora no puedo averiguar cómo obtener el centro del mapa con la v2 de esta API. He examinado la documentación de la API, pero no se menciona tal característica. Por favor avise.
Gracias Igor
fuente
He encontrado dos formas de hacer esto:
1) El más fácil, el primero es usar la propiedad de destino en el objeto CameraPosition del mapa
2) El segundo es usar un objeto 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);
He comparado ambas respuestas:
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);
fuente
Puedes usar :
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
fuente
para obtener el centro del mapa utilicé el método onMapReady () en la actividad, luego usé
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); } }); }
fuente
Si solo desea obtener la posición una vez (por ejemplo, después de que el usuario haya dejado de desplazar el mapa), use
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); } });
o usando una lambda de Java 8:
mMap.setOnCameraIdleListener(() -> { LatLng position = mMap.getCameraPosition().target; Log.d("MapActivity", "Position: " + position); });
Tenga en cuenta que el oyente registrado con
setOnCameraChangeListener
se llama muchas veces y, como dice la documentación :fuente
mejor manera de usar cameraPosition
Java:
kotlin:
googleMap?.cameraPosition?.target?.let { // it is LatLng center }
fuente