최단거리 구하기, 하버사인 공식(Haversine Formula)
// Haversine Distance 계산 함수
function haversineDistance(lat1: number, lon1: number, lat2: number, lon2: number): number {
const R = 6371.0; // 지구 반지름 (킬로미터)
// 위도와 경도를 라디안으로 변환
const toRadians = (degree: number): number => (degree * Math.PI) / 180;
const φ1 = toRadians(lat1);
const φ2 = toRadians(lat2);
const Δφ = toRadians(lat2 - lat1);
const Δλ = toRadians(lon2 - lon1);
// Haversine 공식 적용
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;
}
// 예제: 서울 (37.5665, 126.9780)와 부산 (35.1796, 129.0756) 사이의 거리
const lat1: number = 37.5665; // 서울 위도
const lon1: number = 126.9780; // 서울 경도
const lat2: number = 35.1796; // 부산 위도
const lon2: number = 129.0756; // 부산 경도
const distance: number = haversineDistance(lat1, lon1, lat2, lon2);
console.log(`두 지점 사이의 거리: ${distance.toFixed(2)} km`);