在尝试使用客户端方法聚类大量Google标记后,我认为我的项目(拥有28,000多名用户的社交网络)无法实现。
是否有任何在服务器端聚类坐标的例子 - 最好是在Python / Django中?
我希望这样做的方法是根据标记的接近度(半径)和缩放级别逐渐索引标记。
换句话说,当新用户注册时,他/她被自动分配给彼此接近的某个“组”标记,从而增加了“组”计数器。发送到服务器的只是少数“组”。仅当地图的缩放级别/比例为1:1时 - 实际用户才会显示在地图上。
这样,客户端每个请求/缩放级别只需处理10-50个标记。
答案 0 :(得分:2)
This是一种使用服务器端群集的付费服务,但我不确定它是如何工作的。我猜他们只是使用你的数据来生成在每个缩放级别显示的标记。
更新: This tutorial演示了基本的服务器端群集功能。它是用PHP编写的静态地图API,但您可以将它作为起点。
答案 1 :(得分:1)
您可能需要查看维基百科上的DBSCAN和OPTICS页面,这些页面非常适合在地图上对地点进行聚类。还有一个关于Cluster Analysis的页面,其中显示了您可以使用的所有可能的算法,大多数使用您选择的语言实现这些算法都很简单。
有28k +点,你可能想跳过django并直接跳转到C / C ++,当然不希望这个实时计算以响应网络请求。
答案 2 :(得分:0)
一种方法是根据缩放级别定义一个单位大小的网格。所以你通过lat,lon到一个小数位来收集网格中的所有项目。一个例子是42.2x73.4。所以42.2003x73.4021的一个点落在那个网格单元中。该单元格受42.2x73.3和42.2x73.5的限制。
如果网格单元格中有一个或多个点,则将标记放在该网格的中心。
然后连接zoomend事件并相应地更改网格大小,并重绘标记。
http://code.google.com/apis/maps/documentation/reference.html#GMap2.zoomend
答案 3 :(得分:0)
您可以根据缩放级别简单地删除小数。这对你有用吗?
我们的地理位置索引基于morton数: http://www.rooftopsolutions.nl/article/231(无耻的自我推销)。
如果你想要比10基座系统更精确的话,莫顿数将允许你增加2基数系统的缩放级别,只需做类似的事情:
GROUP BY(莫顿XOR(-precision))
精度越高,聚集的项目就越多。
答案 4 :(得分:0)
我正在使用Django和Python来集中房地产和租赁列表,可以找到源here。
希望它有所帮助!
答案 5 :(得分:0)