问题
In Google Maps for Android v1, MapView had a convenience method:
getMapCenter()
. Now I cannot figure out how to get map center with v2 of this api. I have perused the API documentation, but there is no mention of such a feature. Please advise.
Thanks, Igor
回答1:
I had the same problem. It seems you can get the center this way:
mMap.getCameraPosition().target
where mMap is the GoogleMap instance from your activity. This will return a LatLng object which basically represents the center of the map.
Note that the GeoPoint
class is not available anymore.
According to http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
target is "The location that the camera is pointing at." (I tested it with the sample code and it worked okay for me)
回答2:
I have found two ways of do this:
1) The easiest, The first is using the target property in the Map's CameraPosition Object
LatLng center = mMap.getCameraPosition().target;
2) The second is using a VisibleRegion object:
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);
I have compared both answers:
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);
回答3:
You can use :
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
回答4:
to get center of map I used onMapReady() method in activity, then used 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:
If you only want to get the position once (e.g. after the user has stopped panning the map), 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);
}
});
or using a Java 8 lambda:
mMap.setOnCameraIdleListener(() -> {
LatLng position = mMap.getCameraPosition().target;
Log.d("MapActivity", "Position: " + position);
});
Note that the listener registered with setOnCameraChangeListener
is called many times, and as the documentation states:
This may be called as often as once every frame and should not perform expensive operations.
回答6:
best way use cameraPosition
java:
LatLng centerMap = googleMap.getCameraPosition().target;
kotlin:
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}
来源:https://stackoverflow.com/questions/13904505/how-to-get-center-of-map-for-v2-android-maps