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