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

时间:2017-03-17 16:14:12

标签: 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)

1 个答案:

答案 0 :(得分:1)

不幸的是,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并构建一个新的。