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