|
/**
|
|
* 计算两点之间的距离
|
|
* @param {number} lat1 地点1精度
|
|
* @param {number} lon1 地点1维度
|
|
* @param {number} lat2 地点2精度
|
|
* @param {number} lon2 地点2维度
|
|
* @param {number} fixed 保留几位小数,默认0,单位km
|
|
*/
|
|
export function calculateDistance(lat1, lon1, lat2, lon2, fixed = 0) { //计算两点距离
|
|
let distance = 0
|
|
if (!lat2 || !lon2) return distance
|
|
//先强制转换一下(后端给的字符串)
|
|
lat1 = parseFloat(lat1)
|
|
lon1 = parseFloat(lon1)
|
|
lat2 = parseFloat(lat2)
|
|
lon2 = parseFloat(lon2)
|
|
// 将角度转换为弧度
|
|
const R = 6371; // 地球半径,单位公里
|
|
const dLat = (lat2 - lat1) * Math.PI / 180;
|
|
const dLon = (lon2 - lon1) * Math.PI / 180;
|
|
lat1 = lat1 * Math.PI / 180;
|
|
lat2 = lat2 * Math.PI / 180;
|
|
// Haversine公式
|
|
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
|
Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
|
|
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
// 计算距离
|
|
distance = R * c;
|
|
return distance.toFixed(fixed)
|
|
}
|