Django中的服务器端标记聚类
我正在用Django和谷歌地图做一个混合应用,我想知道有没有办法在服务器端用Django/Python来对标记进行聚合。
2 个回答
0
我写了下面的代码来判断一个标记是否足够接近另一个标记,以便进行聚类——当两个聚类图标开始重叠时就算接近。这段代码适用于整个世界地图的所有缩放级别。
问题在于地图投影是非线性的,你不能简单地设置一些 delta_lang
和 delta_lat
的容忍度——这两个值会依赖于纬度。不过,对于本地地图来说,这并不是问题。
如果你想在服务器端处理所有内容,你需要为每个缩放级别计算聚类标记,可能是通过每次的 AJAX 调用,或者一次性打印所有标记。
function isCloseTo($other,$z){//$z is zoomlevel
$delta_lat = abs($this->lattitude - $other->lattitude);
$delta_lng = abs($this->longitude - $other->longitude);
$l = abs($this->lattitude);
$l2 = $l*$l;
$l3 = $l2*$l;
$l4 = $l3*$l;
$factor = 1
+0.0000312*$l
+0.0003604*$l2
-0.000009858*$l3
+0.0000001506*$l4;
$tol_lat = (45.42*exp(-0.6894339*$z)/3)/$factor;
$tol_lng = 21.845*exp(-0.67686*$z)/2;
if ($delta_lat < $tol_lat and $delta_lng < $tol_lng){
return true;
}
else{
return false;
}
}
1
我在我的房地产/租赁网站上实现了Django的服务器端聚类功能;我在这里详细解释了这个过程。