trazar - ¿Cómo obtener el centro del mapa para los mapas de Android v2?
mapview android studio (6)
En Google Maps para Android v1 , MapView tenía un método conveniente: getMapCenter()
. Ahora no puedo averiguar cómo obtener el centro del mapa con v2 de esta api. He examinado la documentación de la API, pero no se menciona dicha característica. Por favor avise.
Gracias igor
He encontrado dos maneras de hacer esto:
1) El más fácil, el primero es usar la propiedad de destino en el objeto CameraPosition del mapa
LatLng center = mMap.getCameraPosition().target;
2) El segundo está usando 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);
Puedes usar :
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
Si solo desea obtener la posición una vez (p. Ej., Después de que el usuario haya dejado de explorar el mapa), use setOnCameraIdleListener
:
mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
LatLng position = mMap.getCameraPosition().target;
Log.d("MapActivity", "Position: " + position);
}
});
o usando un Java 8 lambda:
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 indica la documentation :
Esto se puede llamar tan a menudo como una vez en cada fotograma y no debe realizar operaciones costosas.
Yo tuve el mismo problema. Parece que puedes obtener el centro de esta manera:
mMap.getCameraPosition().target
donde mMap es la instancia de GoogleMap de su actividad. Esto devolverá un objeto LatLng que básicamente representa el centro del mapa.
Tenga en cuenta que la clase GeoPoint
ya no está disponible.
Según http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
el objetivo es "La ubicación a la que apunta la cámara". (Lo probé con el código de ejemplo y funcionó bien para mí)
mejor manera de usar cameraPosition
Java:
LatLng centerMap = googleMap.getCameraPosition().target;
kotlin
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}
para obtener el centro del mapa utilicé el método onMapReady () en la actividad, luego 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);
}
});
}