在 GeoJSON 图层更改后刷新标记簇



我正在设置一个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问题#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 并构建一个新的 MCG。