传单标记集和可清洗

时间:2017-05-31 22:59:21

标签: javascript leaflet leaflet.markercluster hashable

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

1 个答案:

答案 0 :(得分:0)

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

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

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

一些插件改进的可能性:

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

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