【问题标题】:Moved marker disappears when using Marker Clusterer使用 Marker Clusterer 时移动的标记消失
【发布时间】:2025-12-23 07:20:08
【问题描述】:

我有一个具有大量标记的应用程序(因此希望使用 Marker Clusterer),但我希望允许用户四处移动标记。不幸的是,标记在移动并缩小/放大后消失了。确切地说,这些是重现问题的步骤:

  1. 创建所有标记/将它们添加到标记聚类器对象。
  2. 放大以查看单个标记。
  3. 将标记移至新位置。
  4. 缩小直到聚类开始(并将移动的标记与至少一个其他标记分组)
  5. 重新放大以查看被移动的标记。

我希望标记在放大后仍然存在,但事实并非如此。在第 3 步之后,标记仍然可见 - 它仅在缩小然后重新缩小后消失。聚类仍然正确计算标记(缩小时它出现在群集总数中),但标记不再出现。

我已尝试使用最新版本的 MarkerClusterer 和 MarkerClustererPlus,我正在处理地图 API 的 v3。此外,我有一个事件监听器,它在标记 dragend 发生后调用集群上的 repaint(认为 repaint 会导致标记被正确放置)。

[编辑] 可以在here 找到一个演示该问题的最小示例(基于 Marker Clusterer 示例)。与this example 相比,唯一改变的是包含javascript 库(制作绝对链接)的行,以及将draggable: true 添加到标记选项的行。按照上面的 5 个步骤应该可以重现问题。

【问题讨论】:

  • 我有两个愚蠢的想法。首先,尝试 google.maps.event.trigger(map, 'resize')。如果您保留对所有标记的引用,则第二个想法可能会起作用:在 zoomChanged 的​​侦听器中,对于所有标记,将其设为 setVisible(true)。但是,如果“大量”确实很大,这是不切实际的。
  • 您建议何时触发触发器?在 dragend 事件监听器中?
  • 我不确定什么会起作用,因为我还没有复制你的页面和缺陷在这里。如果完成拖动后标记始终仍然可见,我说将任何侦听器添加到 dragend 是没有意义的。我认为因为消失与缩小和缩小有关,请尝试添加以下行: google.maps.event.addListener(map, 'zoomChanged', function() { trigger resize / setVisible });
  • 调整大小触发器似乎不起作用,并且标记在拖动后仍然可见的事实让我觉得可见性不是问题。我认为这与与标记关联的地图有关(据我所知,这就是 MarkerClusterer 隐藏/显示事物的方式)。我在问题中添加了一个示例。
  • 还有其他情况下出现意外行为。例如,缩小两次,美洲没有任何显示。北美有十多个。我真的不信任集群。我放弃了你的问题,对不起:(

标签: javascript html google-maps google-maps-api-3 markerclusterer


【解决方案1】:

这是已向 google maps api 团队报告的错误(问题 #167)。见here

它在任何时候由 setMap(map) 触发,然后是任何类型的标记移动(包括动画),然后是 setMap(null)。此时标记无法再次显示。

【讨论】: