我正在设置一个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)
答案 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并构建一个新的。