使用 MySQL 查找附近的位置
以下 SQL 语句将会在与坐标 37, -122 相距 25 英里的半径范围内查找最近的 20 个位置。该语句根据行的纬度/经度以及目标纬度/经度计算距离,然后只请求距离值小于 25 的行,最后再按距离对整个查询进行排序,并将查询结果限制为只显示 20 个。要按公里而非英里进行搜索,请将 3959 替换为 6371。
1 SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
其中 37 和 -122 为经纬度,实际代码业务流程放当前用户的实际动态数据。