【问题标题】:How to remove the marker from the cluster in google map?如何从谷歌地图的集群中删除标记?
【发布时间】:2014-10-07 18:36:24
【问题描述】:

我已经在谷歌地图中实现了cluster,我想根据复选框选择使用markers 更新地图。

我想根据我在标记中设置的自定义属性从集群中删除标记。

var clust = new MarkerClusterer(map, markers, {maxZoom: 14});

我该怎么做?请帮帮我。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails google-maps ruby-on-rails-4 google-maps-markers


    【解决方案1】:

    对于每个要删除的标记:

     clust.removeMarker(marker);
    

    对于每个要添加的标记:

     clust.addMarker(marker);
    

    【讨论】:

    • 我在标记中包含了一个自定义信息,我想删除那些不包含自定义信息的信息。那么我该怎么做呢?
    • 我实际上想根据复选框选择显示和隐藏标记,所以我尝试删除标记,但在删除时我无法添加它。那么是否可以设置可见的真假,所以它会保留在数组中并被隐藏。
    • 是的,但在我的情况下,我没有删除的标记数据来再次添加它。所以我使用了 setVisible(true/false) 它在复选框切换时出现和消失。我还有一个疑问,那就是我在地图上也有一个搜索框,我应该能够根据搜索过滤标记。我正在努力,如果您能告诉我如何做到这一点,那将会很有帮助。
    • 是的,您必须始终保留所有标记。只需在地图和集群上隐藏/显示。对于搜索输入,我会考虑直接从服务器获取新标记
    【解决方案2】:

    您需要将当前markercluster的map设置为null,然后根据您想要的属性创建新的marker数组,然后再次创建新的markercluster并设置为map。

    var clust = new MarkerClusterer(map, markers, {maxZoom: 14});
    

    关于更新属性

    clust.setMap(null)
    var newclust = new MarkerClusterer(map, newmarkers, {maxZoom: 14});
    newclust.setMap(mapobject)
    

    【讨论】:

    • 我不建议每次都创建对象
    • 根据条件删除和添加标记比较耗时。只需删除所有标记并创建新集群。这样我们只需要迭代一次
    • 是的,你是对的。但有时如果标记的数量太高。由于额外的循环时间,用户体验也会受到影响。这两种策略都有一些副作用:)
    • 三思而后行:您认为集群器如何处理您传递给它的数组?是的,它会循环。
    猜你喜欢
    • 2021-03-26
    • 2019-11-03
    • 2013-03-24
    • 1970-01-01
    • 2016-04-03
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多