레이블이 메르카토르인 게시물을 표시합니다. 모든 게시물 표시
레이블이 메르카토르인 게시물을 표시합니다. 모든 게시물 표시

2009년 11월 7일 토요일

메르카토르 도법 지도 위에 최단경로를 그리는 프로그램 1.1 업데이트

메르카토르 도법 지도 위에 최단경로를 그리는 프로그램에서 발견된 사소한(?) 문제점을 해결한 프로그램임.

아래와 같은 수정이 적용되었다.

1. 가끔 죽는 문제 해결. 선의 범위가 화면을 벗어나는 경우 가끔 죽는 문제가 있었음.
2. 선과 문자의 색상 지정 가능. (INI 등으로 저장하는 기능은 안 만들었음. ㅋㅋ)
3. 위도 범위를 북반구/남반구 각각 지정 가능. (남극 대륙을 제거한 메르카토르 지도가 종종 있음)
4. 좌표 입력시 순서를 위도-경도에서 경도-위도로 바꿈.
5. 실행시 실행파일과 같은 폴더에 있는 PNG 파일을 자동으로 지정함.

화면은 이런 식으로 바뀌었다. 수정된 내용이 적용된 화면은 아래와 같다.

사용자 삽입 이미지

이런 기능을 적용한 덕분에 아래와 같은 결과를 볼 수 있다.
아래 표시된 코스는 앞의 포스트와 동일한 괌-칠레(발파라이소 항) 항로임.

사용자 삽입 이미지

수정된 프로그램을 사용하려면 아래 파일을 다운받으면 된다.


2009년 11월 5일 목요일

메르카토르 도법 지도 위에 최단경로를 그리는 프로그램

지구 타원체에서 두 점간의 방위와 최단거리 계산하기에서 언급한 내용을 눈으로 보여주는 프로그램을 만들어봤다.

잘 알려져있듯이, 메르카토르 도법 지도의 장점은 항해시 등각 항법을 쉽게 쓸 수 있다는 점이다.
하지만, 이 항로는 최단거리가 아니기 때문에 장거리 항해에 있어서는 비효율적이다.

이 프로그램은 메르카토르 해도에 두 지점 간 등각항로와 최단경로를 그려주고, 거리 정보를 표시해준다.
(메르카토르 해도는 별도의 PNG 파일로 지정해줘야 함)

사용자 삽입 이미지

본초자오선과 최대위도를 입력받을 수 있어 어떠한 메르카토르 지도와도 함께 사용 가능함


아래의 압축 파일을 풀면 실행파일과 메르카토르 도법 해도가 나오며, 눈치껏(응?) 사용하면 된다.
참고로, 계산이 끝나면 경로가 표시된 이미지 파일을 화면에 표시해준다.


실행 결과는 아래와 같다.

사용자 삽입 이미지

이 캡쳐 화면에 표시된 경로는 괌-칠레(발파라이소 항) 임


2009년 7월 21일 화요일

지구 타원체에서 두 점간의 방위와 최단거리 계산하기

1. 등각항법 vs 대권항법

항해를 할 때는 메르카토르 해도에 일직선으로 항로를 표시하여 항로를 따라 항해하는데, 이를 등각항법이라고 한다.
이는 지표면 상에서 최단거리를 긋는 대권항법과 비교 된다.

등각항법은 항로가 직선으로 표시되어 쉽게 작도하고 항해할 수 있으나, 원양항해시 멀리 돌아가므로 효율이 낮다.
반면, 대권항법은 효율성이 높지만, 매순간 침로를 변경해줘야 하기 때문에 사람이 작도하기 보다는 항해용 컴퓨터를 이용해서 자동으로 침로를 지정해야 효용성을 발휘할 수 있다.

사용자 삽입 이미지

제주도-하와이 구간 등각항로. 직선이지만, 최단거리는 아니다.


항해를 할 때는 지구본이 아닌 해도를 놓고 항로를 표시하게 되는데, 해도에 등각항로를 쉽게 작도하는 방법은 없다.


2. 방위와 거리를 평면으로 근사해서 계산하는 법

가까운 거리 즉, 대한민국의 영토와 영해 및 주변 해역에서는 대권항로와 등각항로의 차이가 사실상 없다.
(엄밀히 말하면 있기는 하지만, 실제 항해에 미칠 수 있는 영향은 전혀 없다)
물 위에서 배가 몇 미터 단위까지 정확하게 항해할 수는 없기 때문이다.

평면으로 근사하여 해를 계산할 때는 2차원 Cartesian좌표계에 영역을 투영하여 침로를 계산한다.
이 방식은 연안에서는 굉장히 정확하여, 방위와 거리에 대한 정확한 계산결과를 얻을 수 있다.

사용자 삽입 이미지

대략 이런 식으로 투영하는데, 연안에서는 의외로 정확하다.


하지만, 원양으로 가면 얘기는 달라진다.
원양에서는 대권항로를 계산해야 효율적인 항해가 가능해진다.


3. 대권항로를 계산하는 법

대권항로를 계산하는 방법은 WGS84 좌표계가 나오기 무려 9년 전인 1975년에 발표되었다.
당시는 Bessel 타원체를 사용하던 시절이었는데, 당시 발표된 한 논문에 항로를 정확히 계산하는 방법이 연구되어 있었다.

타원체 상의 한 지점에서 일정한 방위와 거리에 있는 다른 점의 좌표를 계산(주문제[Direct Problem]라고 함)하거나, 두 지점 간의 방위와 거리를 계산(역문제[Inverse Problem]라고 함)하는 방법을 단 6 페이지의 논문에 명료하게 적은 것이다.

이 논문 및 관련 설명은 아래 링크들에서 볼 수 있다.


이 방법은 당시에 사용되던 느린 컴퓨터 상에서도 Fortran으로도 최대한 효율적으로 계산할 수 있도록 만들어졌는데, 지금의 빠른 컴퓨터에서는 (무려) JavaScript를 사용해도 굉장히 빠르고 정확한 계산이 가능하다.
게다가, Bessel 타원체의 상수(장반경, 단반경 및 편평률) 대신 WGS84 타원체의 상수를 적용하는 것만으로 WGS84 좌표계에서 그대로 사용이 가능하다.
또한, 이 식의 오차는 무려 0.5mm 이하이다.

사용자 삽입 이미지

제주도-하와이 구간 최단거리의 방위/거리 계산 결과


이 식을 Visual C++ 2005로 구현해서 계산해본 결과 최대 0.25μs의 시간에 계산이 가능하다.
Cartesian 좌표계에서 계산했을 때는 최대 0.172μs의 시간에 계산을 할 수 있으니 충분히 빠른 알고리즘이다.
(계산환경: Intel Core2 Duo E6550, 2.33GHz, 2GB RAM)

참고로, 메르카토르 도법상에서는 0.04μs에 계산했는데, 워낙 단순한 알고리즘이니 이것과 비교할 수는 없을 것 같다.


2009년 7월 19일 일요일

메르카토르 도법에 대한 어이없는 오해

1. 메르카토르 투영 도법

국제정치적인 음모를 목적으로 만들어졌다는 오해를 종종 듣고 있는 지도가 메르카토르 도법이다.
(강대국은 크게, 약소국은 작게 표시하기 위해 만들어졌다고 하더라. ㅎㅎ)

하지만, 실상은 전혀 그게 아니다.
이 지도가 헤라르뒤스 메르카토르에 의해 만들어진 것은 1569년, 미적분도 발명되지 않은 시점에서 오직 경험과 측정만을 통해 항해지도로 사용하기 위해 만들어진 것이다.

당시에는 항해시에는 등각항법을 주로 사용하기 때문에 등각항로를 직선으로 표시해줄 지도가 필요했다.
(물론, 현재도 이 점은 크게 달라지지 않았다)

메르카토르는 (다시 한 번 강조하지만) 등각항법이라는 필요성을 만족하기 위해 경험과 측정만으로 해도를 만든 것이다.
이후 미적분이 발명되는 등, 수학이 발전되며 측정결과가 식으로 정리되었고 측정이 대단히 정확했다는 것이 확인되었다.

사용자 삽입 이미지

메르카토르 투영도법



2. 페터스 도법

메르카토르 도법에서 볼 수 있는 면적에 대한 왜곡을 해결했다는 지도가 페터스 도법의 지도이다.
사실 이 지도는 메르카토르 도법에 비해 그리기가 쉬운 편이다.
메르카토르 도법은 항해를 위해 의도적으로 왜곡을 추가한 것이고, 그 왜곡을 추가하지 않은 것이 페터스 도법이다.
게다가, 페터스 도법 지도는 불행하게도... 면적이 현실과 비슷하다는 상징성 외엔 큰 효용성이 없다.
지도의 기본 기능은 길을 찾아가는데 사용되는 길잡이인데, 방위를 계산할 수 없어서 길잡이용으로는 쓸 수가 없는 것이다.

사용자 삽입 이미지

면적이 비슷하다고 자꾸 주장하는데, 그럼 남극은?



덧1. 메르카토르 도법 지도의 문제를 얘기하는 사람들이 언제나 얘기하는 문제점이 왜곡이다.
메르카토르 도법만의 문제로 슬쩍 포장하는데, 구나 타원체의 표면을 2차원 평면에 그리면 어떤 식이든 왜곡은 필수이다.
페터스 지도를 포함한 모든 2차원 평면 지도는 왜곡을 반드시 수반한다.


덧2. 모 미드에서 메르카토르 도법의 지도가 왜곡되기 때문에 페터스 지도를 걸어놓는 설정이 나왔다.
이걸 보고 공감하시는 사람들...
미드에서 페터스 지도를 거는 이유는 전세계를 식민지로 볼 때 면적이 더 중요하기 때문이다. ㅠ.ㅠ
왜 우리가 이걸 공감해야 하는 건지 모르겠다.