通过移动地图

时间:2017-12-12 04:39:34

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

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

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

  

注意:此处的关键点是不要对提取标记产生不必要的请求,也不要在客户端内存中保留更多的标记。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您希望根据当前地图位置显示多个标记,因此首先您需要获取Google地图的中心位置并获取该位置的经纬度,以便添加此相机更改侦听器

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 of map。但返回更多lat和long。所以你需要在google map idle根据当前位置和fatch记录调用api时,使用此代码。

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

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

这对你有所帮助,它帮助了我。