MapLibre Tile 공개 - 현대적이고 효율적인 벡터 타일 포맷
(maplibre.org)- MapLibre Tile(MLT) 은 기존 Mapbox Vector Tile(MVT)을 대체하는 새로운 차세대 벡터 타일 포맷으로, 대규모 지리공간 데이터 처리 효율을 높이기 위해 설계됨
- 최대 6배 향상된 압축률과 SIMD 기반 빠른 디코딩 성능을 제공해 저장 공간, 지연 시간, 캐시 효율을 개선
- 향후 3D 좌표(고도), GPU 기반 처리, 복합 데이터 타입, 선형 참조 및 m-values 지원을 목표로 확장 가능
- 현재 MapLibre GL JS와 MapLibre Native에서 바로 사용 가능하며, 데모 타일과 변환 서버, Planetiler을 통한 생성 지원
- 오픈소스 커뮤니티와 기업, 학계의 협력으로 개발된 포맷으로, Microsoft와 AWS의 후원을 받아 완성됨
MapLibre Tile 소개
-
MapLibre Tile(MLT) 은 [Mapbox Vector Tile(MVT)]의 후속 포맷으로, 급증하는 지리공간 데이터량과 복잡한 차세대 소스 포맷을 처리하기 위해 처음부터 새로 설계됨
- 최신 하드웨어와 그래픽 API의 성능을 활용하도록 설계되어, 행성 규모의 2D 및 2.5D 베이스맵을 고성능으로 처리 및 렌더링 가능
- 현재 구현은 MVT와 기능적으로 동등하지만, 성능과 효율성 측면에서 개선됨
-
주요 기술적 개선점
- 압축률 향상: 대형 타일에서 최대 6배 개선, 컬럼 지향 레이아웃과 재귀적 경량 인코딩을 적용
- 디코딩 성능 향상: SIMD/벡터화 명령어와 결합 가능한 빠르고 가벼운 인코딩 구조
- 결과적으로 지연 시간 감소, 저장 및 전송 비용 절감, 캐시 활용도 향상 효과
향후 확장 가능성
-
MLT는 다음과 같은 미래 기능 지원을 염두에 두고 설계됨
- 3D 좌표(고도) 지원 강화
- CPU 및 GPU 효율적 처리를 위한 저장 및 메모리 포맷 최적화
- 선형 참조(linear referencing) 및 m-values 지원으로 Overture Maps(GeoParquet) 같은 차세대 포맷과 호환
- 중첩 속성, 리스트, 맵 등 복합 타입 지원
-
MLT의 발전 방향은 커뮤니티의 요구에 따라 결정되며, 다양한 확장 아이디어와 기여를 환영함
- 관련 자료로는 Markus Tremmel의 FOSS4G 2024 발표 슬라이드, YouTube 강연, ACM 논문이 제공됨
사용 가능 시점 및 통합
-
MLT는 현재 즉시 사용 가능
- MapLibre GL JS와 MapLibre Native 모두 MLT 소스를 지원
- 스타일 JSON의
encoding속성에mlt값을 지정해 사용 가능
-
체험 및 개발 방법
- MLT 기반 데모 타일 스타일 사용
- Encoding server를 통해 기존 MVT 스타일을 MLT로 실시간 변환
- Planetiler의 차기 버전에서 MLT 생성 지원 예정
- 통합 현황은 공식 구현 상태 페이지에서 확인 가능
-
MLT 사용 경험 공유를 위해 Slack의
#maplibre-tile-format채널이나 GitHub 이슈/디스커션 참여 권장
감사 및 협력
- MLT는 학계, 오픈소스, 기업 간 다년간의 협력을 통해 개발됨
- Markus Tremmel이 포맷을 고안, Yuri Astrakhan이 프로젝트를 주도
- Tim Sylvester가 C++ 구현, Harel Mazor, Benedikt Vogl, Niklas Greindl이 JavaScript 구현 담당
- Microsoft와 AWS가 개발 자금을 지원
주석
- MLT는 MVT와 달리, 컬럼 내 값의 타입이 피처마다 달라지는 레이어는 지원하지 않음
Hacker News 의견들
-
토요일 FOSDEM의 Geospatial devroom에서 열리는 MapLibre 발표에 참석해보길 권함
행사 일정 링크- 자리가 있다면 꼭 가보고 싶음 😄
-
예제 페이지를 조금 찾아봤는데, MLT로 지도 표시 예시와 기존 지도 표시 예시를 비교해봄
콘솔 로그를 보니 약 10% 정도 압축 효율이 향상된 걸 확인했음. 꽤 인상적임- 다만 데모 타일 스타일은 실제 OpenMapTiles 기반의 프로덕션 베이스맵과는 비교하기 어려움
MLT 포맷에는 다양한 경량 인코딩이 내장되어 있고, 타일마다 다른 방식으로 인코딩할 수도 있음
따라서 최적의 조합을 찾기 위해 휴리스틱 접근이 필요하며, 타일 크기와 디코딩 성능 간의 트레이드오프가 존재함
아직 초기 단계이지만, AWS가 올해도 MLT 최적화 작업을 후원 중이라 앞으로 개선 여지가 많음
벤치마크 시에는 전체 타일 크기보다 실제 사용 패턴을 보는 게 중요함 — 아무도 바다 한가운데를 확대하지 않으니까 😉
- 다만 데모 타일 스타일은 실제 OpenMapTiles 기반의 프로덕션 베이스맵과는 비교하기 어려움
-
최근 pmtiles 기반 솔루션을 배포했는데 정말 만족스러움
PMTiles 문서 참고
pmtiles는 MVT를 사용하지만, 앞으로 MLT로 변환할 수 있는 툴이 나오길 기대함 -
MapLibre는 브라우저에서 지도를 표시하기에 지금까지 써본 JS 라이브러리 중 최고임
새 포맷으로 전환될 걸 생각하니 기대됨- 완전 공감함 👍
-
Planetiler에서는
--tile-format=mltCLI 옵션으로 MLT 생성이 가능함
현재는 main 브랜치에만 있지만 곧 릴리스 예정임
테스트 결과 기본 설정에서 OpenMapTiles 아카이브 크기가 약 10% 감소했음. 추가 최적화도 진행 중임 -
아쉽게도 Tilemaker는 중기적으로 MLT 지원 계획이 없음
그래서 커뮤니티 일부는 전환에서 소외될 수 있음
관련 논의는 이슈 스레드 참고- 그래도 나중에 변환은 가능함. MVT에서 MLT로 바꾸는 Java 기반 변환 프로그램이 저장소에 있음
-
벡터 파일 포맷이 여전히 새롭게 재발명되고 있다는 게 흥미로움
압축률이나 디코딩 속도 향상은 이해하지만, 이 디자인을 이끈 새로운 아이디어나 통찰이 무엇인지 궁금함 -
이 프로젝트를 한동안 지켜봤는데 정말 기대됨
MapLibre 스택 사용자 입장에서 마지막 큰 과제는 PostGIS에 As_MLT() 함수가 추가되는 것이라 생각함- 그리고 Geoserver 지원도 필요함
-
혹시 지도 셀프호스팅 하는 사람 있는지? 장단점과 사용하는 툴이 궁금함
- 우리는 몇 년째 protomaps(pmtiles) 를 셀프호스팅 중임
서버는 단순히 정적 파일을 range request로 제공할 수 있으면 됨 (Caddy나 Nginx 모두 가능)
맵은 하나의 큰 파일이라 여러 서버 간 공유도 쉬움
단점은 거의 없지만, 클라이언트 측에 커스텀 프로토콜 지원 라이브러리를 추가해야 함
스타일 편집은 약간 까다로운데, Maputnik 에디터로 protomaps 스타일을 불러와 수정 가능함
가이드 문서 참고 - 나도 pmtiles로 호주 지역 매장 찾기 지도를 셀프호스팅함
전 세계 저해상도 지도(50MB)와 호주 고해상도 지도(900MB)를 따로 만들어 S3에 업로드했음
최신 데이터가 필요 없어서 그대로 두고 쓰는데 아주 잘 작동함 - 인쇄용 고해상도 지도 제작 프로젝트에서도 셀프호스팅이 유일한 해법이었음
상용 API는 300dpi 래스터 생성 비용이 너무 높거나 재판매 제한이 있었음 - 나도 셀프호스팅 중임. 장점은 데이터와 스택을 완전히 통제할 수 있다는 점이고, 단점은 직접 스택을 구축하고 클라우드 관리해야 함
PostGIS로 벡터 타일을 저장·서빙하고, AWS S3에 GeoTiff COG 형태로 래스터 데이터를 저장함 - 우리는 mod_tile+renderd를 사용함
OSM에서 관심 지역(콜로라도)의 pbf를 빌드하고, openstreetmap-tile-server 컨테이너를 띄운 뒤 스타일을 적용해 renderd로 렌더링함
- 우리는 몇 년째 protomaps(pmtiles) 를 셀프호스팅 중임
-
MLT도 멋지지만, 3D 타일 포맷에서도 이런 발전이 있었으면 좋겠음
현재는 Cesium의 3D Tiles가 사실상 유일한 선택지인데, 성능이 기대만큼 빠르지 않음