PROJ.4 - 지도 투영법 간의 좌표 변환

by Vincent Lee,

GPS를 기반으로 하는 장치에서는 지구 질량의 중심을 원점으로 하는 WGS84 기반의 위경도 좌표가 일반적으로 사용되지만, 지역 지도에 기반하는 날씨와 도로 교통 등의 서비스는 전통적으로 용도에 더 적합한 좌표계를 사용하는 경우가 많다.

나는 이 분야의 전문가가 아니므로, 이 글은 지도 투영법의 수학적인 원리를 설명하는 것이 아니라, 각종 지도 투영법 간의 좌표를 변환하는 잘 만들어진 라이브러리 하나를 간단히 소개한다.

PROJ.4

PROJ.41는 지도 투영법(cartographic projections) 간의 변환(transform)을 하는 오픈 소스 라이브러리이다. 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 함수의 인자로 사용되는 좌표계 정의는 OSGeo(Open Source Geospatial) 한국어 지부에서 우리나라에서 일반적으로 사용되는 좌표계에 대하여 잘 정리해 놓았으니 참고하여 사용하면 된다.3

References

1 PROJ.4 – Cartographic Projections Library

2 Proj API Reference

3 한국 주요 좌표계 EPSG코드 및 proj4 인자 정리 (OSGeo 한국어 지부)