-- ========== 简单检验距离计算准确度===============
-- 北京经纬度
set hivevar:arrival_lat=39.9;
set hivevar:arrival_lon=116.3;
-- 上海经纬度
set hivevar:hotel_lat=31;
set hivevar:hotel_lon=121;
-- 北京上海的直线距离:1069
select
6378.137*2*ASIN(SQRT(POWER(SIN((${arrival_lat}-${hotel_lat})*ACOS(-1)/360),2)
+COS(${arrival_lat}*ACOS(-1)/180)*COS(${hotel_lat}*ACOS(-1)/180)
*POWER(SIN((${arrival_lon}-${hotel_lon})*ACOS(-1)/360),2)))
as distance1
,6378.137 * ACOS(1 - (POWER((SIN((90 - ${arrival_lat}) * PI() / 180) * COS(${arrival_lon} * PI() / 180) - SIN((90 - ${hotel_lat}) * PI() / 180) * COS(${hotel_lon} * PI() / 180)), 2)
+ POWER((SIN((90 - ${arrival_lat}) * PI() / 180) * SIN(${arrival_lon} * PI() / 180) - SIN((90 - ${hotel_lat}) * PI() / 180) * SIN(${hotel_lon} * PI() / 180)), 2)
+ POWER((COS((90 - ${arrival_lat}) * PI() / 180) - COS((90 - ${hotel_lat}) * PI() / 180)), 2)) / 2)
AS distance2
-- 距离计算结果--=====
-- distance1 distance2
-- 1078.0874496030901 1078.0874496030917
因为选择的sin和cos不同的角度计算的,所以结果会有细微的差别,但差别已经到小数点后10位了,差别非常小。