背景:
Google地图,显示100万个标记(带有纬度/经度的对象)。我们使用Fluster 2进行聚类。
对于缩放级别11到21(假设有21个缩放级别,21个最接近地面),聚类标记(创建聚类标记)的计算时间很好。
我遇到的问题:
缩放11后(当用户从地面缩小时),聚集聚类正在减慢。鉴于标记的数量,大约1,000,000,我需要快速计算方法或转变。
顺便说一下,我对商业解决方案不感兴趣。
答案 0 :(得分: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个项目,O(n)约为1秒,O(nlogn)约为20秒。
如果你不能保留O(n),那么应该考虑一些技巧只使用计算中的部分数据。
答案 1 :(得分:0)
您可以使用空间索引并缩小尺寸。然后,您可以在每个缩放级别分别拉出标记。我编写了一个PHP脚本,其中包含许多空间填充曲线和一个用于学术目的的四元组。我也有一些商业解决方案。
首先,您可以阅读:
当您需要更准确的搜索时,您仍然可以使用它来消除所有位置的最近邻居计算。