如何得到 v2机器人地图的中心?

在 Android V1的谷歌地图中,MapView 有一个方便的方法: getMapCenter().现在我不能弄清楚如何得到这个 api 的 V2的地图中心。我仔细阅读了 API 文档,但是没有提到这个特性。请指示。

谢谢, 伊戈尔

60546 次浏览

我也有同样的问题,看起来你可以这样找到中心:

mMap.getCameraPosition().target

其中 mMap 是来自您的活动的 GoogleMap 实例。这将返回一个基本上表示映射中心的 LatLng 对象。

请注意,GeoPoint类不再可用。

根据 http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html

目标是“摄像头指向的位置”(我用示例代码对它进行了测试,它对我来说工作得很好)

我发现了两种方法:

1)最简单的,第一个是在 Map 的 CameraPosition 对象中使用 target 属性

 LatLng center = mMap.getCameraPosition().target;

2)第二种方法是使用 VisibleArea 对象:

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);

为了得到地图的中心,我在 activity 中使用了 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);


}
});
}

你可使用:

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();

如果你只想得到 一次的位置(例如在用户停止平移地图之后) ,使用 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);
}
});

或使用 Java8 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
}