【发布时间】:2012-12-03 23:29:43
【问题描述】:
在 Google Maps for Android v1 中,MapView 有一个方便的方法:
getMapCenter()。现在我无法弄清楚如何使用此 api 的 v2 获取地图中心。我仔细阅读了 API 文档,但没有提到这样的功能。请指教。
谢谢, 伊戈尔
【问题讨论】:
在 Google Maps for Android v1 中,MapView 有一个方便的方法:
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) 最简单的,首先是在Map的CameraPosition Object中使用target属性
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() 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);
}
});
}
【讨论】:
如果您只想获得位置一次(例如,在用户停止平移地图之后),请使用setOnCameraIdleListener:
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 注册的侦听器会被多次调用,正如documentation 所述:
这可能每帧调用一次,并且不应执行昂贵的操作。
【讨论】:
使用 cameraPosition 的最佳方式
java:
LatLng centerMap = googleMap.getCameraPosition().target;
科特林:
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}
【讨论】: