【问题标题】:Map with more than 1 million markers, issue at high zoom level具有超过 100 万个标记的地图,以高缩放级别发布
【发布时间】:2011-09-11 15:07:26
【问题描述】:

上下文:

带有 100 万个标记(具有纬度/经度的对象)要显示的 Google 地图。我们使用 Fluster 2 进行聚类。

对于缩放级别 11 到 21(假设有 21 个缩放级别,并且 21 是最接近地面的)聚类标记(创建聚类标记)的计算时间很好。

我遇到的问题:

在缩放 11 后(当用户从​​地面缩小时),聚集聚类速度变慢。考虑到标记的数量,大约 1,000,000,我需要快速计算方法或周转。

顺便说一句,我对商业解决方案不感兴趣。

【问题讨论】:

标签: google-maps hierarchical-clustering


【解决方案1】:

Fluster 2 是一个客户端集群的 javascript,对吗?

拥有数百万个点,如果可能,您应该考虑绝对使用服务器端集群,甚至提前使用集群前点。

这个话题和这个有关 https://stackoverflow.com/questions/986852/clustering-coordinates-on-server-side

有了这么多点,您就可以进行简单的网格聚类了。 这是谷歌提到的快速技术 http://code.google.com/intl/da-K/apis/maps/articles/toomanymarkers.html#gridbasedclustering

我写了一篇关于网格聚类的博客,其中包含 C# 中的示例代码 http://kunuk.wordpress.com/2011/09/15/clustering-grid-cluster.

有趣的问题:) 在 jon kleinberg 的算法设计书中提到,计算 1.000.000 个项目大约需要 1 秒 O(n) 和 20 秒 O(nlogn)。

如果不能保持 O(n),则应考虑一些技巧,仅在计算中使用部分数据。

【讨论】:

  • 很有趣,但是当您可以使用 r-tree 时,是否有理由使用四叉树或网格?我的回答是关于曲线。
【解决方案2】:

您可以使用空间索引并减少维度。然后,您可以在每个缩放级别上分别拉标记。我为学术目的编写了一个包含许多空间填充曲线和四键的 PHP 脚本。我也有一些商业解决方案。

首先你可以阅读:

当您需要更准确的搜索时,您仍然可以使用它来消除所有位置的最近邻计算。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2017-10-14
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多