0

我有一个集群中有很多标记的地图,带有markercluster插件(由于.JS文件中的geojson作为变量,我创建了它),并且我试图能够使用zoom/动态修改URL哈希使用 Hashable.js 的 lat/lng 但每次我用超过 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)
4

1 回答 1

0

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

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

如果可以接受,简单的解决方法是等待 40k 标记完成加载,然后让 hashable 执行其工作。例如,您可以使用完成后设置为“就绪”的标志addLayers。在可散列更改中,检查该标志,如果尚未准备好,请稍后检查(例如使用 a setTimeout)。

一些插件改进的可能性:

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

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

于 2017-06-01T11:09:41.660 回答