在某些基于地理位置的应用场景中,我们需要根据用户的当前位置查询最近的商户或服务点。本文将记录如何在 MySQL 中使用存储过程查询距离当前坐标最近的商户,并将结果按距离排序。同时,返回结果中显示距离。
使用 Haversine 公式计算距离
Haversine 公式用于计算地球上两个坐标点之间的最短距离。其核心思想是将两点的经纬度转换为弧度后,通过球面三角学计算出距离。
-- 要查询距离当前经纬度最近的10条记录并按远近排序,
-- 可以使用SQL中的Haversine公式来计算地球上两点之间的距离。
-- 以下是一个示例SQL查询,
-- 假设当前经纬度为@currentLatitude和@currentLongitude:
--
-- 6371 是地球的半径(单位:公里),如果你想用其他单位(例如:英里),可以将其改成 3959。
-- SUBSTRING_INDEX(经纬度, ',', 1) 和 SUBSTRING_INDEX(经纬度, ',', -1) 用来提取经纬度字段中的经度和纬度部分。
-- RADIANS 函数将角度转换为弧度,因为三角函数要求弧度输入。
-- ACOS 函数计算两点之间的夹角。
-- LIMIT 10 限制返回的记录数为10条。
SELECT
Id,
Name,
Position,
(
6371 * ACOS(
COS(RADIANS(@currentLatitude)) * COS(RADIANS(SUBSTRING_INDEX(Position, ',', 1))) *
COS(RADIANS(SUBSTRING_INDEX(Position, ',', -1)) -