mysql数据库计算两个经纬度之间的距离问题

  • Post author:
  • Post category:mysql


一、今天做手机签到部分,用到计算两个经纬度之间距离需求,一开始是写在代码中的(这些网上都有的,),写完之后觉得在数据库中写一个函数调用更直观、易于修改、代码更精简。于是乎,开动…

二、计算公式网上都有的,这里简答贴一下

其中

  • R为地球半径,可取平均值 6371km;
  • φ1, φ2 表示两点的纬度;
  • Δλ 表示两点经度的差值。

三、不多说了,直接上成品

CREATE DEFINER=`root`@`localhost` FUNCTION `_fnGetDistance`(lon1 double,lat1 double,lon2 double,lat2 double) RETURNS varchar(200) CHARSET utf8

BEGIN

— 传入两个经纬度,算出距离

declare vLon1,vLat1,vLon2,vLat2,distance,vShortLon,vShortLat double;

declare vRlt double;

set vLon1 = lon1;

set vLat1 = lat1;

set vlon2 = lon2;

set vLat2 = lat2;

set vRlt = ROUND(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((lon1 * PI() / 180 – lon2 * PI() / 180) / 2),2))) * 1000

);

return vRlt;

end

四、测试如下:

select _fnGetDistance(116.32793,39.94607,121.42575,31.24063);

–》

1072840


也欢迎登录我的个人网站,里面有更多的文章及技术咨询在等你:http://www.guangmuhua.com



版权声明:本文为qq_25175063原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。