本文使用“Haversine”公式,计算两个经纬度点之间的最短距离,即大圆距离。
前提:将地球作为球体计算(忽略地球椭圆产生的误差,最高为3%,对于大多数目的来说已经足够了。
Haversine公式
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
JavaScript
const R = 6371e3; // 单位:米
const φ1 = lat1 * Math.PI/180; // φ, λ 单位:弧度
const φ2 = lat2 * Math.PI/180;
const Δφ = (lat2-lat1) * Math.PI/180;
const Δλ = (lon2-lon1) * Math.PI/180;
const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ/2) * Math.sin(Δλ/2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
const d = R * c; // 单位:米