2012-06-11 28 views
1

我有一张地图,在这个地图上我画了14000个标记。如果地图边界被设置为绘制标记的整个区域,绘制标记需要很长时间(大约8秒)。但是,如果我放大绘制几个/没有标记的区域,那么绘制14000个标记的速度非常快,例如2-3秒。我是否可以暂时禁用Google Maps V3中的标记呈现功能?

我认为这是因为最耗时的过程是实际将标记图标绘制到图块,并且由于标记一次添加一个,所以地图在很短的时间间隔内被渲染很多次。

因此,我想知道是否可以在添加图标时禁用地图更新/渲染,然后在添加所有图标时重新启用它。

与类似的效果的任何解决方案,是值得欢迎的

+0

我看不到为什么将14000个标记添加到他们全部可见的地图中甚至是远程有用。这是您需要思考的标记数量,当然不是如何加快性能? –

+0

实现集群,这是另一个问题。目前,一行代码禁用地图渲染,然后一行代码重新启用它将在400%的速度增加 – Hubro

+0

@AndrewLeach:忘了引用你我在上面的评论 – Hubro

回答

1

是的,你可以创造出很多的标记,而不是将它们与地图相关联。然后,在它们中的每一个上调用setMap()函数。

你也可以只做这个落在目前的范围内。

你有没有考虑标记聚类来减少标记的数量?

看看你的代码会很有用。

+0

那么,调用' setMap()'一个接一个地做我正在做的事情,它让地图开始在第一个标记之后刷新它的tile。我真的只需要一种方法来在每个标记上调用setMap()时“自动关闭”地图自动渲染,然后在添加所有标记时只渲染一次 – Hubro

+1

要添加的唯一方法标记映射在INDIVIDUAL实例化过程中(使用map属性设置为NULL的对象)或INDIVIDUALLY在每个标记上调用setMap()。没有办法同时添加所有标记。你所说的没有任何意义。当您向它们添加标记时,瓷砖不刷新。 – Adam

+0

@Adam:我所知道的是:当我**看**时,标记会被添加,它比首先放大任意位置的时间长10倍。我必须假设这是因为他们被添加时被一个一个地画出来,而不是在他们全部被添加时被一次画出。 – Hubro

2

渲染时间下降,因为当您放大更紧时,api v3不会添加14 000。它仅添加位于边缘周围的图块图层缓冲区(可能是一个或两个图块)中的当前边界PLUS标记中的标记。

我是那种为你的意思的困惑,但也许你要添加的标记在地图已经加载之后才:

google.maps.event.addListenerOnce(map,'tilesloaded',addMarkersFunction); 

之所以这么说,14个000个标记为A很多标记。当你有这么多的时候,聚类标记甚至不会被我认为是可选的。

+0

对不起,但你误解了我的意图。它需要这么长时间的原因(正如我在我的问题中解释的),地图**反复更新** **而我正在添加我的标记。当我放大的时候,时间缩短的原因是地图不经常渲染/刷新,因为大部分正在添加的标记都是,如您所说,不在视口的边界内,因此不会强制要刷新的图块。我只需要一种方法来阻止地图在添加标记时不断自动刷新瓷砖 – Hubro

0

尝试使用Google Maps API v3 Utility Library中的MarkerManager库。它是为这样的问题设计的。虽然文档方面没有太多,但在源代码中有几个有用的例子和大量的评论。

+0

很高兴知道,谢谢,但未回答此问题 – Hubro

+0

正确 - 您要查找的答案是“否”。有一些技巧可以禁用画布标记(将“draggable”设置为true),但是如果没有画布标记,那么您映射的许多标记几乎不可用。 –