mysql通过经纬度计算两点距离

传入参数 纬度 23.163292 经度 113.3114676
与数据库中经纬度对比,得到距离
在这里插入图片描述

计算公式有点复杂,先上sql:

SELECT
		bm.`id`         id,
		bm.`bus_name` busname,
		bm.`bus_logo` bus_logo,
		bm.`address` address,
		bm.`latitude` latitude,
		bm.`longitude` longitude,
		ROUND(
			6378.138 * 2 * ASIN(
				SQRT(
					POW( SIN( ( 23.163292 * PI() / 180 - bm.`latitude` * PI() / 180 ) / 2 ), 2 ) + COS( 23.163292 * PI() / 180 ) * COS( bm.`latitude` * PI() / 180 ) * POW( SIN( ( 113.3114676 * PI() / 180 - bm.`longitude` * PI() / 180 ) / 2 ), 2 ) 
				) 
			) * 1000 
		) distance 
	FROM
		`bus_manage` bm 
	ORDER BY
	distance ASC

查询结果:
在这里插入图片描述

但是在swagger中,没有distance
在这里插入图片描述
把这个表作为临时表,修改sql:

SELECT
	temp.`busname`,
	temp.`bus_logo`,
	temp.`address`,
	temp.`latitude`,
	temp.`longitude`,
	temp.`distance` 
FROM
	(
	SELECT
		bm.`bus_name` busname,
		bm.`bus_logo` bus_logo,
		bm.`address` address,
		bm.`latitude` latitude,
		bm.`longitude` longitude,
		ROUND(
			6378.138 * 2 * ASIN(
				SQRT(
					POW( SIN( ( 23.163292 * PI() / 180 - bm.`latitude` * PI() / 180 ) / 2 ), 2 ) + COS( 23.163292 * PI() / 180 ) * COS( bm.`latitude` * PI() / 180 ) * POW( SIN( ( 113.3114676 * PI() / 180 - bm.`longitude` * PI() / 180 ) / 2 ), 2 ) 
				) 
			) * 1000 
		) distance 
	FROM
		`bus_manage` bm 
	ORDER BY
	distance ASC 
	) AS temp

成功查出所有字段:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值