文章目录
已知地球上两点的经度、纬度:(x1, y1), (x2, y2),其中x1,x2为经度,y1,y2为纬度;
在程序中计算需要转化为弧度(*π/180)
地球半径为R=6378.137 km
则两点距离:
d
=
R
∗
a
r
c
o
s
[
c
o
s
(
y
1
)
∗
c
o
s
(
y
2
)
∗
c
o
s
(
x
1
−
x
2
)
+
s
i
n
(
y
1
)
∗
s
i
n
(
y
2
)
]
d = R*arcos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)]
d=R∗arcos[cos(y1)∗cos(y2)∗cos(x1−x2)+sin(y1)∗sin(y2)]
扩展资料:
经度分为360度,每15度1个时区,其中0度的叫本初子午线,是第一个进入新一天的地方,然后向西每过1个时区就相差1小时。例如是早上5点,那么向西一个时区就是早上4点,再过1个时区就是早上3点,依此类推,向东则相反,一直到本初子午线。
纬度赤道的纬度为0°,将行星平分为南半球和北半球。纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。
参考资料:经纬度_百度百科
export function GetDistance1( lng1, lat1, lng2, lat2){
// 角度转弧度
let a = Math.PI / 180;
let t1 = Math.sin(lat1 * a) * Math.sin(lat2 * a);
let t2 = Math.cos(lat1 * a) * Math.cos(lat2 * a);
let t3 = Math.cos(lng1 * a - lng2 * a);
let t4 = t2 * t3;
let t5 = t1 + t4;
let s = Math.atan(-t5/Math.sqrt(-t5 * t5 +1)) + 2 * Math.atan(1);
s = s *6378.137 ;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
export function GetDistance2( lng1, lat1, lng2, lat2){
let radLat1 = lat1*Math.PI / 180.0;
let radLat2 = lat2*Math.PI / 180.0;
let a = radLat1 - radLat2;
let b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s *6378.137 ;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
export function GetDistance3( lng1, lat1, lng2, lat2){
let a = Math.PI / 180;
let s = Math.acos(Math.cos(lat1 * a) * Math.cos(lat2 * a) * Math.cos(lng1 * a - lng2 * a) + Math.sin(lat1 * a) * Math.sin(lat2 * a))
s = s *6378.137 // EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
参考资料: