【问题标题】:Google Maps - Grid based clustering谷歌地图 - 基于网格的聚类
【发布时间】:2012-07-05 08:42:33
【问题描述】:

在此页面上https://developers.google.com/maps/articles/toomanymarkers

它说这是最简单的集群可能,但我找不到任何客户端解决方案。有谁知道免费的开源、基于网格的谷歌地图标记聚类客户端解决方案?我不想要 MarkerClusterer。

我没有找到它,所以我开始编写自己的解决方案。第一个明显的要求是它必须快速加载至少 1000 个标记在地图上。每次放大、移动等,都会重复聚类的过程/功能。网格块可自定义,默认值为 50*50 像素。

下图显示了结果应该是什么样子。

我遇到了算法问题,现在我能想到的就是遍历每个网格的所有标记并询问它是否在边界内,然后增加网格 ++ 数组。这显然不能那样做。应该有一些哈希或只需要一次迭代所有标记的东西,我会知道特定于网格的标记属于哪个。

我希望有人能给我一个关于我所追求的算法的提示。谢谢!

【问题讨论】:

  • 客户端集群的问题在于它违背了集群的目的。使用客户端集群,您仍然需要将有关每个标记的信息传输到客户端(到浏览器),并且客户端必须努力完成所有数字运算。除非您有充分的理由在客户端进行集群,否则我建议服务器端集群更有效。如果您在服务器上进行集群,然后仅将尽可能少的数据传输到客户端,则应该在任何浏览器上快速加载,即使在 IE 上也是如此。 :-)
  • 我想做插件,就像 MarkerClusterer 一样。 [链接]google-maps-utility-library-v3.googlecode.com/svn/trunk/… MarkerClusterer 是所有客户端,对 1000 个标记的工作速度非常快。这个想法一定是一样的,只需要遍历一遍标记数组。定义了 5000 个标记的 JS 文件大小约为 100kb,这不是问题。
  • 1000 个标记是“小东西”。 :-) 在此处查看具有 40,000 个标记的服务器端解决方案:maps.forum.nu/server_side_clusterer 和此处:maps.forum.nu/server_side_clusterer/index2.php
  • 这很好。但我想要的只是 1000 个标记的客户端网格聚类器。简单......对我来说很难做到,没有一些聪明的算法建议。

标签: google-maps google-maps-api-3 google-maps-markers


【解决方案1】:

似乎 geohash 是您问题的答案,您甚至在问题中提到了该解决方案。这里解释得很好:

http://blog.trifork.com/2013/08/01/server-side-clustering-of-geo-points-on-a-map-using-elasticsearch/

我实际上正在探索为 Google Maps API v3 开发类似的聚类算法。如果我真的可以使用它,我会发布更多。

【讨论】:

  • 实际上,MarkerClusterer 使用未记录的(嗯,记录在代码中但不是文档页面)选项来满足我的需要: * 'minimumClusterSize': (number) 标记的最小数量* 在标记被隐藏并显示计数之前进行聚类。
【解决方案2】:

您可以使用 geohash 或空间填充曲线来减少维度并重新排序和散列标记。在服务器端,您可以使用点和空间索引数据结构,但您也可以手动计算 geohash。寻找 xkcd 互联网地图漫画和希尔伯特曲线,看看它是如何工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2012-12-17
    • 2011-04-13
    • 2013-01-08
    • 2023-04-02
    相关资源
    最近更新 更多