leaflet - GeoJSON 图层更改后刷新标记集群

标签 leaflet leaflet.markercluster

我正在设置一个 GeoJSON 层,并在其之上设置一个 MarkerCluster 层

this.itemLayer = L.geoJson(items, layerOptions)
this.clusterLayer = L.markerClusterGroup()
this.clusterLayer.addLayer(this.itemLayer)
this.clusterLayer.addTo(this.map)

更新后我正在做:

this.itemLayer.clearLayers()
this.itemLayer.addData(newItems)
this.clusterLayer.refreshClusters(this.itemLayer)

但是簇没有出现,itemLayer中的项目也没有出现

解决方案

this.itemLayer.clearLayers()
this.itemLayer.addData(this.props.items)
this.clusterLayer.clearLayers()
this.clusterLayer.addLayer(this.itemLayer)

最佳答案

不幸的是,Leaflet.markercluster 无法跟踪图层组(例如 this.itemLayer GeoJSON 图层组)。当将一组传递给clusterLayer.addLayer()时,MCG 将从该组中提取所有单独(即非组)图层,并忘记对该组的任何引用。

另请参阅Leaflet.markercluster issue #647 .

因此,当使用 this.itemLayer.clearLayers() 清除您的组时,它有效地从 this.itemLayer 中删除所有子项,但是this.clusterLayer不受影响。

this.itemLayer 添加数据时也是如此,该组创建新的子层,但 MCG 不受影响。

然后当调用this.clusterLayer.refreshClusters(this.itemLayer)时,没有 this.itemLayer 的子层属于this.clusterLayer的一部分,所以最终会产生意想不到的效果(也许只是没有做任何特别的事情)。

如果您想更改聚类层,请确保将它们从 MCG 中删除(例如,只需执行 this.clusterLayer.clearLayers() ),然后将新层添加回其中。您还可以删除当前的 MCG 并构建一个新的。

关于leaflet - GeoJSON 图层更改后刷新标记集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862370/

相关文章:

d3.js - 带有 d3fc-label-layout 的传单

javascript - 传单多色折线

leaflet - 获取Leaflet中的div屏幕位置

javascript - 传单第一次不加载网址

javascript - 如何获取当前的 Leaflet map 缩放级别?

javascript - 计算 MarkerCluster 中的元素数量

leaflet.markercluster - Leaflet markercluster - 点击放大然后spiderfy

onclick - Leaflet:将点击事件添加到群集图标

javascript - 在实际需要时点击填写传单弹出窗口

javascript - 传单标记群集标记和群集图标在加载时均可见