如何根据地图的缩放级别显示标记

时间:2019-06-16 13:24:54

标签: android google-maps

我在地图上使用了很多标记,如果缩小地图,将会有很多大标记遮挡其他地图对象的视图。我想要的是仅在缩放级别较小时才显示标记。我用了它,但是不起作用:

final List<Marker> list = new ArrayList<>();

        final Marker marker = mMap.addMarker(new MarkerOptions()
                .position(latLng)
                .icon(markerIcon)
                .title(title));

        list.add(marker);


        mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
            @Override
            public void onCameraChange(CameraPosition cameraPosition) {
                for(Marker m:list){

                    m.setVisible(cameraPosition.zoom>8);
                    //8 here is your zoom level, you can set it as your need.
                }


            }
        });

我只想在缩放级别小于这张照片的情况下显示标记

enter image description here

如果缩放是这样,请禁用它们  enter image description here

2 个答案:

答案 0 :(得分:1)

我建议您使用Marker Clustering

enter image description here

以下是所需步骤的摘要:

  1. 实施ClusterItem以表示地图上的标记。集群 item以LatLng对象的形式返回标记的位置, 可选的标题或摘录。

  2. 添加一个新的ClusterManager来将基于群集项(标记)分组 缩放级别。

  3. 将地图的OnCameraIdleListener()设置为ClusterManager,因为 ClusterManager实现侦听器。
  4. 如果要添加特定功能以响应标记     click事件,将地图的OnMarkerClickListener()设置为         ClusterManager,因为ClusterManager实现了侦听器。
  5. 将标记输入到ClusterManager中。

您可以详细了解here

答案 1 :(得分:0)

我刚刚尝试了您的代码,它实际上可以工作。但是请注意,缩放级别8距离还很远。我在第二张屏幕截图中重新创建了该扇区,它的缩放级别实际上约为12。

还请注意,不建议使用OnCameraChangeListener,而应改用OnCameraMoveListener。

mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
    @Override
    public void onCameraMove() {
        CameraPosition cameraPosition = mMap.getCameraPosition();
        for(Marker m:list){

            m.setVisible(cameraPosition.zoom>8);
            //8 here is your zoom level, you can set it as your need.
        }

    }
});