2017-05-31 77 views
0

我有一个地图集群中有很多标记,有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) 
+0

您是否在使用Leaflet.markercluster的'chunkedLoading'选项? – ghybs

+0

是的,我是!这是我的群集选项:chunkedloading:true,disableClusterAtZoom 19,siperifyOnMaxZoom:false – NanBlanc

+0

当你禁用'chunkedLoading'时,你仍然有错误吗? – ghybs

回答

0

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

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

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

一些插件改进的可能性:

也许这可能是有趣的,以确保MCG总是有处理的每块之间的有效的内部状态,使地图视图可以随时改变。但是这显然会减缓总体处理时间。

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