欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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)

执行结果为:

mysql中两点之间距离的计算

这里的单位是米,可以看出这里两点的距离大概为25公里,跟用高德地图搜索的距离相差不大。

关于测试的时候如何找到指定位置的经纬度,可以利用高德地图获取,具体链接:https://lbs.amap.com/api/javascript-api/example/map/click-to-get-lnglat

本文地址:https://blog.csdn.net/u010972055/article/details/107563630