在Google Maps for Android v1中,MapView有一个方便的方法:
谢谢, Igor
getMapCenter()
。现在我无法弄清楚如何使用此API的v2获取地图中心。我已经浏览了API文档,但没有提到这样的功能。请给予建议。谢谢, Igor
getMapCenter()
。现在我无法弄清楚如何使用此API的v2获取地图中心。我已经浏览了API文档,但没有提到这样的功能。请给予建议。我有同样的问题。看起来你可以通过以下方式找到中心:
mMap.getCameraPosition().target
mMap是你的活动中GoogleMap实例。这将返回一个LatLng对象,基本上代表地图的中心。
请注意,GeoPoint类不再可用。
根据 http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
target是“相机指向的位置”。(我使用示例代码进行了测试,对我来说可以正常工作)
我找到了两种方法来做到这个:
1)最简单的方法是使用地图相机位置对象中的目标属性(target property)
LatLng center = mMap.getCameraPosition().target;
2) 第二种方法是使用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);
我已经比较了两个答案:
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);
latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
为了获取地图的中心点,我在活动中使用了onMapReady()方法,然后使用googleMap.setOnCameraChangeListener()
方法来获取摄像机的位置:
@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);
}
});
}
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);
}
});
或者使用Java 8 lambda表达式:
mMap.setOnCameraIdleListener(() -> {
LatLng position = mMap.getCameraPosition().target;
Log.d("MapActivity", "Position: " + position);
});
setOnCameraChangeListener
注册的监听器会被多次调用,正如文档所述:
此方法可能在每帧中都被调用,不应执行昂贵的操作。
最佳使用相机位置的方法
Java:
LatLng centerMap = googleMap.getCameraPosition().target;
kotlin:
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}