【问题标题】:How to get center of map for v2 android maps?如何获取 v2 android 地图的地图中心?
【发布时间】:2012-12-03 23:29:43
【问题描述】:

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

谢谢, 伊戈尔

【问题讨论】:

    标签: android google-maps-api-2


    【解决方案1】:

    我遇到了同样的问题。看来您可以通过这种方式获得中心:

    mMap.getCameraPosition().target
    

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

    请注意,GeoPoint 类不再可用。

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

    target 是“相机指向的位置”。 (我用示例代码对其进行了测试,对我来说效果很好)

    【讨论】:

    • 谢谢,我没有意识到 GeoPoint 在 v2 中不可用。我打算使用 VisibleRegion 对象来计算地图显示四个角之间的中点。
    • @Radu Comaneci 如何对 html javascript 做同样的事情?任何想法
    • 很好的答案,但是如果我使用填充例如移动版权谷歌标志,这会受到影响,所以地图的中心也会得到这个填充值
    【解决方案2】:

    我找到了两种方法:

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

    【讨论】:

    • 选项 2 给我的答案与选项 1 完全不同。也许是因为我有一个透明的工具栏?感谢您的提示!
    • 那么哪种方法准确呢?
    • @shontauro 如何对 html javascript 做同样的事情?任何想法
    • javascript 不知道。
    【解决方案3】:

    你可以使用:

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

    【讨论】:

    • 使用此解决方案获得准确性
    【解决方案4】:

    为了获取地图中心,我在活动中使用了 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 注册的侦听器会被多次调用,正如documentation 所述:

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

      【讨论】:

        【解决方案6】:

        使用 cameraPosition 的最佳方式

        java:

        LatLng centerMap = googleMap.getCameraPosition().target;
        

        科特林:

        googleMap?.cameraPosition?.target?.let {
            // it is LatLng center
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多