3단계 · GDAL + mago 3DTerrainer 레시피

웹 형태 변환

브라우저가 바로 읽는 포맷으로 변환. 뷰어별 처리 방식.

방식·도구 고르기

카드 안 도구 선택 → 아래 단계·결과 전환. ?: 고르는 기준·장단점.

파일 방식

결과를 파일로 구워 정적 호스팅. 브라우저가 파일을 직접 읽음.

도구

서버 방식

떠 있는 서버에 발행. 요청마다 서버가 응답 생성.

도구

엔진 (Cesium for Unreal)

같은 결과 파일(3D Tiles·quantized-mesh)을 언리얼에서 읽음. 엔진 전용 변환 없음.

엔진이 읽는 결과를 만드는 도구

GDAL + mago 3DTerrainer 요약 파일 방식

걸린 시간
-
결과 용량
-
파일 수
-
그릴 수 있는 뷰어
3 / 4

변환 단계

  1. 1Terrain-RGB 인코딩GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기

    gdal_calc -A /work/dem_3857.tif --outfile=/work/r.tif --calc="floor((A+10000)*10/65536)" --type=Byte --hideNoData --overwrite --quiet && gdal_calc -A /work/dem_3857.tif --outfile=/work/g.tif --calc="floor((A+10000)*10/256)%256" --type=Byte --hideNoData --overwrite --quiet && gdal_calc -A /work/dem_3857.tif --outfile=/work/b.tif --calc="floor((A+10000)*10)%256" --type=Byte --hideNoData --overwrite --quiet && gdalbuildvrt -separate /work/rgb.vrt /work/r.tif /work/g.tif /work/b.tif

    높이 = -10000 + (R×65536 + G×256 + B) × 0.1. gdal_calc: 실수 높이 → 0.1m 단위 정수 → R·G·B 세 바이트. gdalbuildvrt -separate: 세 밴드 묶기. 브라우저가 PNG에서 높이로 복원.

  2. 2Terrain-RGB 타일 굽기GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기

    gdal raster tile --min-zoom 10 --max-zoom 13 --skip-blank -r nearest --overview-resampling nearest --webviewer none /work/rgb.vrt /out/terrain-rgb

    -r nearest --overview-resampling nearest: 인코딩 색이 섞이면 엉뚱한 높이 → 평균 대신 최근접. PNG: 무손실 필수. --skip-blank: 빈 타일 생략.

  3. 3Cesium용 quantized-mesh 생성mago 3DTerrainer Java 21, MPL-2.0, v1.14.6DEM(GeoTIFF) → Cesium 지형 포맷(quantized-mesh).자세히 보기

    mago-3d-terrainer -i /raw/BUKHANSAN_ASTGTM2.tif -o /out/terrain -g EGM2008 -max 13 -q

    Cesium 지형: 높이 이미지 대신 삼각형 메시 타일. 평지는 큰 삼각형, 험지는 작은 삼각형 → 용량 절감. -g EGM2008: 지오이드 → 타원체 높이 보정. -max 13: 최대 줌.

결과물

  • Terrain-RGB 타일Terrain-RGB 타일

    높이를 색으로 담은 PNG 타일. MapLibre·Deck.gl용.

  • quantized-mesh 타일Quantized-mesh

    삼각형 메시 타일(.terrain) + 목록(layer.json). Cesium 전용.

뷰어별 처리 · GDAL + mago 3DTerrainer

  • OpenLayers 2D미지원

    2D 지도 — 지형 입체 미지원.

  • MapLibre 2.5D미검증

    결과물
    Terrain-RGB 타일 (terrain-rgb/{z}/{x}/{y}.png)
    처리
    raster-dem 소스 + setTerrain + hillshade
  • MapLibre + Deck.gl 3D미검증

    결과물
    Terrain-RGB 타일 (terrain-rgb/{z}/{x}/{y}.png)
    처리
    TerrainLayer — RGB → 높이 디코딩
  • CesiumJS 3D미검증

    결과물
    quantized-mesh 타일 (terrain)
    처리
    CesiumTerrainProvider

직접 처리: 원본과 같은 형식을 그대로 읽음. 변환 후 처리: 바꾼 결과물을 읽음. 일부 기능만: 그리지만 빠지는 기능 있음(카드의 주의). 미검증: 성공한 실행 기록 없음.