传单markercluster和hashable

Leaflet markercluster and hashable

我有一个集群中有很多标记的地图,带有 markercluster 插件(我创建这要归功于 .JS 文件中的 geojson 作为变量),我正在尝试能够动态修改URL 与 zoom/lat/lng 和 Hashable.js 的哈希,但每次我使用具有超过 40.000 个标记的 geojson 加载我的网站时,markercluster 和 hashable 之间似乎存在冲突。这是我收到的错误:

leaflet-src.js:1905 Uncaught TypeError: Cannot read property 'lat' of undefined
at L.LatLngBounds.intersects (leaflet-src.js:1905)
at NewClass._recursively (leaflet.markercluster-src.js:1763)
at NewClass._recursivelyRemoveChildrenFromMap (leaflet.markercluster-src.js:1712)
at NewClass._moveEnd (leaflet.markercluster-src.js:921)
at NewClass.fire (leaflet-src.js:587)
at NewClass.panBy (leaflet-src.js:2575)
at NewClass._tryAnimatedPan (leaflet-src.js:3770)
at NewClass.setView (leaflet-src.js:2460)
at Object.<anonymous> (index.js:85)
at change (hashable.min.js:1)

我怀疑只要标记加载仍在进行,内部 Leaflet.markercluster (MCG) 状态就没有完全准备好。

由于启用了 chunkedLoading 选项/模式,这为 hashable 留下了空间来启动并尝试更改地图视图,而您的 MCG 仍在评估您的 40k 标记。因此,地图会触发一些 "moveend" 事件,并且 MCG 会尝试显示适当的标记,但由于缺少内部值而失败,因此出现错误消息。

简单的解决方法(如果可以的话)是等待 40k 标记完成加载,然后让 hashable 执行其工作。例如,一旦 addLayers 完成,您可以使用设置为 "ready" 的标志。在可哈希更改中,检查该标志,如果尚未准备好,请稍后检查(例如使用 setTimeout)。

一些插件改进的可能性:

也许确保 MCG 在每个处理块之间始终具有有效的内部状态可能会很有趣,这样地图视图就可以随时更改。但这显然会减慢整体处理时间。

另一种可能性是暂时禁用地图上的 MCG 事件侦听器,这样它就不会在重新处理内部变量时尝试读取其内部变量。