GeoJSON 层更改后刷新标记簇
Refresh marker clusters after GeoJSON layer has changed
我正在设置一个 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)
不幸的是,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
的子层的none是this.clusterLayer
的一部分,所以最后会出现意想不到的效果(可能什么都不做)特别)。
如果要更改群集层,请确保将它们从 MCG 中删除(例如,只需执行 this.clusterLayer.clearLayers()
),然后将新层添加回其中。您也可以删除当前的 MCG 并构建一个新的。
我正在设置一个 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)
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
的子层的none是this.clusterLayer
的一部分,所以最后会出现意想不到的效果(可能什么都不做)特别)。
如果要更改群集层,请确保将它们从 MCG 中删除(例如,只需执行 this.clusterLayer.clearLayers()
),然后将新层添加回其中。您也可以删除当前的 MCG 并构建一个新的。