【问题标题】:Fetch markers on Google Map with the moving of map随着地图的移动在谷歌地图上获取标记
【发布时间】:2017-12-12 04:39:34
【问题描述】:

我正在开发一个安卓应用程序,我想在谷歌地图上显示一些标记。我想在用户移动地图时获取标记,而且我有大量标记存储在基于位置的数据库中。要获取标记,我必须通过地图相机上的当前中间位置请求。

所以我要问的是,是否有更好的标准来请求标记,基于用户的移动和地图的当前缩放级别。这里我需要一些优化,比如我不需要再次请求相同的标记。

注意:这里的关键是不要发出不必要的请求来获取标记,也不要在客户端内存中保留更多的标记。

【问题讨论】:

    标签: java android google-maps google-maps-android-api-2


    【解决方案1】:

    您可以通过覆盖 GoogleMap.OnCameraMoveStartedListener、GoogleMap.OnCameraMoveListener、GoogleMap.OnCameraMoveCanceledListener、GoogleMap.OnCameraIdleListener 来获取当前中间摄像头位置。

    @Override
        public void onCameraIdle() {
            double nextlatitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().latitude;
            double nextlongitude = mGoogleMap.getProjection().getVisibleRegion().latLngBounds.getCenter().longitude;
    
            System.out.println("Location Next : "+nextlatitude+"  "+nextlongitude);
        }
    
        @Override
        public void onCameraMoveCanceled() {
    //        Toast.makeText(getActivity(), "Camera movement canceled.",
    //                Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onCameraMove() {
    
        }
    
        @Override
        public void onCameraMoveStarted(int reason) {
    //        if (reason == GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE) {
    //            Toast.makeText(getActivity(), "The user gestured on the map.",
    //                    Toast.LENGTH_SHORT).show();
    //        } else if (reason == GoogleMap.OnCameraMoveStartedListener
    //                .REASON_API_ANIMATION) {
    //            Toast.makeText(getActivity(), "The user tapped something on the map.",
    //                    Toast.LENGTH_SHORT).show();
    //        } else if (reason == GoogleMap.OnCameraMoveStartedListener
    //                .REASON_DEVELOPER_ANIMATION) {
    //            Toast.makeText(getActivity(), "The app moved the camera.",
    //                    Toast.LENGTH_SHORT).show();
    //        }
        }
    

    您可以通过以下方式获取当前缩放级别:

    map.getCameraPosition().zoom
    

    【讨论】:

      【解决方案2】:

      您想根据当前地图位置显示多个标记,因此首先您需要获取谷歌地图的中心位置并获取该位置的纬度和经度,因此添加此相机更改监听器

      View viewMap=mapFragment.getView();
      googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
                  @Override
                  public void onCameraChange(CameraPosition cameraPosition) {
                      Point point=new Point();
                      point.set((int)viewMap.getX(),(int)viewMap.getY());
                      latLng=googleMap.getProjection().getVisibleRegion().latLngBounds.getCenter();
                  }
              });
      

      这将显示地图的当前中心位置 lat long。但返回更多的 lat 和 long。所以当谷歌地图空闲时需要根据当前位置和fatch记录调用api,使用此代码。

      googleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
              @Override
              public void onCameraIdle() {
                  Log.e("bug"," location is "+latLng.latitude+ ", "+latLng.longitude);
                 //call api
              }
          });
      

      获取记录后首先清除谷歌地图,以便从地图中删除所有添加的标记。 googleMap.clear(); 并在地图上添加新标记。

      这会帮助你,它会帮助我。

      【讨论】:

        猜你喜欢
        • 2017-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 2012-01-10
        • 2015-04-08
        • 1970-01-01
        相关资源
        最近更新 更多