服务器端谷歌标记聚类 - Python / Django

时间:2009-04-30 01:55:16

标签: python django json google-maps markerclusterer

在尝试使用客户端方法聚类大量Google标记后,我认为我的项目(拥有28,000多名用户的社交网络)无法实现。

是否有任何在服务器端聚类坐标的例子 - 最好是在Python / Django中?

我希望这样做的方法是根据标记的接近度(半径)和缩放级别逐渐索引标记。

换句话说,当新用户注册时,他/她被自动分配给彼此接近的某个“组”标记,从而增加了“组”计数器。发送到服务器的只是少数“组”。仅当地图的缩放级别/比例为1:1时 - 实际用户才会显示在地图上。

这样,客户端每个请求/缩放级别只需处理10-50个标记。

6 个答案:

答案 0 :(得分:2)

This是一种使用服务器端群集的付费服务,但我不确定它是如何工作的。我猜他们只是使用你的数据来生成在每个缩放级别显示的标记。

更新: This tutorial演示了基本的服务器端群集功能。它是用PHP编写的静态地图API,但您可以将它作为起点。

答案 1 :(得分:1)

您可能需要查看维基百科上的DBSCANOPTICS页面,这些页面非常适合在地图上对地点进行聚类。还有一个关于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)

您可以尝试我的服务器端群集django app:

https://github.com/biodiv/anycluster

它提供了一个kmeans和一个网格集群。