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
측지·좌표계

지오이드고 보정

한 줄 요약

BIM 데이터가 사용하는 정표고(orthometric height)와 Cesium terrain이 사용하는 타원체고(ellipsoidal height)의 차이를 보정하는 과정. 보정하지 않으면 모델이 지면 아래에 가라앉아 보인다.

두 가지 "높이"가 존재한다

일상에서 "이 건물의 높이는 해발 50m"라고 말할 때, 이 "해발"은 사실 단순하지 않다. 높이를 측정하는 기준면이 두 가지 있기 때문이다.

정표고 (Orthometric Height, H)

평균 해수면(지오이드)을 기준으로 측정한 높이다. 건설·측량에서 사용하는 일상적인 "해발 고도"가 이것이다. 수준 측량으로 측정하며, "물이 어느 방향으로 흐르는가"를 정확히 반영한다. BIM 설계 소프트웨어(Revit, Civil 3D 등)에서 입력하는 높이가 정표고다.

타원체고 (Ellipsoidal Height, h)

수학적 타원체(WGS84 타원체)를 기준으로 측정한 높이다. GPS가 직접 출력하는 높이이며, Cesium.js의 기본 terrain 데이터가 사용하는 높이 체계다. 수학적으로 깔끔하지만, 실제 해수면과는 미세하게 다르다.

지오이드고 (Geoid Height, N)

두 기준면 사이의 차이가 지오이드고다. 관계는 단순하다:

타원체고(h) = 정표고(H) + 지오이드고(N)

또는:

정표고(H) = 타원체고(h) - 지오이드고(N)

지오이드고는 지구 전체에서 일정하지 않다. 지구 내부의 질량 분포가 불균일하기 때문에 지역마다 다르다. 한국의 경우 대략 2030m 범위에 분포한다. 즉, 같은 지점에서 정표고와 타원체고가 2030m 차이가 날 수 있다는 뜻이다.

왜 문제가 되는가

Cesium 지구본 위에 3D 모델을 배치할 때, 높이 기준이 일치하지 않으면 모델이 잘못된 고도에 놓인다.

드론 이미지 기반 Mesh 모델은 상용 포토그래메트리 도구에서 타원체고 기준으로 출력 설정이 가능하므로, Cesium terrain과 높이 체계가 일치한다.

그런데 BIM 데이터는 정표고로만 입력된다. 설계 소프트웨어에서 타원체고로 변환하는 옵션이 없다. 따라서 BIM 모델을 Cesium에 그대로 올리면, 지오이드고(한국 기준 약 20~30m)만큼 모델이 지면 아래에 가라앉아 보이는 현상이 발생한다.

이 문제는 이전 뷰어(로컬 좌표 기반)에서는 발생하지 않았다. 로컬 뷰어는 지구본이 아니라 로컬 공간에 모델을 배치하므로 높이 기준면 자체가 문제되지 않았다. Cesium(글로벌 지구본 기반)으로 전환한 뒤에야 이 불일치가 드러난 것이다.

보정 방법

보정 원리는 단순하다. BIM 모델의 중심 좌표(경도, 위도)에 해당하는 지오이드고(N)를 조회한 뒤, 모델의 높이에 N을 더해주면 된다.

Cesium 배치 높이 = BIM 정표고(H) + 지오이드고(N) = 타원체고(h)

지오이드고 데이터는 국가 측량 기관이 제공하는 지오이드 모델에서 얻을 수 있다. 한국의 경우 국토지리정보원에서 제공하는 KNGeoid 모델이 있으며, 글로벌하게는 EGM96, EGM2008 같은 모델이 사용된다. 이 데이터를 활용하여 특정 좌표의 지오이드고를 조회하는 시스템을 구축하면 된다.

지오이드고를 적용하는 것과 안 하는 것의 차이

항목보정 전보정 후
Mesh 모델 (타원체고 출력)정상 배치정상 배치
BIM 모델 (정표고 입력)지면 아래 20~30m 가라앉음정상 배치

Mesh와 BIM이 같은 현장에 공존할 때, 보정 없이는 Mesh는 정상인데 BIM만 가라앉아 보이는 현상이 발생한다.

이 경험에서 추출한 원칙

  1. 높이는 "몇 미터"가 아니라 "무엇을 기준으로 몇 미터"다. 같은 50m라도 정표고 50m와 타원체고 50m는 실제 위치가 20~30m 다르다. 기준면을 항상 확인해야 한다.

  2. 로컬 뷰어에서 글로벌 뷰어로 전환하면, 이전에 숨어있던 좌표 문제가 드러난다. 로컬 공간에서는 기준면 차이가 문제되지 않지만, 지구본 위에 올리는 순간 모든 좌표가 글로벌 기준으로 통일되어야 한다.