6P by GN⁺ | ★ favorite | 댓글 2개
  • 웹 지도 배포에서 서버 운영과 지도 API 비용이 부담인 팀에게 단일 정적 파일로 셀프 호스팅하는 대안을 제공함
  • 프론트엔드 개발자는 클라우드 스토리지와 HTTP range requests만으로 벡터 지도 타일을 단순하고 저렴하게 제공할 수 있음
  • PMTiles는 래스터·벡터 베이스맵·커스텀 레이어를 담는 개방형 형식이며, MapLibre 플러그인·CLI·CDN 연동을 지원함
  • Protomaps는 OpenStreetMap과 기타 오픈 데이터 기반 베이스맵 타일셋을 유지해 인터랙티브 웹 지도에 OSM을 쉽게 적용할 수 있게 함
  • 비상업적 사용은 무료이고, 상업적 사용이나 관리형 베이스맵 타일 API가 필요하면 GitHub Sponsor 참여가 필요함

단일 파일로 셀프 호스팅하는 지도

  • Protomaps는 전 세계 지도를 단일 정적 파일로 배포할 수 있는 무료·맞춤형 지도임
  • 클라우드 스토리지에 올려 사용할 수 있으며, S3 사용 경험이 있으면 지구 규모의 인터랙티브 지도를 게시할 수 있음
  • 별도 서버 설정 없이 프론트엔드 개발자가 지도를 셀프 호스팅하도록 설계됨
  • 벡터 지도 타일은 HTTP range requests를 사용해 단순하고 저렴하게 제공됨
  • 시작 자료로 Get Startedquick start tutorial을 제공함

PMTiles와 지도 구성 방식

OpenStreetMap 기반 베이스맵

  • Protomaps는 OpenStreetMap과 기타 오픈 데이터 소스로 만든 베이스맵 타일셋을 유지함
    • 인터랙티브 웹 지도에서 OSM을 채택하기 쉬운 경로로 사용할 수 있음
    • 전체 planet 파일을 무료로 다운로드하거나 CLI로 원하는 지역만 추출할 수 있음
    • Download your area에서 지역 추출을 시작할 수 있음
  • 큰 파일을 직접 관리하지 않으려는 사용자는 CDN 캐시 기반 베이스맵 타일 API를 사용할 수 있음
    • 비상업적 사용은 무료임
    • 상업적 사용은 GitHub Sponsor가 필요함
    • Maps API를 코드에서 사용할 수 있음

활용 시나리오

  • 기업은 기존 클라우드 스토리지를 사용해 사이트 지도 임베드의 풀스택 제어를 확보하고, 월 수백 달러 수준의 지도 비용을 페니 단위로 줄일 수 있음
  • 뉴스룸은 서드파티 API 의존 없이 오래 작동하는 맞춤형 지도로 인터랙티브 스토리를 만들 수 있음
  • 과학 분야에서는 PMTiles로 지구 규모의 기후·환경 데이터를 시각화하고, 오픈소스 도구와 지도 프론트엔드로 데이터 탐색기를 만들 수 있음
  • 정부 기관은 Big Tech 종속을 줄이면서 시민 프라이버시와 GDPR 준수를 보존하고, 독점 GIS의 무료 대안을 사용할 수 있음

댓글과 토론

Hacker News 의견들
  • Protomaps의 pmtiles 도구로 San Francisco 남쪽 Half Moon Bay 주변만 잘라낸 지도를 만들어 봤음
    최신 macOS Go 바이너리는 https://github.com/protomaps/go-pmtiles/releases에서 받았고, 대략적인 경계 상자는 http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122....로 찾았음
    실행한 명령은 pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977였고, 결과로 나온 2MB hmb.pmtileshttps://maps.protomaps.com/의 “drop zone”에 끌어다 놓으니 OpenStreetMap 메타데이터와 건물 외곽선 수준까지 확대 가능한 상세 지도가 나왔음
    2MB에 이 정도라니 정말 인상적이고, 파일은 여기 있음: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...

    • 이걸 데모 https://simonw.github.io/hmb-map/와 블로그 글 https://til.simonwillison.net/gis/pmtiles로 만들어 둠
    • 정말 멋지다. 지역 사업자에게 유용할 수 있어 보임
      보통 Google Maps를 임베드하지만, 지역 주변 지도만 있으면 충분하고 더 저렴할 때가 많을 듯함
    • 같은 방식으로 Gran Canaria 지도를 만들었더니 15MB였음
      사용자가 파일 전체를 내려받을 일도 없으니 꽤 멋지고, 정적 사이트에 지도를 넣어볼 생각에 기대됨
    • 기술 지원 질문은 아니지만 왜 내 쪽에서는 안 되는지 모르겠음
      링크된 pmtile 파일은 동작하는데, 내가 만든 더 작은 파일은 동작하지 않음. 그래도 프로젝트용 지도를 얻는 개념 자체는 훌륭함
  • Tilemill 알파 접근권을 받았을 때부터 Mapbox를 열심히 써왔는데, 내 관점에서는 이것이 벡터 타일과 Mapbox GL / Map GL 이후 오픈 지도 분야에서 가장 중요한 기여임
    Mapbox는 MTS로 타일 굽기를 접근하면서 문을 열어두긴 했지만, 강력한 대신 너무 복잡하고 비쌌음. Tippecanoe로 타일을 구울 수는 있었지만 여전히 벡터 타일 호스팅이 골칫거리였고, PMTiles를 쓰면 Mapbox보다 벡터 타일 호스팅이 더 쉽고 편하며 비용도 한 자릿수 이상 낮아질 수 있음
    화려한 투영법이나 3D 지원이 필요 없고 MapLibre로 충분하다면 특히 그렇다. Felt도 내부적으로 PMTile 접근을 쓰는 주요 서비스 중 하나로 보이며, Tippecanoe에 계속 투자하는 점도 훌륭함. Mapbox의 초점이 차량 내비게이션으로 옮겨가는 듯한 상황에서 새로운 곳에서 파괴적 혁신이 나오는 것이 반갑고, 더 놀라운 건 이게 1인 팀에서 나왔다는 점임
    PMTiles의 등장은 DuckDB 공간 질의 지원과 맞물려 많은 혁신을 열어줄 듯함. 큰 GeoParquet 파일을 질의·처리하고 빠르게 구운 PMTiles로 스트리밍할 수 있으면 꽤 강력한 활용 사례가 가능해짐

  • 기자 개발자들의 온라인 커뮤니티를 눈팅하는데, 거기서는 PMTiles를 커스텀 스타일 지도 타일을 직접 호스팅하는 비용 절감 방법으로 기대하는 사람들이 있음
    예를 들면 “How The Post is replacing Mapbox with open source solutions” https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl...를 볼 만함

    • 언론사들은 이 데이터가 정확하다는 걸 어떻게 아는 걸까?
    • 흥미로운 커뮤니티처럼 들림. 어디인지 공유할 수 있나?
  • 궁금한 사람을 위해 적자면, OSM에서 파생한 샘플 PMTile 파일 protomaps-basemap-opensource-20230408.pmtiles의 크기는 103GB
    https://docs.protomaps.com/basemaps/downloads

    • 지금은 107GB
      일간·주간·월간 기준 파일에 대해 변경분만 내려받아 적용할 수 있으면 좋겠음
    • 이런 건 Bittorrent로 내려받기에 딱 맞는 종류임
    • 타일 압축에는 무엇을 쓰는 걸까? AVIF로 더 작게 만들 수 있을까? 아니면 텍스트용 AVIF+SVG 오버레이는 어떨까?
    • 바로 이게 궁금했음. 꽤 합리적인 크기라고 볼 수 있음
  • “Google Maps API는 넉넉한 무료 구간이 있지만, 지도 로드 30,000회를 넘으면 요금이 높다. Protomaps는 처음부터 직접 운영하는 시스템으로 설계되었고, 클라우드 스토리지 위의 100% 정적 백엔드로 동작하므로 저장과 전송 비용만 부담하면 된다. 중간 정도 사용량에서는 몇 센트 수준일 수 있다”는 점이 흥미로움
    권장 호스팅 구성과 Google Maps의 비용 비교, 그리고 어느 지점에서 비용선이 교차하는지 보고 싶음

    • FAQ에서는 못 찾았지만, 중간 규모 국가의 PMTiles 파일 크기가 어느 정도인지 알면 흥미로울 듯함
      100% 최신일 필요가 없고 특정 지역에서만 쓰는 지도라면 직접 호스팅하기에 정말 매력적인 방식으로 보임. 1년에 한 번 파일을 “다시 컴파일”해서 정적 파일 호스팅에 올리면 외부 의존성이 거의 없는 쉬운 절차가 될 것 같음
      수정: 전 세계 공식 다운로드 링크[1]를 찾았는데 100GB를 조금 넘음. 그러면 내 질문의 답은 “수백 MB에서 몇 GB” 정도일 듯하고, 이 정도면 완전히 괜찮아 보임
      [1] https://docs.protomaps.com/basemaps/downloads
    • Cloudflare 기준으로 100GB 호스팅은 $1, 요청 1,000만 건은 $0.36임
      Protomaps 문서를 읽어보면 Cloudflare CDN에서 요청을 캐시하는 방법이 설명되어 있어서, 캐시 기간마다 각 타일 요청 비용을 한 번만 내면 됨. 꽤 저렴함
      예전 Protomaps 제출 제목은 “Serverless maps at 1/700 the cost of Google Maps API”였음
  • Protomaps 창업자 Brandon이 몇 달 전 Geomob 팟캐스트에 출연했음: https://thegeomob.com/podcast/episode-176

  • 내게 가장 흥미로운 부분은 PMTiles
    “PMTiles는 타일 데이터 피라미드를 위한 단일 파일 아카이브 형식이다. PMTiles 아카이브는 S3 같은 스토리지 플랫폼에 호스팅할 수 있고, 저비용·무관리 지도 애플리케이션을 가능하게 한다”
    “PMTiles는 Z/X/Y 좌표로 주소 지정되는 타일 데이터의 범용 형식이다. 지도 기본도 벡터 타일, 원격탐사 관측값, JPEG 이미지 등 여러 데이터를 담을 수 있다”
    “PMTiles 리더는 HTTP 범위 요청을 사용해 PMTiles 아카이브 안에서 필요한 타일이나 메타데이터만 온디맨드로 가져온다”
    “타일과 디렉터리 배치는 이동·확대/축소 시 부가 요청 수를 최소화하도록 설계되어 있다”
    https://docs.protomaps.com/pmtiles/

    • PMTiles는 대단함. 올여름 캐나다 산불 핫스팟 지도를 만들다가 알게 됨
      매일 CSV 파일을 받아 벡터 타일로 바꾸고 S3와 동기화한 뒤 mapbox-gl 지도에 표시하고 있었는데, 가장 큰 비용은 S3 파일 작업이었음. 비용을 줄이려고 강하게 군집화했고 타일 수를 약 75,000개까지 줄였지만, 원하는 갱신 빈도에서는 S3 작업 비용만 월 $500이 나왔음
      이제는 파일들을 단일 PMTiles 파일로 처리해서 그 파일 하나만 배포하니 비용이 몇 센트 수준으로 줄었음
      공개용 지도를 만들 때 가능성을 크게 열어줬고, 궁금하다면 2023년 전체 캐나다 핫스팟 데이터를 여기서 볼 수 있음: https://lens.pathandfocus.com
    • PMTiles는 서버가 HTTP 범위 요청을 지원할 때 클라이언트가 지도 정보를 효율적으로 쓰게 해주는 Cloud Optimized GeoTIFF(COG)의 벡터 대응물임
      벡터 쪽의 이전 방식은 작은 파일이 아주 많거나, 개별 타일을 제공할 프런트엔드가 필요한 큰 파일이었음
      이제는 탄탄한 장비에서 OSM 덤프를 국가 단위 기본도로 몇 분 안에, 대륙 단위도 몇 시간 안에 변환한 다음 일반 웹 서버에서 커스텀 스타일시트와 함께 직접 호스팅할 수 있음
    • PMTiles를 엄밀한 의미의 “지도 타일”이 아닌 다른 지리공간 데이터를 싸고 거칠고 빠르게 호스팅하는 방법으로도 쓸 수 있을까? 예를 들어 꽤 크지만 자주 갱신되지 않는 POI 데이터베이스 같은 것
    • 벡터 파일이라면 즉석에서 스타일링할 수 있다는 뜻인가?
  • Maplibre[1] + PMTiles + Felt의 tippecanoe[2] 조합은 Web Mercator 투영법에 묶이는 걸 괜찮게 본다면 자체 호스팅 웹 지도에 훌륭함
    거의 모든 지리공간 원본은 GDAL[3]과 tippecanoe로 .pmtiles로 변환할 수 있음: (.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtiles
    OpenStreetMap 데이터에는 planetiler[4]가 있고, Maplibre와 함께 쓸 수 있는 openmaptiles[5] 스타일도 있음
    이 조합이면 오픈소스 데이터 파이프라인으로 AWS S3+CloudFront나 Cloudflare R2에서 몇 센트 비용으로 호스팅할 수 있는 좋은 출발점이 생김
    [1] https://maplibre.org/
    [2] https://github.com/felt/tippecanoe
    [3] https://gdal.org/
    [4] https://github.com/onthegomap/planetiler
    [5] https://openmaptiles.org/styles/
    덧붙여 GDAL/ogr2ogr 문서는 꽤 읽기 어렵다고 느껴서, 시작 예제로는 이런 명령을 볼 수 있음
    ogr2ogr -f GeoJSON counties.json -t_srs EPSG:4326 -nln counties -sql "SELECT STATEFP, COUNTYFP, NAME FROM tl_2022_us_county" /vsizip/tl_2022_us_county.zip
    https://census.gov/geographies/mapping-files/…

    • 지리공간/컴퓨터과학 역량을 키우려는 학생인데, 이걸로 어떤 프로젝트를 만들 수 있을까? 추천할 만한 좋은 시작점이 있나?
  • 이 프로젝트에 기여한 적이 있고, 회사에서도 프로덕션으로 쓰고 있음
    정말 좋고, Brandon도 아주 친절하며 지금까지 들어간 모든 작업에 감사하게 됨

  • PMTiles를 활용한 서버리스 지도 배포로 꽤 좋은 성과를 냈음
    AWS CloudFront/Lambda@Edge/S3에 배포하는 데 관심이 있다면 https://github.com/serverlessmaps/serverlessmaps를 보면 됨