1

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

1 回答 1

2

不幸的是,Leaflet.markercluster 不跟踪图层组(如您的this.itemLayerGeoJSON 图层组)。当将一个组传递给 时clusterLayer.addLayer(),MCG 将从该组中提取所有单独的(即非组)层,并忘记对该组的任何引用。

另请参阅Leaflet.markercluster 问题 #647

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

同样,在向 中添加数据时this.itemLayer,该组会创建新的子图层,但 MCG 不受影响。

然后在调用 时this.clusterLayer.refreshClusters(this.itemLayer),没有一个子层this.itemLayer是 的一部分this.clusterLayer,所以它最终会产生意想不到的效果(也许只是没有做任何特别的事情)。

如果您想更改集群层,请确保将它们从 MCG 中删除(例如简单地 do this.clusterLayer.clearLayers()),然后将新层添加回其中。您还可以删除当前的 MCG 并构建一个新的。

于 2017-03-17T18:54:06.890 回答