如何获得v2 android地图的地图中心?

Igo*_*sky 75 android google-maps-api-2

在谷歌地图为Android v1,MapView有一个方便的方法: getMapCenter().现在我无法弄清楚如何使用此API的v2获取地图中心.我已经仔细阅读了API文档,但没有提到这样的功能.请指教.

谢谢,伊戈尔

Rad*_*eci 183

我有同样的问题.看来你可以通过这种方式获得中心:

mMap.getCameraPosition().target
Run Code Online (Sandbox Code Playgroud)

其中mMap是您活动中的GoogleMap实例.这将返回一个LatLng对象,该对象基本上代表地图的中心.

请注意,该GeoPoint课程不再可用.

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

target是"相机指向的位置".(我用示例代码对它进行了测试,它对我来说没问题)


sho*_*uro 32

我找到了两种方法:

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

 LatLng center = mMap.getCameraPosition().target;
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

我比较了两个答案:

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);
Run Code Online (Sandbox Code Playgroud)

  • 那么哪种方法准确? (3认同)

小智 15

您可以使用 :

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
Run Code Online (Sandbox Code Playgroud)


Com*_*ode 6

获取我在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);

        }
    });
}
Run Code Online (Sandbox Code Playgroud)


fri*_*mle 5

如果您只想获得一次位置(例如,在用户停止平移地图之后),请使用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);
    }
});
Run Code Online (Sandbox Code Playgroud)

或使用 Java 8 lambda:

mMap.setOnCameraIdleListener(() -> {
    LatLng position = mMap.getCameraPosition().target;
    Log.d("MapActivity", "Position: " + position);
});
Run Code Online (Sandbox Code Playgroud)

请注意,注册的侦听setOnCameraChangeListener器被多次调用,并且如文档所述:

这可以像每帧一次那样频繁地调用,并且不应该执行昂贵的操作。