2017-03-17 56 views
0

我设立一个以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

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

+0

谢谢,我会在本周晚些时候进行测试。 – philk

+0

'this.itemLayer.clearLayers() this.itemLayer.addData(this.props.items) this.clusterLayer.clearLayers() this.clusterLayer.addLayer(this.itemLayer) ' 似乎工作。它看起来对你正确吗@ghybs – philk

+0

对我来说很好看:-) – ghybs