MySql里根据GPS坐标,查询距离最近的数据,附近的商户

 在某些基于地理位置的应用场景中,我们需要根据用户的当前位置查询最近的商户或服务点。本文将记录如何在 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)) - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值