【问题标题】:how to show markers according to zoom level of map如何根据地图的缩放级别显示标记
【发布时间】:2019-06-16 13:24:54
【问题描述】:

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

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.
                }


            }
        });

我只想在缩放级别低于这张照片时显示标记

如果缩放是这样的,则禁用它们

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    我建议你使用Marker Clustering

    以下是所需步骤的摘要:

    1. 实现 ClusterItem 以表示地图上的标记。集群 item 以 LatLng 对象的形式返回标记的位置,以及 可选标题或 sn-p。

    2. 添加一个新的 ClusterManager 来对基于集群的项目(标记)进行分组 在缩放级别上。

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

    你可以阅读更多关于它here

    【讨论】:

    • 如果我将使用标记聚类并且如果我缩小它会显示我的标记,就像上面的屏幕截图一样?如果这样会更好,但不是我想要的。
    • 如果超过缩放级别 8,我想禁用所有标记
    • @White 你可以在这里试试这个答案stackoverflow.com/a/46508764/4377954
    • 我已经尝试过了,因为您可以看到我从该答案中获取的问题中的代码
    【解决方案2】:

    我刚刚尝试了您的代码,它确实有效。但请注意,缩放级别 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.
            }
    
        }
    });
    

    【讨论】:

    • 在第二张图片中,我希望禁用标记,如果我放大并且其缩放小于 8,它将显示标记
    • 我会尝试 setoncameramove 监听器并报告它
    • 如果放大,缩放级别会变大,所以我认为您的意思是“大于 8”?正如我所写,第二张图片的缩放级别约为 12,因此您应该检查缩放级别为 12 或 13 而不是 8。cameraPosition.zoom&gt;12
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多