3단계 · citygml-tools + cjio + 3d-tiles-tools 레시피
웹 형태 변환
브라우저가 바로 읽는 포맷으로 변환. 뷰어별 처리 방식.
방식·도구 고르기
3D 모델 · 데이터 상태별 (크기 기준은 어림)
| 데이터 상태 | 방식 | 고르는 이유 · 형태 |
|---|---|---|
| 단일 모델 수 MB (glb·gltf) | 파일 | glb 통째 + 위치·방향 지정. 가장 단순. |
| 여러 동 · 고해상 텍스처 (수십 MB 이상) | 파일 | 3D Tiles: 타일 분할·LOD. 보이는 것만. |
| 같은 모델 반복 배치 (가로수·가로등) | 파일 | i3dm(1.0)·EXT_mesh_gpu_instancing(1.1): 모델 한 벌 + 위치 목록. |
| CityGML 속성 조회·갱신 | 파일 | 3DCityDB(PostGIS)에 적재 → pg2b3dm으로 3D Tiles 굽기. 원본은 DB, 결과는 파일 → 갱신 시 다시 굽기. |
| 고화질 · 시뮬레이션 · VR | 엔진 | Cesium for Unreal: 같은 3D Tiles. 재질·조명·그림자. |
카드 안 도구 선택 → 아래 단계·결과 전환. ?: 고르는 기준·장단점.
파일 방식
맞는 경우
- 갱신 드문 데이터 (연 1회 공개 등)
- 서버 운영 없는 배포: 정적 호스팅·CDN
- 미리 구운 타일 → 요청마다 연산 없음, 동시 접속에 강함
한계
- 원본이 바뀌면 다시 굽기
- 속성 조건 조회 불가 → 받은 범위 안 클라이언트 필터만
- 타일 수만~수백만 개 → 올리기·저장 부담 (PMTiles 한 파일로 완화)
결과를 파일로 구워 정적 호스팅. 브라우저가 파일을 직접 읽음.
도구
citygml-tools + cjio + 3d-tiles-tools · 장점
- CityJSON을 거쳐 단계마다 검사·수정
- 원점 이동·glb 압축 직접 제어
- 전부 오픈소스 CLI
단점
- 도구 3~4개 연결 → 단계 많음
- 타일 분할·LOD 없음 (glb 하나) → 큰 도시엔 부적합
- 속성 대부분 glb로 안 옮겨짐
mago 3DTiler · 장점
- CityGML·IFC·glTF 등 입력 → 3D Tiles 한 도구로
- 단순화 단계(LOD)·타일 분할 자동
- 국내 개발(Gaia3D) 오픈소스
단점
- Java 실행 → 큰 입력은 메모리 설정 필요
- 한 번에 변환 → 중간 결과 확인·수정 어려움
- 좌표계·축 옵션 직접 지정 (-c, -rx 등)
3DCityDB + pg2b3dm · 장점
- CityGML 표준 DB 스키마 → 속성·LOD 보존
- SQL로 건물 선택·집계
- pg2b3dm: DB → 3D Tiles 1.1
단점
- DB 기동·적재 무거움
- 스키마 복잡 (면 집계 SQL 필요)
- DB가 바뀌면 다시 굽기
엔진 (Cesium for Unreal)
맞는 경우
- 화질: 조명·그림자·재질·후처리
- 시뮬레이션·VR·다른 3D 에셋과 합성
- 브라우저 메모리 한계를 넘는 장면 (데스크톱 GPU)
한계
- 브라우저 밖: 설치형 앱 빌드 또는 Pixel Streaming
- GPU 필요, 화면 확인 수동
- 3D Tiles·지형만. 2D 벡터·영상은 지형 위 덧씌움(WMS·WMTS·XYZ)
같은 결과 파일(3D Tiles·quantized-mesh)을 언리얼에서 읽음. 엔진 전용 변환 없음.
엔진이 읽는 결과를 만드는 도구
citygml-tools + cjio + 3d-tiles-tools · 장점
- CityJSON을 거쳐 단계마다 검사·수정
- 원점 이동·glb 압축 직접 제어
- 전부 오픈소스 CLI
단점
- 도구 3~4개 연결 → 단계 많음
- 타일 분할·LOD 없음 (glb 하나) → 큰 도시엔 부적합
- 속성 대부분 glb로 안 옮겨짐
mago 3DTiler · 장점
- CityGML·IFC·glTF 등 입력 → 3D Tiles 한 도구로
- 단순화 단계(LOD)·타일 분할 자동
- 국내 개발(Gaia3D) 오픈소스
단점
- Java 실행 → 큰 입력은 메모리 설정 필요
- 한 번에 변환 → 중간 결과 확인·수정 어려움
- 좌표계·축 옵션 직접 지정 (-c, -rx 등)
3DCityDB + pg2b3dm · 장점
- CityGML 표준 DB 스키마 → 속성·LOD 보존
- SQL로 건물 선택·집계
- pg2b3dm: DB → 3D Tiles 1.1
단점
- DB 기동·적재 무거움
- 스키마 복잡 (면 집계 SQL 필요)
- DB가 바뀌면 다시 굽기
citygml-tools + cjio + 3d-tiles-tools 요약 파일 방식
- 걸린 시간
- -
- 결과 용량
- -
- 파일 수
- -
- 그릴 수 있는 뷰어
- 2 / 4
변환 단계
1CityJSON 변환citygml-tools Java, Apache-2.0, v2.5.0CityGML → CityJSON 변환, 버전·좌표계 손질.자세히 보기
citygml-tools to-cityjson /work/rp/tokyo_station_bldg.gml -L warn -o /work/cj같은 내용 JSON화, 좌표 정수 + 배율 → 10MB에서 약 0.7MB. 지붕·벽 의미·속성 유지.
2도쿄역 원점 이동·glb 내보내기cjio Python, MIT, v0.10.1CityJSON CLI. 좌표계 변환, glb 내보내기.자세히 보기
cjio --suppress_msg /work/cj/tokyo_station_bldg.json crs_translate --minxyz 5995.185 35367.230 0 export glb /work/bldg.glb좌표 수만 m → glTF 웹용 3D 모델 표준. .gltf: JSON + 외부 파일, .glb: 파일 하나로 묶은 이진 형태. 자세히 정밀도 저하. crs_translate: 도쿄역(6677 좌표 -5995.185, -35367.230)을 원점으로. export glb: 면 삼각형 분할 후 glb 출력.
3웹용 압축glTF Transform TypeScript, MIT, v4.5.1glTF 웹용 최적화 도구. 묶기, 압축, 텍스처 축소.자세히 보기
gltf-transform optimize /work/bldg.glb /out/model/bldg.glb --compress meshopt중복 꼭짓점 병합. --compress meshopt: 형상 압축.
4도쿄역 배치 타일셋 생성3d-tiles-tools TypeScript, Apache-2.0, v0.5.4Cesium의 3D Tiles 손질 도구. glb 타일셋 감싸기, 버전 올리기.자세히 보기
3d-tiles-tools createTilesetJson -i /out/model/bldg.glb -o /out/model/tileset.json --cartographicPositionDegrees 139.7671 35.6812 0 -f--cartographicPositionDegrees: 원점(도쿄역) 경위도 → tileset.json, Cesium 제자리 배치.
결과물
GLB + 놓을 위치glTF (GLB)
85동을 메시 하나로, 건물별 속성 없음. Deck.gl용.
3D Tiles (glb 감싸기)3D Tiles
위치 내장 타일셋. Cesium용.
뷰어별 처리 · citygml-tools + cjio + 3d-tiles-tools
OpenLayers 2D미지원
2D 지도 — 3D 건물 모델 미지원.
MapLibre 2.5D미지원
glTF·3D Tiles 기본 레이어 없음.
MapLibre + Deck.gl 3D미검증
- 결과물
- GLB + 놓을 위치 (model/bldg.glb)
- 처리
ScenegraphLayer- 메모
- ScenegraphLayer로 도쿄역 기준점에 배치.
CesiumJS 3D미검증
- 결과물
- 3D Tiles (glb 감싸기) (model/tileset.json)
- 처리
Cesium3DTileset
직접 처리: 원본과 같은 형식을 그대로 읽음. 변환 후 처리: 바꾼 결과물을 읽음. 일부 기능만: 그리지만 빠지는 기능 있음(카드의 주의). 미검증: 성공한 실행 기록 없음.