MySQL:使用自定义函数计算经纬度之间的最短距离

Posted ABin-阿斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL:使用自定义函数计算经纬度之间的最短距离相关的知识,希望对你有一定的参考价值。

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得文章有点 feel ,那就点个赞再走哦。

文章目录

一、前言

  • 在日常开发当中我们往往会遇到这种用户通过地图上的自定标记点位经纬度,然后我们查询中这个区间中最近的几家美食店的需求。
  • 下面我们就来看看如何通过 mysql 自定义函数实现这个需求

二、自定义函数SQL

  • 注意:限制性自定义函数SQL,然后再使用函数做处理
-- 距离计算:自定义函数
CREATE DEFINER = `root` @`%` FUNCTION `calc_distance` (
	lat1 DECIMAL ( 10, 6 ),
	lng1 DECIMAL ( 10, 6 ),
	lat2 DECIMAL ( 10, 6 ),
	lng2 DECIMAL ( 10, 6 )) RETURNS DECIMAL ( 10, 6 ) READS SQL DATA DETERMINISTIC BEGIN
	DECLARE
		res DECIMAL ( 10, 6 );
	
	SET res = 6378.138 * 2 * ASIN(
		SQRT(
			POW( SIN( ( lat1 * PI() / 180 - lat2 * PI() / 180 ) / 2 ), 2 ) + COS( lat1 * PI() / 180 ) * COS( lat2 * PI() / 180 ) * POW( SIN( ( lng1 * PI() / 180 - lng2 * PI() / 180 ) / 2 ), 2 ) 
		) 
	);
	RETURN res;
	
	END

三、使用自定义函数

	-- 根据前端传入经度和维度获取这个距离区间最新的美食信息
	-- lgtd:表示经度
	-- lttd:表示维度
	SELECT
		f.id,
		f.shop_name,
		f.score,
		f.Likes,
		f.lgtd,
		f.lttd,
		calc_distance ( 28.063251, 119.181129, f.lttd, f.lgtd ) AS distance,
		f.update_time 
	FROM
		food f
	WHERE
		f.lgtd IS NOT NULL 
		AND f.lttd IS NOT NULL 
	ORDER BY
	distance 
	LIMIT 1

四、总结

  • 这是用SQL 处理的一种方式,如果小伙伴们有更加优雅的操作也可以在评论区中指点

以上是关于MySQL:使用自定义函数计算经纬度之间的最短距离的主要内容,如果未能解决你的问题,请参考以下文章

经纬度之间距离怎么算?

mysql 下 计算 两点 经纬度 之间的距离

mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

高德地图计算两坐标之间距离

mysql实现经纬度计算两个坐标之间的距离

转:mysql 下 计算 两点 经纬度 之间的距离 计算结果排序