以下问题:我有一个带引脚坐标(lat,lng)的数据库表。我将我的地图当前边界发送到后端,从数据库中选择可见的引脚。我的代码(cakePHP)如下:
private function getMapData($level = 1)
{
$x1 = $this->request->query('x1');
$x2 = $this->request->query('x2');
$y1 = $this->request->query('y1');
$y2 = $this->request->query('y2');
if ($x1 > $x2)
{
$tmp = $x1;
$x1 = $x2;
$x2 = $tmp;
}
if ($y1 > $y2)
{
$tmp = $y1;
$y1 = $y2;
$y2 = $tmp;
}
return $this->Map->find('all',
array(
'fields' => array(
'Map.lat',
'Map.lng',
'Map.level_number'
),
'conditions' => array('Map.level_number' => $level,
'Map.lat BETWEEN ? AND ?' => array($x1, $x2),
'Map.lng BETWEEN ? AND ?' => array($y1, $y2),
),
'group' => 'Map.lat, Map.lng, Map.level_number' //for distinct values
));
}
查询只是选择带边界坐标的引脚'范围。它大部分时间都有效,并且哪个角落的第一个角落 - 左/右/上/下都无关紧要。
但有时这个简单的计算似乎不起作用
我得到了界限和中心点。如果我对中心点应用计算,它有时不在界限范围内,这实际上是奇怪的,但它确实是正确的数据。所以我怀疑在这个界限计算中还有其他的东西我没有想到
以下是我得到的参数示例:?x1 = 68.62149425024305& y1 = 150.81473437500006& x2 = -16.728397127562125& y2 = 173.31473437500006& x = 36.520571863374705& y = -377.93526562499994& z = 3
x1和y1是角点1
x2,y2角点2
x,y是中心
z是zoomlevel
这不是一个很好的例子,因为中心的lng = -377,9 ..但是我的请求坐标范围在-90到90之间,而lng在-180到180之间仍然是我的计算失败我从数据库和中心点得到零数据我从地图api获得的数据不在我从同一个api获得的范围内
答案 0 :(得分:-1)
当距离太远时,你可以加180°并使用绝对值:abs(-377.9 + 180)。