计算GPS点之间距离(JS实现)
以下是使用Haversine公式实现计算两个GPS点之间距离的JavaScript代码:
function calculateDistance(lat1, lon1, lat2, lon2) {
const R = 6371e3; // 地球半径(单位:米)
const φ1 = lat1 * Math.PI / 180; // 纬度转换为弧度
const φ2 = lat2 * Math.PI / 180;
const Δφ = φ2 - φ1; // 纬度差
const Δλ = (lon2 - lon1) * Math.PI / 180; // 经度差转换为弧度
// Haversine公式计算a
const a = Math.sin(Δφ / 2) ** 2 + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) ** 2;
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// 计算距离
const distance = R * c;
return distance;
}
// 示例用法
const lat1 = 52.5200; // 点1纬度(柏林)
const lon1 = 13.4050; // 点1经度
const lat2 = 48.8566; // 点2纬度(巴黎)
const lon2 = 2.3522; // 点2经度
const distance = calculateDistance(lat1, lon1, lat2, lon2);
console.log(`距离:${distance.toFixed(0)} 米`);
关键点解析:
- Haversine公式:通过球面三角学计算地球表面两点间的大圆距离。
- 单位转换:将十进制度数转换为弧度(
Math.PI/180
)。 - 地球半径:使用平均半径6371公里(
6371e3
米),结果单位为米。 - 公式变量:
Δφ
:纬度差(弧度)Δλ
:经度差(弧度)a
:Haversine公式中间量c
:两点间的中心角(弧度)
示例结果:
柏林到巴黎的距离约为 878,000米(878公里),实际测试时建议使用已知坐标验证。
扩展用法:
- 返回公里:
return distance / 1000;
- 返回英里:
return distance * 0.000621371;