본문 바로가기
Programming/Algorithm

[Algorithm] 지구에서 두 점 사이의 중간지점 구하기

by SpiralMoon 2020. 9. 15.
반응형

지구에서 두 점 사이의 중간지점 구하기

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

서울과 뉴욕의 중간지점.  77.29897°N, 160.39588°W

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


시리즈

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

2020/09/07 - [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


중간지점

이 식은 대원(great circle)에서 두 점 사이의 중간지점을 찾아내는 식이다.

 

formula

Bx = cos φ2 ⋅ cos Δλ
By = cos φ2 ⋅ sin Δλ
φm = atan2( sin φ1 + sin φ2, √(cos φ1 + Bx)² + By² )
λm = λ1 + atan2(By, cos(φ1)+Bx)

 

source code

 

// 출발지 (서울)
const lat1 = 37.56654;
const lon1 = 126.97796;

// 목적지 (뉴욕)
const lat2 = 40.71295;
const lon2 = -74.00607;

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

const Bx = Math.cos(φ₂) * Math.cos(λ₂ - λ₁);
const By = Math.cos(φ₂) * Math.sin(λ₂ - λ₁);
const φ₃ = Math.atan2(Math.sin(φ₁) + Math.sin(φ₂),
                      Math.sqrt((Math.cos(φ₁) + Bx) * (Math.cos(φ₁) + Bx) + By * By));
const λ₃ = λ₁ + Math.atan2(By, Math.cos(φ₁) + Bx);

// 라디안을 디그리로 변환
const lat3 = φ₃ * 180 / Math.PI;
let lon3 = λ₃ * 180 / Math.PI;

// lat3 = 77.2989712658764
// lon3 = 199.60411612492646

// 경도는 −180 ~ +180 사이의 값으로 정규화 할 수 있다.
lon3 = (lon3 + 540) % 360 - 180;

// 정규화된 lon3 = -160.39588387507354

 

초기 방위각이 최종 방위각과 일치하지 않는 것 처럼, 중간 지점은 위도/경도 사이의 중간 지점에 위치하지 않을 수 있다. (위도에 따라 왜곡률이 달라지기 때문)

35°N,45°E와 35°N,135°E 사이의 중간 지점은 약 45°N,90°E이다.


원본

 

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

 

반응형

댓글