我在标记的服务器端实现了一些基于边界的聚类,以显示在我的谷歌地图上。我正在做的是,我有一个函数,每次移动、平移或缩放地图时都会调用它,它获取地图的边界并进行 ajax 调用,然后服务器端脚本运行一个简单的 sql 查询来检索标记并将它们聚集在一起。到目前为止,集群部分运行良好,但有时 getBounds 似乎并没有发送我感觉的正确边界。
就像我可能会在侧面稍微平移一张地图,而曾经有标记的区域现在突然没有标记并且地图是空白的。我检查了 sql 查询,从查询本身来看,它显示的界限与预期的界限截然不同。
看看下面的地区:
第一个显示所有标记。
然而,下面的一个只是向顶部和左侧移动了一点,但一半的区域与上一张图片中的相同,但根本没有标记。我已将问题与地图的 getBounds 功能隔离开来。
这是我的 javascript 代码,它获取边界并进行调用:
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var data = {ne:northEast.toUrlValue(), sw:southWest.toUrlValue(), zoom:map.getZoom()};
//something getting messed up in the code above this point
$.ajax({
type: "POST",
url: 'maps/get-markers',
data: {object:$.toJSON(data)},
dataType: 'json',
success: function(response) {
//code to add markers
}
});
在我的服务器端代码中,这是用于根据坐标获取项目的 php:
$data = Zend_Json::decode(stripslashes($this->_request->getParam('object')));
//retrieve the variables from the GET vars
list($nelat, $nelng) = explode(',', $data['ne']);
list($swlat, $swlng) = explode(',',$data['sw']);
//clean the data
$nelng = (float)$nelng;
$swlng = (float)$swlng;
$nelat = (float)$nelat;
$swlat = (float)$swlat;
$ubound = $swlng > $nelng ? $swlng : $nelng;
$lbound = $swlng > $nelng ? $nelng : $swlng;
$sql = 'SELECT `a`.* FROM `locations` AS `a` WHERE (a.`longitude` > $lbound) AND (a.`longitude` < $ubound) AND';
$ubound = $swlat > $nelat ? $swlat : $nelat;
$lbound = $swlat > $nelat ? $nelat : $swlat;
$sql .= ' (a.`latitude` >= $lbound) AND (a.`latitude` <= $ubound)';
我怀疑它是 javascript 中的 getbounds 函数,但需要尽快修复它。请有任何想法:(