PROJ.4 - 지도 투영법 간의 좌표 변환
2019년 업데이트: 최신 버전의 PROJ.4에서 proj_api.h에 정의된 함수는 deprecated 선언된 상태입니다. proj_api.h를 포함(include)하기 전에 ACCEPT_USE_OF_DEPRECATED_PROJ_API_H
를 정의해야만 사용할 수 있습니다. 미래의 버전에서 완전히 삭제될 수 있습니다.
GPSGlobal Positioning System를 기반으로 하는 장치에서는 지구 질량의 중심을 원점으로 하는 WGS84 기반의 위경도 좌표가 일반적으로 사용되지만, 지역 지도에 기반하는 날씨와 도로 교통 등의 서비스는 전통적으로 용도에 더 적합한 좌표계를 사용하는 경우가 많다.
나는 이 분야의 전문가가 아니므로, 이 글은 지도 투영법의 수학적인 원리를 설명하는 것이 아니라, 각종 지도 투영법 간의 좌표를 변환하는 잘 만들어진 라이브러리 하나를 간단히 소개한다.
PROJ.4
PROJ.41는 지도 투영법cartographic projections 간의 변환을 하는 오픈 소스 라이브러리이다. API의 구체적인 사용법과 예제는 매뉴얼2에 잘 나와 있다. 아래는 WGS84 위경도 좌표를 우리나라 중부 원점(경도 127˚ 위도 38˚)의 TM 즉, 횡측 메르카토르transverse Mercator 투영법의 좌표로 변환하는 예이다.
#include <proj_api.h>
projPJ pj_latlong, pj_tmerc;
double x = ..., y = ...; /* in radians */
pj_latlong = pj_init_plus("+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43");
pj_tmerc = pj_init_plus("+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs");
pj_transform(pj_latlong, pj_tmerc, 1, 1, &x, &y, NULL);
pj_free(pj_latlong);
pj_free(pj_tmerc);
pj_init_plus
함수의 인자로 사용되는 좌표계 정의는 OSGeoOpen Source Geospatial 한국어 지부에서 우리나라에서 일반적으로 사용되는 좌표계에 대하여 잘 정리해 놓았으니 참고하여 사용하면 된다.3
한국 주요 좌표계 EPSG코드 및 proj4 인자 정리 (OSGeo 한국어 지부) ↩︎