单位项目需要实现 当前位置30km内的所有景点列表 想用PHP写 但是数据量太大了 所以 想着直接用Mysql实现
废话不多说 网上谷歌那个基本上是个坑用不了 自己重新按照数学公式写了
其实就是求球表面两个之间的距离。
本人实现如下:
SELECT
id,
(
6371 * acos(
cos(
radians(ally_scenic.Latitude)
) * cos(radians(29.85967)) * cos(
radians(121.544612) - radians(ally_scenic.Longitude)
) + sin(
radians(ally_scenic.Latitude)
) * sin(radians(29.85967))
)
) as distance
FROM
ally_scenic
HAVING
distance < 300
ORDER BY
distance
具体传参数如下:
SELECT
id,
(
6371 * acos(
cos(
radians(数据表中存Latitude值的列名)
) * cos(radians(你的纬度)) * cos(
radians(你的经度) - radians(数据表中存Longitude值的列名)
) + sin(
radians(数据表中存Latitude值的列名)
) * sin(radians(你的纬度))
)
) as distance
FROM
ally_scenic
HAVING
distance < 300 //距离 单位为千米 当前这行的意思是 查找 300km以内的景点
ORDER BY
distance