【js】两个经纬度之间的直线距离

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 角度转弧度
* @param {number} deg - 角度
* @returns {number}
*/
function degToRad(deg) {
return deg * (Math.PI / 180);
}

/**
* 计算两个经纬度间直线距离
* @param {number} lon1 - 经度1
* @param {number} lat1 - 纬度1
* @param {number} lon2 - 经度2
* @param {number} lat2 - 纬度2
* @returns {number}
*/
function getDistance(lon1, lat1, lon2, lat2) {
// 地球半径 米
const earthRadius = 6371000;
const dLat = degToRad(lat2 - lat1);
const dLon = degToRad(lon2 - lon1);
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(degToRad(lat1)) * Math.cos(degToRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return earthRadius * c;
}