3D GIS 지식 그래프

지리공간 기술과 프론트엔드 엔지니어링을 연결하는 인터랙티브 포트폴리오

  • 3D Tiles 스펙 — 클러스터: format, 난이도: advanced
  • 면적 계산 알고리즘 — Delaunay 삼각분할 + 벡터 외적 — 클러스터: geodesy, 난이도: expert
  • AWS Lambda → EC2 트리거 — 클러스터: infrastructure, 난이도: intermediate
  • Cesium.js 도입 결정 — 클러스터: decision, 난이도: intermediate
  • Cesium 마우스 이벤트 처리 — 클러스터: frontend, 난이도: advanced
  • Chrome DevTools 메모리 프로파일링 — 클러스터: problem, 난이도: intermediate
  • 좌표계 변환 EPSG→WGS84→ECEF — 클러스터: geodesy, 난이도: advanced
  • Docker 컨테이너 — 클러스터: infrastructure, 난이도: intermediate
  • Draco 지오메트리 압축 — 클러스터: optimization, 난이도: intermediate
  • FBXLoader 메모리 누수 — 클러스터: problem, 난이도: intermediate
  • 지오이드고 보정 — 클러스터: geodesy, 난이도: advanced
  • GPU 텍스처 BC7·ASTC·ETC2 — 클러스터: graphics, 난이도: advanced
  • IFC→3D Tiles 자동 변환 파이프라인 — 클러스터: implementation, 난이도: expert
  • KTX2 Basis Universal — 클러스터: optimization, 난이도: advanced
  • LOD 레벨 오브 디테일 — 클러스터: graphics, 난이도: advanced
  • Cesium 측정 도구 7종 — 클러스터: implementation, 난이도: advanced
  • 자오선 수차 보정 — 클러스터: geodesy, 난이도: expert
  • Mesh·BIM·Point Cloud — 클러스터: graphics, 난이도: beginner
  • modelMatrix 위치·회전·스케일 — 클러스터: implementation, 난이도: advanced
  • 낙관적 업데이트 — 클러스터: frontend, 난이도: advanced
  • 공간 분할 기법 — Quadtree와 AABB — 클러스터: graphics, 난이도: advanced
측지·좌표계

자오선 수차 보정

한 줄 요약

로컬 평면 좌표계의 "위쪽"(Grid North)과 지구상의 실제 "북쪽"(True North) 사이의 회전 오차를 보정하는 과정. 보정하지 않으면 모델이 미세하게 회전되어 배치된다.

Grid North와 True North는 다르다

지도를 펼치면 "위쪽이 북쪽"이라고 생각한다. 그러나 이것은 근사다.

로컬 평면 좌표계(예: EPSG 5186)는 특정 경도선(중앙 자오선)을 기준으로 평면에 투영한 것이다. 이 투영에서 "위쪽"은 Grid North(도북)라고 부르며, 중앙 자오선 위에서만 실제 북쪽(True North, 진북)과 일치한다.

중앙 자오선에서 동쪽이나 서쪽으로 벗어날수록, Grid North와 True North 사이에 회전 오차가 발생한다. 이 오차가 자오선 수차(Meridian Convergence, γ)다.

쉽게 말하면, 서울에서 건설 현장의 "북쪽"이라고 표시한 방향이, 지구본 위에서 보면 실제 북극 방향과 미세하게 틀어져 있다는 것이다.

오차의 크기

자오선 수차는 다음 공식으로 계산된다:

γ = arctan(tan(Δλ) × sin(φ))

여기서:

  • Δλ: 해당 지점의 경도와 중앙 자오선 경도의 차이
  • φ: 해당 지점의 위도

EPSG 5186의 중앙 자오선은 경도 127도다. 서울(약 127도)은 중앙 자오선과 거의 일치하므로 자오선 수차가 거의 0에 가깝다. 그러나 부산(약 129도)이나 인천(약 126.5도)처럼 중앙 자오선에서 벗어나면, 수차가 0.5~1도 이상이 될 수 있다.

1도의 회전 오차는 작아 보이지만, 수백 미터 규모의 구조물에서는 끝단에서 수 미터의 위치 차이로 나타난다.

왜 문제가 되는가

IFC(BIM) 데이터는 로컬 평면 좌표계에서 설계되므로, 모델의 방향이 Grid North 기준이다. 이 모델을 Cesium 지구본 위에 올릴 때, Cesium은 True North 기준으로 모델을 배치한다.

자오선 수차를 보정하지 않으면, 모델이 미세하게 회전되어 배치된다. 교량의 경우 양 끝이 도로와 어긋나 보이고, 파이프라인의 경우 연결부가 맞지 않아 보인다.

이 문제가 특히 까다로운 이유는 오차가 미세해서 원인을 특정하기 어렵다는 것이다. 모델이 90도 돌아가 있다면 바로 알아차리겠지만, 0.5~1도 정도의 회전은 "뭔가 살짝 이상한데 왜 그런지 모르겠다"는 수준이다. 좌표 변환 로직의 버그인지, 원본 데이터의 문제인지, 아니면 다른 원인인지 구분하기 어렵다.

보정 방법

로컬 평면 좌표계의 모델을 Cesium 지구본에 배치할 때, ENU(East-North-Up) 좌표계에서 ECEF 좌표계로 변환하는 회전 행렬을 적용한다.

이 보정은 로컬 좌표계의 3D 모델을 글로벌 지구본에 배치하는 과정에서 필요하다. 각 타일의 좌표를 ECEF로 변환할 때 자오선 수차를 함께 반영하여, 모델이 지구본 위에서 정확한 방향으로 배치되도록 한다.

지오이드고 보정과의 관계

좌표계 변환 노드에서 다룬 수평 좌표 변환(EPSG → WGS84 → ECEF) 위에, 두 가지 추가 보정이 필요하다:

  • 지오이드고 보정: 수직(높이) 방향의 보정. 정표고 → 타원체고.
  • 자오선 수차 보정: 수평(회전) 방향의 보정. Grid North → True North.

두 보정은 독립적이다. 지오이드고 보정만 하면 모델의 높이는 맞지만 방향이 틀어지고, 자오선 수차 보정만 하면 방향은 맞지만 높이가 틀어진다. 두 보정을 모두 적용해야 모델이 정확한 위치와 방향으로 배치된다.

이 경험에서 추출한 원칙

  1. "미세한 오차"가 가장 찾기 어렵다. 극적인 오류(모델이 반대편에 나타남)는 바로 원인을 추적할 수 있지만, 0.5~1도의 회전 오차는 "뭔가 이상한데 왜인지 모르겠다"는 상태를 만든다. 측량/GIS 도메인의 기초 지식(자오선 수차, 지오이드고)을 모르면 이 원인에 도달하기까지 상당한 시간이 걸린다.

  2. 좌표 변환은 수평(x, y)만으로 끝나지 않는다. 수평 좌표(EPSG → ECEF)를 완벽하게 변환해도, 수직(지오이드고)과 회전(자오선 수차)을 빠뜨리면 모델이 가라앉거나 틀어진다. 좌표 변환은 "위치 + 높이 + 방향" 세 가지를 모두 다뤄야 완전하다.