MySql根据经纬度计算距离

应用场景

场景:
最近在做一个城管解锁车辆的系统,车辆违停用户接受处罚后,需要工作人员根据列表中的车辆所在距离判断是是否前往解锁,涉及到了根据用户经纬度去数据库中按照距离最短排序对应列表
解决问题:
根据用户经纬度去数据库中根据经纬度,按照距离最短排序查询对应列表

解决方法

数学方式计算

直接根据经纬度计算直线距离

SELECT
	id,
	lock_address,
	longitude,
	latitude,
	ROUND(
		6378.138 * 2 * ASIN(
			SQRT(
			POW( SIN(( 31.163973 - latitude ) * PI()/ 360 ), 2 ) + COS( 31.163973 * PI() / 180 ) * COS( latitude * PI() / 180 ) * POW( SIN(( 121.404032 - longitude ) * PI() / 360 ), 2 ))) * 1000 
	) AS distance 
FROM
	dp_1_framelock_form_usagerecord
ORDER BY
	distance 

查询结果:
查询结果

st_distance函数

简介:
st_distance 函数是从 mysql5.6.1 才加入的空间计算函数
参数:
POINT():从坐标构造点
ST_DISTANCE():一个几何体与另一个几何体的距离,计算的结果单位是度,需要乘6371000*π/180=111195是将值转化为米。

SELECT
	id,
	lock_address,
	longitude,
	latitude,
	CAST(
	(st_distance ( POINT ( longitude, latitude ), POINT ( 121.404032, 31.163973 )) * 111195 )
	AS DECIMAL ( 10, 0 )) AS distance 
FROM
	dp_1_framelock_form_usagerecord 
WHERE
	deal_rate = 2 
ORDER BY
	distance

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值