我正在设置一个 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/