我正在寻找一个快速的 MySQL 查询,它从一个简单的表中返回最近的位置:
表locations
::
id | city | latitude | longitude
-----------------------------------------------
1 | Berlin | 52.524268 | 13.406290
-----------------------------------------------
2 | London | 51.508129 | -0.1280050
-----------------------------------------------
3 | Hamburg | 53.551084 | 9.9936817
-----------------------------------------------
$intLat = '52.370215700000000000'; // lat Amsterdam
$intLon = '4.895167899999933000'; // lon Amsterdam
@SO提供的大多数示例都基于距离计算。
即使使用来自Birmingham的坐标,它也会返回id=1
(柏林)。查询应该返回伦敦,因为它比柏林更近。不应该吗?
SELECT *, ( 3959 * acos( cos( radians($intLat) )
* cos( radians( latitude ) )
* cos( radians( longitude )
- radians($intLon) ) + sin(radians($intLat) )
* sin( radians( latitude ) ) ) ) AS distance
FROM locations
HAVING distance < 10
AND id IN(1,2,3)
LIMIT 1;