Haversine Formula

스크린샷 2024-09-09 오후 4.37.38.png

최단거리 구하기, 하버사인 공식(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`);