// 哈弗辛公式计算两地距离 传参为两地经纬度
function calculateStraightLineDistance(lat1, lon1, lat2, lon2) {
const earthRadius = 6371004; // 地球半径,单位米
// 将度数转换为弧度
function degreesToRadians(degrees) {
return (degrees * Math.PI) / 180;
}
// 使用Haversine公式计算距离
function haversine(lat1, lon1, lat2, lon2) {
const dLat = degreesToRadians(lat2 - lat1);
const dLon = degreesToRadians(lon2 - lon1);
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(degreesToRadians(lat1)) * Math.cos(degreesToRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return earthRadius * c;
}
// 调用Haversine函数计算距离并返回
return haversine(lat1, lon1, lat2, lon2);
}
哈弗辛公式在计算较短距离时非常精确,对于地球表面的绝大多数距离计算都适用。但在极长距离(如接近地球半周以上的距离)时,可能需要考虑地球的椭球形状和其他更复杂的地理计算方法。