mysql中两点之间距离的计算
程序员文章站
2022-08-15 19:28:51
需求背景最近做电商项目,要求跟根据用户当前位置显示距离用户当前位置十五公里内的商品。 用户当前位置由移动端(Android,ios)传递到后台,商品表里面保存当前商品所在店铺的经纬度。也就是已知两个点的经纬度信息求两点间的距离。对于两点之间的距离,在mysql中可以根据两点的经纬度进行计算。SQL实现:SELECTround(6378.138 * 2 * asin(sqrt(pow(sin((A点的纬度 * pi() / 180 - B点的纬度 * pi() /.....
需求背景
最近做电商项目,要求跟根据用户当前位置显示距离用户当前位置十五公里内的商品。 用户当前位置由移动端(Android,ios)传递到后台,商品表里面保存当前商品所在店铺的经纬度。也就是已知两个点的经纬度信息求两点间的距离。 对于两点之间的距离,在mysql中可以根据两点的经纬度进行计算。
SQL实现:
SELECT
round(
6378.138 * 2 * asin(sqrt(pow(sin(
(A点的纬度 * pi() / 180 - B点的纬度 * pi() / 180) / 2
),2) + cos(A点的纬度 * pi() / 180) * cos(B点的纬度 * pi() / 180) * pow(
sin((A点的经度 * pi() / B点的经度 * pi() / 180) / 2),2))
) * 1000
)
具体操作
现在已知两点坐标为:天府广场(104.066546,30.657462) 天府公园(104.072704,30.431714),将这两点的坐标填入上面的sql为:
select round(6378.138*2*asin(sqrt(pow(sin((
30.657462 #A点的纬度
*pi()/180-
30.431714 #B点的纬度
*pi()/180)/2),2)+cos(
30.657462 #A点的纬度
*pi()/180)
*cos(
30.431714 #B点的纬度
*pi()/180)* pow(sin((
104.0665460 #A点的经度
*pi()/180-
104.072704 #B点的经度
*pi()/180)/2),2)))*1000)
执行结果为:
这里的单位是米,可以看出这里两点的距离大概为25公里,跟用高德地图搜索的距离相差不大。
关于测试的时候如何找到指定位置的经纬度,可以利用高德地图获取,具体链接:https://lbs.amap.com/api/javascript-api/example/map/click-to-get-lnglat
本文地址:https://blog.csdn.net/u010972055/article/details/107563630