2026-05-28 09:48:42 +08:00

37 lines
1.4 KiB
JavaScript

"use strict";
function CalculateDistance(point1, point2) {
if (!point1 || !point2) {
console.error("坐标点不能为空");
return 0;
}
console.log("point1", point1);
console.log("point2", point2);
const lat1 = Number(point1.latitude);
const lng1 = Number(point1.longitude);
const lat2 = Number(point2.latitude);
const lng2 = Number(point2.longitude);
if (isNaN(lat1) || isNaN(lng1) || isNaN(lat2) || isNaN(lng2) || lat1 < -90 || lat1 > 90 || lat2 < -90 || lat2 > 90 || lng1 < -180 || lng1 > 180 || lng2 < -180 || lng2 > 180) {
console.error("无效的坐标值", { lat1, lng1, lat2, lng2 });
return 0;
}
if (lat1 === lat2 && lng1 === lng2) {
return 0;
}
const R = 63710087714e-4;
const toRadians = (degree) => degree * (Math.PI / 180);
const φ1 = toRadians(lat1);
const φ2 = toRadians(lat2);
const Δφ = toRadians(lat2 - lat1);
const Δλ = toRadians(lng2 - lng1);
const sinHalfΔφ = Math.sin(Δφ / 2);
const sinHalfΔλ = Math.sin(Δλ / 2);
const a = sinHalfΔφ * sinHalfΔφ + Math.cos(φ1) * Math.cos(φ2) * sinHalfΔλ * sinHalfΔλ;
const aClamped = Math.min(Math.max(a, 0), 1);
const c = 2 * Math.atan2(Math.sqrt(aClamped), Math.sqrt(1 - aClamped));
const distance = R * c;
let s = Math.round(distance * 100) / 100;
console.log("distancew误差", s);
return s;
}
exports.CalculateDistance = CalculateDistance;