35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
|
/**
|
|||
|
* 计算两点间距离(单位:米)
|
|||
|
* @param {number} lon1 - 第一个点的经度
|
|||
|
* @param {number} lat1 - 第一个点的纬度
|
|||
|
* @param {number} lon2 - 第二个点的经度
|
|||
|
* @param {number} lat2 - 第二个点的纬度
|
|||
|
* @returns {number} 两点间距离(米)
|
|||
|
*/
|
|||
|
function calculateDistance(lon1, lat1, lon2, lat2) {
|
|||
|
// 将角度转换为弧度
|
|||
|
const radLat1 = (lat1 * Math.PI) / 180.0;
|
|||
|
const radLat2 = (lat2 * Math.PI) / 180.0;
|
|||
|
const deltaRadLat = radLat1 - radLat2;
|
|||
|
const deltaRadLon = ((lon1 - lon2) * Math.PI) / 180.0;
|
|||
|
|
|||
|
// Haversine公式计算距离
|
|||
|
const a =
|
|||
|
Math.sin(deltaRadLat / 2) * Math.sin(deltaRadLat / 2) +
|
|||
|
Math.cos(radLat1) *
|
|||
|
Math.cos(radLat2) *
|
|||
|
Math.sin(deltaRadLon / 2) *
|
|||
|
Math.sin(deltaRadLon / 2);
|
|||
|
const b = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|||
|
|
|||
|
// 地球半径(米)
|
|||
|
const earthRadius = 6371000;
|
|||
|
const distance = earthRadius * b;
|
|||
|
|
|||
|
return Math.round(distance);
|
|||
|
}
|
|||
|
|
|||
|
module.exports = {
|
|||
|
calculateDistance: calculateDistance,
|
|||
|
};
|