지도 투영법의 종류와 기상청 격자 변환(람베르트 투영법) 수학 공식 분석
구면 형태인 지구의 3차원 위경도 좌표를 2차원 평면 격자 좌표로 변환하기 위해서는 수학적 지도 투영(Map Projection) 기법이 필요합니다. 기상청은 5km 단위의 격자형 동네예보를 제공하기 위해 **람베르트 정각원추도법(Lambert Conformal Conic Projection)**을 채택하여 좌표계를 구축했습니다. 이번 글에서는 지도 투영법의 핵심 분류와 기상청 격자 변환에 활용되는 세부 공식을 단계별로 해석합니다.
1. 지도 투영법의 기본 개념과 4대 분류
지구는 완전한 구가 아닌 타원체에 가깝습니다. 이를 평면으로 펼칠 때 필연적으로 면적, 각도, 형태, 거리 중 일부에 왜곡이 발생합니다. 보존하고자 하는 성질에 따라 지도 투영법은 다음과 같이 분류됩니다.
- 정각 도법 (Conformal Projection): 지표면의 각도와 형태를 국지적으로 정확하게 보존합니다. 메르카토르 도법, 람베르트 정각원추도법 등이 대표적이며, 항해나 국지 기상 분석에 유리합니다.
- 등적 도법 (Equivalent Projection): 면적의 왜곡을 방지하여 지도의 실제 비율을 보존합니다. 통계 지도나 토지 분포 분석에 활용됩니다.
- 등거 도법 (Equidistant Projection): 특정 지점으로부터의 거리를 일정하게 보존합니다. 대권 항로나 방사형 거리 측정에 쓰입니다.
- 절충 도법 (Compromise Projection): 각 왜곡을 골고루 최소화하여 전반적인 시각적 만족도를 높이는 도법입니다. 로빈슨 도법 등이 있습니다.
2. 람베르트 정각원추도법이란?
람베르트 정각원추도법은 지구의 자전축 상단에 가상의 원추(Cone)를 씌운 뒤, 구면의 좌표를 원추 면에 정각(Conformal) 상태로 투영한 후 원추를 펼치는 방식입니다. 중위도 지역의 왜곡률이 가장 적기 때문에 한반도와 같이 동서로 긴 영토를 가진 국가의 국지 기상 지도에 가장 이상적입니다. 기준이 되는 두 개의 **표준위도(Standard Parallels)**를 정의하고, 이 위도선상에서는 기하학적 오차가 거의 0이 되도록 설정합니다.
3. 기상청 격자 변환 수학 공식 분석
기상청 격자 변환은 위경도 (Latitude, Longitude)에서 격자 (X, Y)로 변환하는 공식과 그 반대 방향의 공식으로 나뉩니다. 다음은 투영 파라미터 정의와 세부 수식입니다.
기상청 격자 공식 상수
- 지구 반지름(Re) = 6371.00877 km
- 격자 간격(Grid) = 5.000 km
- 기준점 위도(Olata) = 38.0° N / 기준점 경도(Olona) = 126.0° E
- 표준 위도 1(Slat1) = 30.0° / 표준 위도 2(Slat2) = 60.0°
- 투영 원점 격자 좌표 (XO) = 43, (YO) = 136
투영 상수 sn과 sf는 다음 삼각함수를 통해 사전에 산출됩니다.
let RADDEG = Math.PI / 180.0;
let re = Re / Grid;
let slat1 = Slat1 * RADDEG;
let slat2 = Slat2 * RADDEG;
let olat = Olata * RADDEG;
let olon = Olona * RADDEG;
let sn = Math.tan(Math.PI * 0.25 + slat2 * 0.5) / Math.tan(Math.PI * 0.25 + slat1 * 0.5);
sn = Math.log(Math.cos(slat1) / Math.cos(slat2)) / Math.log(sn);
let sf = Math.tan(Math.PI * 0.25 + slat1 * 0.5);
sf = Math.pow(sf, sn) * Math.cos(slat1) / sn;
let ro = Math.tan(Math.PI * 0.25 + olat * 0.5);
ro = re * sf / Math.pow(ro, sn);
임의의 경도(lng)와 위도(lat)를 입력받았을 때, 격자 좌표 (x, y)를 도출하는 최종 연산 공식은 다음과 같습니다.
let ra = Math.tan(Math.PI * 0.25 + lat * RADDEG * 0.5);
ra = re * sf / Math.pow(ra, sn);
let theta = lng * RADDEG - olon;
if (theta > Math.PI) theta -= 2.0 * Math.PI;
if (theta < -Math.PI) theta += 2.0 * Math.PI;
theta *= sn;
let x = Math.floor(ra * Math.sin(theta) + XO + 0.5);
let y = Math.floor(ro - ra * Math.cos(theta) + YO + 0.5);
4. 요약 및 실전 의의
기상청의 격자 매핑은 왜곡을 최소화하면서도 일정한 거리 격자(5km) 기준의 단기 예보를 고르게 표현하기 위해 수학적으로 엄밀히 조율된 결과물입니다. **HereWeather** 서비스는 이 람베르트 투영법을 웹 표준 자바스크립트 엔진에 실시간 60FPS 타이머와 스레드로 결합하여, 사용자가 이동하더라도 GPS 좌표의 갱신을 순식간에 예보 구역의 X, Y 축으로 정밀 전환하여 중단 없는 실시간 동네 날씨 조회를 보장합니다.