添加许多标记可以杀死我的谷歌地图 - 我该怎么做?

时间:2009-05-11 06:53:48

标签: php google-maps

我再次被困在这里。我有一个超过120 000坐标的数据库,我需要在我的应用程序中集成的谷歌地图上显示。事情就是这样,我发现简单地循环遍历所有坐标并为每个坐标创建一个单独的标记,并使用addOverlay函数添加它就是杀死浏览器。所以这肯定是错误的方法 - 我已经阅读了一些关于聚类或缩放级别聚集的内容 - 我确实理解在渲染所有标记时没有意义,特别是如果它们中的大部分都不会被看到地图的非渲染部分,除了我不知道如何使其工作。

我如何解决此问题。请各位我在这里需要一些帮助:(

8 个答案:

答案 0 :(得分:8)

这里对各种技术进行了很好的比较http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/

但是,考虑到你的标记量,你肯定想要一种技术只能渲染应该在当前视图中看到的标记(假设这个数字是适度的 - 如果没有链接中的技术可以做出明智的事情)< / p>

答案 1 :(得分:3)

如果您确实拥有超过120,000个项目,则任何客户端聚类或管理器都无法运行。您需要处理服务器端的标记。 有一个很好的讨论here,有一些选项可以帮助你。

更新:我之前在SO上发布了这个,但是this tutorial描述了PHP中的服务器端群集方法。它意味着与Static Maps API一起使用,但我已经构建它,以便每当视图更改时它将返回聚簇标记。虽然每当视图发生变化时都会延迟传输标记,但它的效果非常好。不幸的是,我没有尝试过3000多个标记 - 我不知道它能处理120,000个标记。祝你好运!

答案 2 :(得分:2)

我没有专门针对Google地图做过任何工作,但很多时候,我参与了一个为大型电信公司管理移动办公人员的项目。

他们有类似的功能,他们有地图,他们可以放大他们分配的工作(机器本地而不是网络),我们解决了类似的问题,听起来像你的非常相似。地图上的兴趣点被称为地标,并在地图上用小标记表示,称为地标指针,工人可以选择这些标记来获取文字说明。

在最小变焦时,会有太多的地标指针,使得地图无用。我们做出命令决定将地标指针限制为较小的数字(400)。为了做到这一点,无论缩放级别如何,地图都被划分为20x20矩阵,这为我们提供了400个矩阵元素。

然后,如果地标共享相同的矩阵元素,则应用程序将它们组合在一起并生成单个地标指针,其中描述性文本包含该矩阵元素中所有地标的文本。

这样,从来没有超过400个具有里程碑意义的指针。随着minion的放大,地标指针被重新生成,地标最终会出现在不同的矩阵元素中 - 在这种情况下,它们不再与其他地标结合。

同样,缩小有时会将两个或多个地标合并为一个地标指针。

听起来就像你想要通过“聚类或缩放级别聚合”来实现的那样,尽管如我所说,我对谷歌地图本身没什么经验,所以我不确定这是否可行。但鉴于谷歌的声誉,我怀疑它是。

答案 3 :(得分:1)

我建议您使用标记管理器类such as this one以及现有代码。标记管理器类允许您管理数千个标记并优化内存使用。有各种各样的标记管理器(不只有一个),我建议你使用Google。

答案 4 :(得分:1)

如果您想要非常快速地显示数百甚至数千个标记,这是一个非群集解决方案。您可以使用OverlayView和DocumentFragment的组合。

http://nickjohnson.com/b/google-maps-v3-how-to-quickly-add-many-markers

答案 5 :(得分:0)

如果只有比JS强大的东西......

好吧讽刺:)。

您是否使用过Flash Maps API?凯文麦克唐纳已经成功地使用它来聚类不是120K标记而是1,000,000个标记。查看 Million 标记图: http://www.spatialdatabox.com/million-marker-map/million-marker-map.html

此解决方案中的地图响应性几乎不受影响。如果您有兴趣,可以在这里与他联系:http://www.spatialdatabox.com/sdb-contact-sales.html

答案 6 :(得分:0)

试试这个:

http://googlegeodevelopers.blogspot.com/2009/04/markerclusterer-solution-to-too-many.html

这是一个古老的问题并且已经得到了很多答案,但Stackoverflow更多的是作为参考,我希望这将有助于搜索相同问题的任何人。

答案 7 :(得分:0)

有一个相当简单的解决方案 - 使用HTML5画布虽然听起来很奇怪,但它是加载10,000个标记和标签的最快方法,如果它是普通标记,肯定没有浏览器可以处理。不是传统的标记,而是光标记。

相关问题