3단계 · GDAL 레시피
웹 형태 변환
브라우저가 바로 읽는 포맷으로 변환. 뷰어별 처리 방식.
방식·도구 고르기
통째 파일이 무거울 때: ① 타일로 굽기(파일) → 화면 범위 조각만 받음. ② 그래도 브라우저 그리기 부담 → WMS(서버)로 서버가 그림까지. 갱신·조회·연동이 필요하면 크기와 상관없이 서버.
2.5D 벡터 · 데이터 상태별 (크기 기준은 어림)
| 데이터 상태 | 방식 | 고르는 이유 · 형태 |
|---|---|---|
| 건물 수천~수만 동 | 파일 | GeoJSON + 돌출 (MapLibre fill-extrusion·Deck.gl extruded). 높이 속성만 있으면 충분. |
| 도시 단위 수십만 동 | 파일 | 3D Tiles (mago·pg2b3dm): 높이로 세운 상자를 타일·LOD로. 보이는 타일만. |
| 자주 갱신 · 높이 색 지도만 | 서버 | GeoServer WMS 또는 martin MVT(돌출은 브라우저). PostGIS 수정 즉시 반영. |
| 도시 배경 (지형·영상과 함께) | 엔진 | 같은 3D Tiles 사용. 단독으로는 보통 불필요 — 높이만 준 상자라 화질 이득 적음 (노선도에서 제외). |
카드 안 도구 선택 → 아래 단계·결과 전환. ?: 고르는 기준·장단점.
파일 방식
맞는 경우
- 갱신 드문 데이터 (연 1회 공개 등)
- 서버 운영 없는 배포: 정적 호스팅·CDN
- 미리 구운 타일 → 요청마다 연산 없음, 동시 접속에 강함
한계
- 원본이 바뀌면 다시 굽기
- 속성 조건 조회 불가 → 받은 범위 안 클라이언트 필터만
- 타일 수만~수백만 개 → 올리기·저장 부담 (PMTiles 한 파일로 완화)
결과를 파일로 구워 정적 호스팅. 브라우저가 파일을 직접 읽음.
도구
GDAL · 장점
- 파일 하나 → 가장 단순
- MapLibre fill-extrusion·Deck.gl extruded로 바로
- 속성 클릭·필터를 브라우저에서
단점
- 통째 로드 → 수십만 동이면 첫 화면 지연
- OpenLayers 입체 미지원
- 지붕 모양 없음 (높이만 준 상자)
mago 3DTiler · 장점
- 타일·LOD → 보이는 건물만 로드
- SHP·GeoJSON + 높이 열 지정으로 바로
- Deck.gl·CesiumJS 모두 표시
단점
- MultiPolygon·작은 구멍에 약함 → 전처리 필요
- Java 실행 → 메모리 설정 필요
- OpenLayers·MapLibre 미지원
PostGIS + pg2b3dm · 장점
- CG_Extrude로 높이 돌출을 SQL에서
- pg2b3dm: 표 → 3D Tiles 1.1 (속성 포함)
- 조건으로 고른 건물만 굽기
단점
- DB 기동·적재 단계 추가
- SFCGAL 확장 필요
- DB가 바뀌면 다시 굽기
서버 방식
맞는 경우
- 자주 바뀌는 데이터: DB 수정 즉시 반영
- 속성 조건 조회: WFS (CQL_FILTER)
- WMS·WFS 표준 요구: GIS 소프트웨어·타 기관 시스템 연동
- 저사양 단말: WMS는 서버가 그림까지 → 브라우저는 이미지만
- 접근 권한·사용량 관리
한계
- 서버 상시 운영: 메모리·DB·보안 패치
- 요청마다 연산 → 타일 캐시(GeoWebCache 등) 없으면 동시 접속에 약함
- 구성 요소 증가: DB + 서버 + 프록시
떠 있는 서버에 발행. 요청마다 서버가 응답 생성.
도구
GeoServer · 장점
- WMS·WMTS·WFS 표준 → GIS 소프트웨어·타 기관 연동
- OGC API Features: WFS 후속, 주소만으로 GeoJSON
- SLD로 서버에서 스타일
- 국내 현장 사용 많음
단점
- Java 서버 상시 운영
- 설정 단계 많음 (작업공간·저장소·스타일·레이어)
- 타일 캐시 없으면 요청마다 그림
martin · 장점
- Rust → 가볍고 빠름
- 설정 거의 없음 (표 자동 발견)
- MVT → 스타일은 브라우저에서
단점
- 시작할 때만 표 탐색 → 새 표는 재시작
- MVT만 (WMS·WFS 없음)
- Cesium 미지원 (벡터타일)
엔진 (Cesium for Unreal)
맞는 경우
- 화질: 조명·그림자·재질·후처리
- 시뮬레이션·VR·다른 3D 에셋과 합성
- 브라우저 메모리 한계를 넘는 장면 (데스크톱 GPU)
한계
- 브라우저 밖: 설치형 앱 빌드 또는 Pixel Streaming
- GPU 필요, 화면 확인 수동
- 3D Tiles·지형만. 2D 벡터·영상은 지형 위 덧씌움(WMS·WMTS·XYZ)
같은 결과 파일(3D Tiles·quantized-mesh)을 언리얼에서 읽음. 엔진 전용 변환 없음.
엔진이 읽는 결과를 만드는 도구
mago 3DTiler · 장점
- 타일·LOD → 보이는 건물만 로드
- SHP·GeoJSON + 높이 열 지정으로 바로
- Deck.gl·CesiumJS 모두 표시
단점
- MultiPolygon·작은 구멍에 약함 → 전처리 필요
- Java 실행 → 메모리 설정 필요
- OpenLayers·MapLibre 미지원
PostGIS + pg2b3dm · 장점
- CG_Extrude로 높이 돌출을 SQL에서
- pg2b3dm: 표 → 3D Tiles 1.1 (속성 포함)
- 조건으로 고른 건물만 굽기
단점
- DB 기동·적재 단계 추가
- SFCGAL 확장 필요
- DB가 바뀌면 다시 굽기
GDAL 요약 파일 방식
- 걸린 시간
- -
- 결과 용량
- -
- 파일 수
- -
- 그릴 수 있는 뷰어
- 3 / 4
변환 단계
1GeoJSON 내보내기 (OGC API Features 경로)GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogr2ogr -f GeoJSON /out/ogc/collections/buildings/items.json /work/buildings.geojson -lco RFC7946=YES -lco COORDINATE_PRECISION=7건물 수천 동은 GeoJSON 한 파일로 충분. COORDINATE_PRECISION=7: 좌표 자릿수 축소 → 용량 절감.
결과물
GeoJSON (height 속성)GeoJSON
뷰어가 height 값만큼 바닥면 돌출.
뷰어별 처리 · GDAL
OpenLayers 2D미지원
2D 지도 — 건물 돌출 미지원.
MapLibre 2.5D미검증
- 결과물
- GeoJSON (height 속성) (ogc/collections/buildings/items.json)
- 처리
geojson 소스 + fill·line·circle (높이 있으면 fill-extrusion)- 메모
- fill-extrusion 레이어로 돌출.
MapLibre + Deck.gl 3D미검증
- 결과물
- GeoJSON (height 속성) (ogc/collections/buildings/items.json)
- 처리
GeoJsonLayer (높이 있으면 extruded)- 메모
- GeoJsonLayer extruded 옵션으로 돌출.
CesiumJS 3D미검증
- 결과물
- GeoJSON (height 속성) (ogc/collections/buildings/items.json)
- 처리
GeoJsonDataSource- 메모
- 다각형별 extrudedHeight로 돌출.
직접 처리: 원본과 같은 형식을 그대로 읽음. 변환 후 처리: 바꾼 결과물을 읽음. 일부 기능만: 그리지만 빠지는 기능 있음(카드의 주의). 미검증: 성공한 실행 기록 없음.