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


81

在Android版Google Maps v1中,MapView有一种便捷方法: getMapCenter()。现在,我无法弄清楚如何使用此API的v2获取地图中心。我仔细阅读了API文档,但没有提及此功能。请指教。

谢谢,伊戈尔

Answers:


194

我有同样的问题。看来您可以通过以下方式获得中心:

mMap.getCameraPosition().target

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

请注意,GeoPoint该类不再可用。

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

目标是“相机指向的位置”。(我用示例代码对其进行了测试,对我来说还可以)


1
谢谢,我没有意识到GeoPoint在v2中不可用。我将使用VisibleRegion对象来计算地图显示的四个角之间的中间点。
IgorGanapolsky

@Radu Comaneci如何用html javascript做同样的事情?任何想法
Ankesh库马尔Jaisansaria

很好的答案,但是如果我使用填充(例如,移动版权google符号)会受到影响,因此地图中心也将获得该填充值
sdelvalle57,18年

34

我发现了两种方法:

1)最简单,首先是使用地图的CameraPosition对象中的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);

1
选项2给我的答案与选项1完全不同。也许是因为我有一个透明的工具栏?谢谢你的提示!
Flyingkiwi'3

3
那么哪种方法是正确的?
阿卜杜拉·肖阿布

@shontauro如何用html javascript做同样的事情?任何想法
Ankesh库马尔Jaisansaria

1
javascript不知道。
shontauro

15

您可以使用 :

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

使用此解决方案
可获得

6

为了获得地图中心,我在活动中使用了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);

        }
    });
}

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

或使用Java 8 lambda:

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

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

每个帧可能被调用一次,并且不应执行昂贵的操作。


3

使用cameraPosition的最佳方法

Java的

LatLng centerMap = googleMap.getCameraPosition().target;

科特林:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.