Leaflet 更改GeoJSON层后刷新标记群集
我正在设置一个GeoJSON层,在它上面是一个MarkerCluster层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
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)