Leaflet 更改GeoJSON层后刷新标记群集

Leaflet 更改GeoJSON层后刷新标记群集,leaflet,leaflet.markercluster,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

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

解决方案
不幸的是,传单.markercluster无法跟踪图层组(如
this.itemLayer
GeoJSON图层组)。将组传递给
clusterLayer.addLayer()
时,MCG将从该组中提取所有单个(即非组)层,并忘记对该组的任何引用

另见


因此,当使用
this.itemLayer.clearLayers()
清除组时,它会有效地从
this.itemLayer
中删除所有子项,但
this.clusterLayer
不受影响

类似地,当向
此.itemLayer
添加数据时,该组将创建新的子层,但MCG不受影响

然后在调用
this.clusterLayer.refreshClusters(this.itemLayer)
时,
this.itemLayer
的子层都不是
this.clusterLayer
的一部分,因此它会产生意想不到的效果(可能只是没有做任何特殊的事情)


如果要更改群集层,请确保将其从MCG中删除(例如,只需执行
this.clusterLayer.clearLayers()
),然后将新层添加回MCG中。您还可以删除当前MCG并构建一个新的MCG。

传单。markercluster无法跟踪图层组(如您的
this.itemLayer
GeoJSON图层组)。将组传递给
clusterLayer.addLayer()
时,MCG将从该组中提取所有单个(即非组)层,并忘记对该组的任何引用

另见


因此,当使用
this.itemLayer.clearLayers()
清除组时,它会有效地从
this.itemLayer
中删除所有子项,但
this.clusterLayer
不受影响

类似地,当向
此.itemLayer
添加数据时,该组将创建新的子层,但MCG不受影响

然后在调用
this.clusterLayer.refreshClusters(this.itemLayer)
时,
this.itemLayer
的子层都不是
this.clusterLayer
的一部分,因此它会产生意想不到的效果(可能只是没有做任何特殊的事情)


如果要更改群集层,请确保将其从MCG中删除(例如,只需执行
this.clusterLayer.clearLayers()
),然后将新层添加回MCG中。您还可以删除当前的MCG并构建一个新MCG。

谢谢,我将在本周晚些时候对其进行测试。
this.itemLayer.clearLayers()this.itemLayer.addData(this.props.items)this.clusterLayer.clearLayers()this.clusterLayer.addLayer(this.itemLayer)
。@ghybsThanks,我将在本周晚些时候对其进行测试。
this.itemLayer.clearLayers()this.itemLayer.addData(this.props.items)this.clusterLayer.clearLayers()this.clusterLayer.addLayer(this.itemLayer)
似乎有效。您觉得它正确吗@ghybs
this.itemLayer.clearLayers()
this.itemLayer.addData(this.props.items)
this.clusterLayer.clearLayers()
this.clusterLayer.addLayer(this.itemLayer)