7

我在谷歌地图上有大约 200 个标记。这不是那么多,使用默认的 google.maps.Marker 工厂绘制它们相对较快。

但在我的情况下,每个标记都会不断改变它的位置,所以我必须对它们进行动画处理,并且必须在每个标记之后绘制轨迹。其他条件是所有标记都位于大约 20x20km 的小区域内。

这就是为什么我要使用一个大画布层并在一个循环中重绘所有标记。我在这里看到三种方式。

  1. 首先是使用google.maps.OverlayView。我们创建绝对定位的画布元素并将其添加到 google.maps 窗格 overlayLayer。在 bounds_changed 事件的情况下,我们重新计算画布位置和大小并重绘所有标记。 实际上,这有点慢 - 如果我们将地图拖得太快,则会出现重绘标记的滞后。

  2. 我们使用相对定位的画布而不是绝对定位。之后我们不对 bounds_changed 事件做任何事情,只在 zoom_changed 事件上重绘画布。 拖动没有延迟(因为我们拖动画布本身),但我们必须计算并创建包含所有标记的画布,最大缩放约为 5000x5000 像素(大量内存)。

  3. 我们根本不使用 OverlayView,取而代之的是,我们只是将整个地图悬停在一个外部画布上并在 bounds_changed 事件上重绘标记。 这里我们不重新计算画布的位置和大小,这样会快一点,但是在控件下和瓦片层上添加画布似乎很棘手,这样地图的移动就不会影响它。

那么你更喜欢哪种方式呢?

更新。唯一合理的方法是第一种。我花了很多时间解决与此相关的任务。所以这是一篇关于在谷歌地图上绘制大量移动标记的文章(俄语,http ://habrahabr.ru/post/195950/ ),这里是比较 4 种不同引擎的演示:http://kasheftin.github .io/gmaps/

4

0 回答 0