我在谷歌地图上有大约200个标记。这并不是那么多,使用默认的google.maps.Marker工厂绘制它们的速度相对较快。
但是在我的情况下,每个标记都会不断改变它的位置,所以我必须为它们设置动画,我必须在每个标记后绘制轨迹。其他条件是所有标记都位于约20x20km的小区域内。
这就是为什么我要使用一个大的画布层并在一个循环中重绘它们上的所有标记。我在这里看到三种方式。
首先是使用google.maps.OverlayView。我们创建绝对定位的canvas元素并将其添加到google.maps窗格overlayLayer。在bounds_changed事件的情况下,我们重新计算画布的位置和大小,并重绘其上的所有标记。 实际上这有点慢 - 如果我们将地图拖得太快,则会出现重绘标记的延迟。
我们使用相对定位的画布而不是绝对定位。之后我们不对bounds_changed事件做任何事情,只在zoom_changed事件上重绘画布。 拖动没有滞后(因为我们拖动画布本身),但我们必须计算并创建包含所有标记的画布,而对于最大缩放,它大约是5000x5000px(大量内存)。
那你更喜欢哪种方式?
UPD。唯一合理的方法是第一个。我花了很多时间来解决涉及这个问题的任务。所以这里有一篇关于在谷歌地图上绘制大量移动标记的文章(俄语,http://habrahabr.ru/post/195950/),这是一个比较4种不同引擎的演示:http://kasheftin.github.io/gmaps/