본문 바로가기
Programming/Algorithm

[Algorithm] 지구에서 두 점 사이의 방위각 구하기

by SpiralMoon 2020. 9. 7.
반응형

지구에서 두 점 사이의 방위각 구하기

지구에서 두 점 사이의 방위각을 구하는 방법을 알아보자.

이 글은 원본인 Calculate distance, bearing and more between Latitude/Longitude points Bearing 항목을 번역한 글이다.


 

시리즈

2020/08/25 - [Programming/Algorithm] - [Alogrithm] 지구에서 두 점 사이의 거리 구하기

2020/09/15 - [Programming/Algorithm] - [Algorithm] 지구에서 두 점 사이의 중간지점 구하기


사전 지식

라디안

 

라디안 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 라디안단위의 종류SI 유도 단위측정 대상각기호rad 또는 c 단위무한분량단위 환산 1 rad ▼동등 환산값    밀리라디안   1,000 밀리라디안   바퀴   1/2π

ko.wikipedia.org

 

대원

 

Great circle - Wikipedia

A great circle divides the sphere in two equal hemispheres A great circle, also known as an orthodrome, of a sphere is the intersection of the sphere and a plane that passes through the center point of the sphere. A great circle is the largest circle that

en.wikipedia.org

atan2

 

[프로그래밍 이론] 두 점 사이의 절대각도를 재는 atan2

두 점 사이의 절대각도를 재는 atan2 프로그래밍 언어에서 역탄젠트를 계산하는 함수 atan2의 특징을 알아보자 아크탄젠트란? 아크탄젠트(arctangent)는 역탄젠트라고도 하며 탄젠트의 역함수이다. ��

spiralmoon.tistory.com


방위각

일반적으로, 대원 경로를 따라가면 현재 진행방향이 달라진다. 최종 방향은 거리와 위도에 따라 각도가 달라 초기 방향과 달라지게 되는 것이다.

만약, 바그다드에서 오사카로 이동한다면 초기 방위각 60°으로 시작하여 오사카에 도착했을 땐 최종 방위각 120°으로 끝난다.

 

이 식은 초기 방위각(전방 방위각, 출발지로부터 도착지까지의 방향)을 구하기 위한 식으로, 대원 호를 따라 시작점에서 끝점까지 직선으로 이동한다.

 

formula

θ = atan2( sin Δλ ⋅ cos φ , cos φ₁ ⋅ sin φ − sin φ₁ ⋅ cos φ₂ ⋅ cos Δλ )

φ₁,λ₁은 출발 지점, φ₂,λ₂는 도착 지점의 좌표를 나타내며, Δλ는λ₁ λ₂의 차이다.

source code

 

// 출발지 (바그다드)
const lat1 = 33.3118;
const lon1 = 44.28586;

// 목적지 (오사카)
const lat2 = 34.67776;
const lon2 = 135.41602;

// 위도, 경도를 라디안 단위로 변환
const φ₁ = lat1 * Math.PI / 180;
const φ₂ = lat2 * Math.PI / 180;
const λ₁ = lon1 * Math.PI / 180;
const λ₂ = lon2 * Math.PI / 180;

const y = Math.sin(λ₂ - λ₁) * Math.cos(φ₂);
const x = Math.cos(φ₁) * Math.sin(φ₂) -
          Math.sin(φ₁) * Math.cos(φ₂) * Math.cos(λ₂ - λ₁);
const θ = Math.atan2(y, x); // 방위각 (라디안)
const bearing = (θ * 180 / Math.PI + 360) % 360; // 방위각 (디그리, 정규화 완료)

// θ = 1.038408451477755
// bearing = 59.49642168039071

// 즉, 바그다드에서 오사카까지의 방위각은 약 60°정도 된다.

 

atan2 함수는 -π ~ +π (-180° ~ +180°) 범위의 값을 반환하므로, 이 값을 나침반 방위로 정규화 해주어야 한다. 라디안 θ를 디그리 θ로 변환하고 (θ + 360) % 360을 취하면 디그리 단위의 초기 방위각 계산이 완료된다.

 

초기 방위각은 이 처럼 구할 수 있으며, 최종 방위각을 구하는 방법도 어렵지 않다.

최종 방위각은 도착지로부터 출발지까지의 초기 방위각을 구한 뒤 역전시키기만 하면 된다. (θ = (θ + 180) % 360)


원본

 

Calculate distance and bearing between two Latitude/Longitude points using haversine formula in JavaScript

This page presents a variety of calculations for lati­tude/longi­tude points, with the formulas and code fragments for implementing them. All these formulas are for calculations on the basis of a spherical earth (ignoring ellipsoidal effects) – which i

www.movable-type.co.uk

 

반응형

댓글