3단계 · go-pmtiles + GDAL 레시피
웹 형태 변환
브라우저가 바로 읽는 포맷으로 변환. 뷰어별 처리 방식.
방식·도구 고르기
2D 벡터 · 데이터 상태별 (크기 기준은 어림)
| 데이터 상태 | 방식 | 고르는 이유 · 형태 |
|---|---|---|
| 수 MB 이하 · 피처 수만 개 이하 | 파일 | GeoJSON 통째: 한 번 받고 끝. 클릭·필터를 브라우저에서 바로. |
| 수십 MB 이상 · 피처 수십만 개 | 파일 | MVT·PMTiles: 줌·화면 범위 타일만. 통째 GeoJSON은 파싱·메모리로 첫 화면 지연. |
| 서버 없이 큰 데이터 배포 | 파일 | PMTiles 한 파일 + Range 요청. 타일 수만 개 올리기 없음. |
카드 안 도구 선택 → 아래 단계·결과 전환. ?: 고르는 기준·장단점.
파일 방식
맞는 경우
- 갱신 드문 데이터 (연 1회 공개 등)
- 서버 운영 없는 배포: 정적 호스팅·CDN
- 미리 구운 타일 → 요청마다 연산 없음, 동시 접속에 강함
한계
- 원본이 바뀌면 다시 굽기
- 속성 조건 조회 불가 → 받은 범위 안 클라이언트 필터만
- 타일 수만~수백만 개 → 올리기·저장 부담 (PMTiles 한 파일로 완화)
결과를 파일로 구워 정적 호스팅. 브라우저가 파일을 직접 읽음.
도구
go-pmtiles + GDAL · 장점
- 변환 없음 → 파일 하나 그대로
- Range 요청 → 서버 불필요
- go-pmtiles로 줌·범위·레이어 확인
단점
- 원본 빌드의 레이어 구성 그대로
- Cesium은 PMTiles 미지원 → GeoJSON 따로
go-pmtiles + GDAL 요약 파일 방식
- 걸린 시간
- -
- 결과 용량
- -
- 파일 수
- -
- 그릴 수 있는 뷰어
- 4 / 4
변환 단계
1PMTiles 그대로 복사셸 명령 (grep, cp) sh, GPL (coreutils, grep), v-파일 복사·글자 세기 기본 명령.자세히 보기
cp /raw/seoul_basemap.pmtiles /out/seoul.pmtiles원본 그대로 — 변환 불필요. OpenLayers·MapLibre: 플러그인, Deck.gl: 타일 요청 함수 교체로 직접 읽기.
2Cesium용 도로 GeoJSON 추출GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기
ogr2ogr -f GeoJSON /out/ogc/collections/roads/items.json /raw/seoul_basemap.pmtiles roads -nlt MULTILINESTRING -lco RFC7946=YES -lco COORDINATE_PRECISION=7Cesium 벡터타일 (MVT) 점·선·면을 타일 한 장 크기로 잘라 담은 이진 파일. 그림이 아닌 도형 → 브라우저에서 색·두께 변경 가능. 자세히 미지원 → roads 레이어를 GeoJSON 한 파일로. -nlt MULTILINESTRING: 도형 종류 통일. COORDINATE_PRECISION=7(약 1cm): 6자리(약 10cm)면 짧은 선이 점으로 뭉개져 GeometryCollection 발생.
결과물
PMTilesPMTiles원본과 같은 형식
원본 그대로 — 뷰어가 직접 읽어 변환 불필요. 필요한 타일만 Range 요청 파일 일부만("100~200바이트") 받는 HTTP 요청. COG·PMTiles는 이것으로 서버 없이 필요한 조각만 읽기. 자세히.
GeoJSON (도로)GeoJSON
타일로 나뉘지 않은 도로 전체. Cesium용.
뷰어별 처리 · go-pmtiles + GDAL
OpenLayers 2D미검증
- 결과물
- PMTiles (seoul.pmtiles)
- 처리
VectorTileLayer + PMTilesVectorSource (ol-pmtiles)- 메모
- ol-pmtiles 플러그인으로 직접 읽기.
MapLibre 2.5D미검증
- 결과물
- PMTiles (seoul.pmtiles)
- 처리
pmtiles:// 프로토콜 + vector 소스- 메모
- pmtiles 프로토콜 등록 후 직접 읽기.
MapLibre + Deck.gl 3D미검증
- 결과물
- PMTiles (seoul.pmtiles)
- 처리
MVTLayer + PMTiles getZxy (fetch 교체)- 메모
- MVTLayer 타일 요청 → PMTiles 읽기로 교체.
CesiumJS 3D미검증
- 결과물
- GeoJSON (도로) (ogc/collections/roads/items.json)
- 처리
GeoJsonDataSource- 메모
- 벡터타일 미지원 → GeoJSON 사용.
직접 처리: 원본과 같은 형식을 그대로 읽음. 변환 후 처리: 바꾼 결과물을 읽음. 일부 기능만: 그리지만 빠지는 기능 있음(카드의 주의). 미검증: 성공한 실행 기록 없음.