在坐标计算的特定距离内搜索数据库中的记录

时间:2016-02-25 15:10:00

标签: php mysql sql

我在查询时遇到问题:

SELECT Store_name, GPS_latitude, GPS_longitude, SQRT(
POW(69.1 * (GPS_latitude - $longitude), 2) +
POW(69.1 * ($latitude - GPS_longitude) * COS(GPS_latitude / 57.3), 2)) AS distance
FROM table HAVING distance < 25 ORDER BY distance

网站的用户应该能够输入坐标(纬度和经度)。从那里开始,我希望上面的查询列出表中的商店,这些商店按照给定$ latitude和$ longitude的用户的距离排序。

我确实得到了结果,但只有当我从&#39;距离&lt; 25&#39;到&#39;距离&lt; 5000&#39; (或其他大数字),虽然结果似乎不是基于距离用户给定坐标的距离。

这是以错误的方式计算这个问题的查询吗?我很困难,我似乎无法找到任何解决方案。

1 个答案:

答案 0 :(得分:1)

试试这个:

select * from (
    SELECT Store_name, GPS_latitude, GPS_longitude,
    SQRT(
        POW(69.1 * (GPS_latitude - $longitude), 2) +
        POW(69.1 * ($latitude - GPS_longitude) * COS(GPS_latitude / 57.3), 2)
    ) AS distance
    FROM table
) as vtab
WHERE distance < 25
ORDER BY distance;

PS但我强烈建议你看一下&#34;特定于MySQL的空间关系函数&#34;