传单markercluster和可排序
问题描述:
我有一个地图集群中有很多标记,有markercluster插件(这是我在.JS文件中创建的感谢geojson作为变量),我试图能够动态地使用Hashable.js修改网址哈希值时使用zoom/lat/lng,但每次我使用超过40.000个标记的geojson加载我的网站时,它似乎在markercluster和hashable之间存在一个限制。这是我得到的错误:传单markercluster和可排序
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
选项/模式,这留下了可排队的空间以尝试更改地图视图,而您的MCG仍处于评估40k标记的过程中。因此,地图触发了一些事件,MCG尝试显示适当的标记,但由于缺少内部值而失败,因此会显示错误消息。
如果可以接受,简单的解决方法是等待40k标记完成加载,然后让hashable执行其工作。例如,一旦addLayers
已完成,您可以使用设置为“就绪”的标志。在可更改的内容中,检查该标志,如果尚未准备好,稍后检查(例如使用setTimeout
)。
一些插件改进的可能性:
也许这可能是有趣的,以确保MCG总是有处理的每块之间的有效的内部状态,使地图视图可以随时改变。但是这显然会减缓总体处理时间。
另一种可能性是暂时禁用地图上的MCG事件侦听器,以便在重新处理它时不尝试读取其内部变量。
您是否在使用Leaflet.markercluster的'chunkedLoading'选项? – ghybs
是的,我是!这是我的群集选项:chunkedloading:true,disableClusterAtZoom 19,siperifyOnMaxZoom:false – NanBlanc
当你禁用'chunkedLoading'时,你仍然有错误吗? – ghybs