6 คะแนน โดย GN⁺ 2023-10-24 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • มอบทางเลือกแบบ ไฟล์สแตติกเพียงไฟล์เดียว ที่โฮสต์เองได้ สำหรับทีมที่มองว่าการดูแลเซิร์ฟเวอร์และค่าใช้จ่ายของ map API ในการเผยแพร่เว็บแผนที่เป็นภาระ
  • นักพัฒนาฝั่งฟรอนต์เอนด์สามารถให้บริการเวกเตอร์แมปไทล์ได้อย่างเรียบง่ายและประหยัด ด้วยเพียงคลาวด์สตอเรจและ HTTP range requests
  • PMTiles เป็นฟอร์แมตแบบเปิดที่บรรจุได้ทั้งแรสเตอร์ เวกเตอร์เบสแมป และเลเยอร์แบบกำหนดเอง พร้อมรองรับปลั๊กอิน MapLibre, CLI และการเชื่อมต่อกับ CDN
  • Protomaps ดูแล ชุดไทล์เบสแมป ที่สร้างจาก OpenStreetMap และข้อมูลเปิดอื่น ๆ ทำให้นำ OSM ไปใช้กับเว็บแผนที่แบบอินเทอร์แอกทีฟได้ง่าย
  • การใช้งานแบบไม่เชิงพาณิชย์ฟรี และหากต้องการใช้งานเชิงพาณิชย์หรือ managed basemap tile API จำเป็นต้องเข้าร่วม GitHub Sponsor

แผนที่ที่โฮสต์เองได้ด้วยไฟล์เดียว

  • Protomaps คือแผนที่ฟรีและปรับแต่งได้ ซึ่งสามารถแจกจ่ายแผนที่ทั้งโลกเป็นไฟล์สแตติกเพียงไฟล์เดียว
  • สามารถอัปโหลดขึ้นคลาวด์สตอเรจแล้วใช้งานได้ และหากคุ้นเคยกับการใช้ S3 ก็สามารถเผยแพร่แผนที่อินเทอร์แอกทีฟระดับทั้งโลกได้
  • ออกแบบมาให้ผู้พัฒนาฝั่งฟรอนต์เอนด์ โฮสต์แผนที่เอง ได้ โดยไม่ต้องตั้งค่าเซิร์ฟเวอร์แยกต่างหาก
  • เวกเตอร์แมปไทล์ให้บริการอย่างเรียบง่ายและประหยัดผ่าน HTTP range requests
  • มีเอกสารเริ่มต้นใช้งานคือ Get Started และ quick start tutorial

PMTiles และแนวทางการจัดโครงสร้างแผนที่

  • ตัวอย่างแสดงโครงสร้างขั้นต่ำสำหรับสร้างเบสแมปและดาต้าโอเวอร์เลย์ด้วย HTML + JS เท่านั้น
  • PMTiles คือข้อกำหนดอาร์ไคฟ์ของ tile pyramid ตามลำดับ Hilbert และสามารถบรรจุข้อมูลเชิงภูมิสารสนเทศ เช่น แรสเตอร์ เวกเตอร์เบสแมป และเลเยอร์แบบกำหนดเอง

เบสแมปบนพื้นฐาน OpenStreetMap

  • Protomaps ดูแล OpenStreetMap และ ชุดไทล์เบสแมป ที่สร้างจากแหล่งข้อมูลเปิดอื่น ๆ
    • ใช้เป็นเส้นทางที่นำ OSM ไปใช้กับเว็บแผนที่แบบอินเทอร์แอกทีฟได้ง่าย
    • ดาวน์โหลดไฟล์ planet ทั้งหมดได้ฟรี หรือใช้ CLI เพื่อดึงเฉพาะพื้นที่ที่ต้องการ
    • เริ่มดึงข้อมูลพื้นที่ได้ที่ Download your area
  • สำหรับผู้ใช้ที่ไม่ต้องการจัดการไฟล์ขนาดใหญ่ด้วยตนเอง สามารถใช้ basemap tile API แบบอาศัยแคช CDN ได้
    • การใช้งานแบบไม่เชิงพาณิชย์ฟรี
    • การใช้งานเชิงพาณิชย์ต้องเป็น GitHub Sponsor
    • สามารถใช้ Maps API ในโค้ดได้

กรณีการใช้งาน

  • องค์กรสามารถใช้คลาวด์สตอเรจเดิมที่มีอยู่เพื่อให้ได้ การควบคุมแบบฟูลสแตก เหนือการฝังแผนที่บนเว็บไซต์ และลดค่าใช้จ่ายด้านแผนที่รายเดือนจากระดับหลายร้อยดอลลาร์ลงเหลือเพียงระดับเพนนี
  • ห้องข่าวสามารถสร้างสตอรีแบบอินเทอร์แอกทีฟด้วยแผนที่ที่ปรับแต่งเองและใช้งานได้ยาวนาน โดยไม่ต้องพึ่งพา API ของบุคคลที่สาม
  • ในงานวิทยาศาสตร์ สามารถใช้ PMTiles เพื่อแสดงผลข้อมูลสภาพภูมิอากาศและสิ่งแวดล้อมระดับทั้งโลก และสร้าง data explorer ด้วยเครื่องมือโอเพนซอร์สและฟรอนต์เอนด์แผนที่
  • หน่วยงานภาครัฐสามารถลดการพึ่งพา Big Tech พร้อมคงไว้ซึ่งความเป็นส่วนตัวของประชาชนและการปฏิบัติตาม GDPR รวมถึงใช้เป็นทางเลือกฟรีแทน GIS แบบปิด

2 ความคิดเห็น

 
GN⁺ 2023-10-24
ความคิดเห็นจาก Hacker News
  • ลองใช้ เครื่องมือ pmtiles ของ Protomaps สร้างแผนที่ที่ตัดมาเฉพาะบริเวณรอบ Half Moon Bay ทางใต้ของ San Francisco
    ดาวน์โหลดไบนารี Go สำหรับ macOS รุ่นล่าสุดจาก 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 และพอเอาไฟล์ hmb.pmtiles ขนาด 2MB ที่ได้ไปลากใส่ “drop zone” บน https://maps.protomaps.com/ ก็ได้แผนที่ละเอียดที่ซูมได้ถึงระดับเมทาดาทาของ 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
      ผู้ใช้ก็ไม่จำเป็นต้องดาวน์โหลดทั้งไฟล์ด้วย เลยค่อนข้างเจ๋ง และทำให้อยากลองใส่แผนที่ลงใน static site
    • ไม่ใช่คำถามขอความช่วยเหลือด้านเทคนิค แต่ไม่รู้ว่าทำไมฝั่งผมถึงใช้ไม่ได้
      ไฟล์ pmtile ที่ลิงก์ไว้ใช้งานได้ แต่ไฟล์ที่ผมสร้างเองซึ่งเล็กกว่ากลับใช้ไม่ได้ ถึงอย่างนั้นแนวคิดเรื่องการได้แผนที่สำหรับโปรเจกต์ก็ยอดเยี่ยมมาก
  • ผมใช้ Mapbox อย่างจริงจังมาตั้งแต่สมัยได้สิทธิ์เข้าถึง Tilemill alpha และจากมุมมองของผม นี่คือผลงานสำคัญที่สุดในวงการแผนที่แบบเปิดนับตั้งแต่ vector tile และ Mapbox GL / Map GL
    Mapbox เปิดทางไว้ด้วยแนวทางเผา tile ผ่าน MTS ก็จริง แต่ถึงจะทรงพลัง มันซับซ้อนเกินไปและแพงเกินไป ใช้ Tippecanoe เผา tile ได้ก็จริง แต่การโฮสต์ vector tile ก็ยังเป็นเรื่องปวดหัวอยู่ดี และเมื่อใช้ PMTiles การโฮสต์ vector tile อาจง่าย สะดวกกว่า Mapbox และมีต้นทุนต่ำกว่ามากถึงระดับเลขหลักเดียว
    โดยเฉพาะถ้าคุณไม่ต้องการ projection หวือหวาหรือการรองรับ 3D และใช้ MapLibre ก็เพียงพอแล้ว Felt ก็ดูจะเป็นหนึ่งในบริการใหญ่ที่ใช้แนวทาง PMTile ภายใน และก็น่ายินดีที่ยังลงทุนกับ Tippecanoe ต่อไป ในช่วงที่ดูเหมือน Mapbox จะโฟกัสไปที่ระบบนำทางในรถยนต์ การได้เห็นนวัตกรรมพลิกวงการมาจากที่ใหม่ ๆ เป็นเรื่องน่ายินดี และยิ่งน่าทึ่งไปอีกตรงที่สิ่งนี้มาจาก ทีมคนเดียว
    การมาของ PMTiles ประกอบกับการรองรับ spatial query ของ DuckDB น่าจะเปิดทางสู่นวัตกรรมอีกมาก ถ้าสามารถ query และประมวลผลไฟล์ GeoParquet ขนาดใหญ่ แล้วสตรีมออกมาเป็น PMTiles ที่เผาอย่างรวดเร็วได้ ก็จะเกิด use case ที่ทรงพลังมาก

    • ด้านล่างของบทความนี้มีตัวอย่างการสร้าง PMTiles จาก GeoParquet ทำได้เพราะ Tim Schaub
      gpq convert Cairo_Governorate.parquet --to=geojson | tippecanoe Cairo.geojson -o Cairo.pmtiles
      https://cloudnativegeo.org/blog/2023/10/where-is-cog-for-vec...
      https://github.com/planetlabs/gpq
    • มันก็ขมขื่นนิด ๆ ที่เราต้องการโอเพนซอร์สทางเลือกแทน MapBox ที่ครั้งหนึ่งเคยเป็นบริษัทโอเพนซอร์ส
  • ผมแอบติดตามคอมมูนิตี้ออนไลน์ของนักพัฒนาสายข่าวอยู่ ที่นั่นมีคนคาดหวังว่า PMTiles จะเป็นวิธีลดค่าใช้จ่ายในการโฮสต์ map tile แบบ custom style ด้วยตัวเอง
    เช่นบทความ “How The Post is replacing Mapbox with open source solutions” https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl... ก็น่าอ่าน

    • สื่อข่าวพวกนี้รู้ได้อย่างไรว่าข้อมูลนี้ถูกต้อง?
    • ฟังดูเป็นคอมมูนิตี้ที่น่าสนใจ แชร์ได้ไหมว่าเป็นที่ไหน?
  • เผื่อใครสงสัย ไฟล์ PMTile ตัวอย่าง protomaps-basemap-opensource-20230408.pmtiles ที่อนุมานมาจาก OSM มีขนาด 103GB
    https://docs.protomaps.com/basemaps/downloads

    • ตอนนี้เป็น 107GB แล้ว
      ถ้าดาวน์โหลดแล้วนำมาใช้เฉพาะส่วนเปลี่ยนแปลงสำหรับไฟล์รายวัน รายสัปดาห์ และรายเดือน ได้ก็คงดี
    • ของแบบนี้เหมาะกับการดาวน์โหลดผ่าน Bittorrent มาก
    • เขาใช้วิธีไหนในการบีบอัด tile? จะทำให้เล็กลงด้วย AVIF ได้ไหม? หรือใช้ AVIF+SVG overlay สำหรับข้อความจะเป็นอย่างไร?
    • นี่แหละที่ผมสงสัยอยู่ ขนาดนี้ถือว่าสมเหตุสมผลทีเดียว
  • สิ่งที่น่าสนใจคือ “Google Maps API มีโควต้าฟรีที่ค่อนข้างมาก แต่ถ้าเกิน 30,000 การโหลดแผนที่ ค่าบริการจะสูง Protomaps ถูกออกแบบให้เป็นระบบที่โฮสต์เองตั้งแต่แรก และทำงานบนแบ็กเอนด์แบบสแตติก 100% บนคลาวด์สตอเรจ ดังนั้นจ่ายแค่ค่าจัดเก็บและค่ารับส่งข้อมูลเท่านั้น สำหรับปริมาณการใช้งานระดับปานกลาง ค่าใช้จ่ายอาจอยู่แค่ระดับไม่กี่เซ็นต์”
    อยากเห็นคอนฟิกการโฮสต์ที่แนะนำกับ การเปรียบเทียบต้นทุน ของ Google Maps และอยากรู้ว่าจุดไหนที่เส้นต้นทุนตัดกัน

    • หาไม่เจอใน FAQ แต่ก็น่าสนใจถ้าจะรู้ว่า ขนาดไฟล์ PMTiles ของประเทศขนาดกลางอยู่ประมาณไหน
      ถ้าไม่จำเป็นต้องอัปเดตล่าสุด 100% และเป็นแผนที่ที่ใช้แค่บางพื้นที่ วิธีโฮสต์เองแบบนี้ก็ดูน่าสนใจมาก แค่ “คอมไพล์ใหม่” ไฟล์ปีละครั้งแล้วอัปขึ้นโฮสต์ไฟล์สแตติก ก็น่าจะเป็นขั้นตอนที่ง่ายและแทบไม่มีการพึ่งพาภายนอก
      แก้ไข: เจอลิงก์ดาวน์โหลดอย่างเป็นทางการของทั้งโลก[1] แล้ว ซึ่งมีขนาดเกิน 100GB ไปเล็กน้อย ถ้าอย่างนั้นคำตอบของคำถามผมน่าจะเป็น “ตั้งแต่หลายร้อย MB ถึงไม่กี่ GB” ซึ่งดูโอเคมาก
      [1] https://docs.protomaps.com/basemaps/downloads
    • ถ้าอิงตาม Cloudflare โฮสต์ 100GB ราคา $1 และคำขอ 10 ล้านครั้งราคา $0.36
      อ่านเอกสารของ Protomaps แล้วมีการอธิบายวิธีแคชคำขอบน Cloudflare CDN ดังนั้นคุณจะจ่ายค่าคำขอของแต่ละไทล์เพียงครั้งเดียวต่อรอบอายุแคช ค่อนข้างถูกทีเดียว
      ชื่อโพสต์ Protomaps ก่อนหน้านี้คือ “Serverless maps at 1/700 the cost of Google Maps API”
  • Brandon ผู้ก่อตั้ง Protomaps ไปออกรายการ พอดแคสต์ Geomob เมื่อไม่กี่เดือนก่อน: https://thegeomob.com/podcast/episode-176

  • ส่วนที่น่าสนใจที่สุดสำหรับผมคือ PMTiles
    “PMTiles เป็นฟอร์แมตอาร์ไคฟ์ไฟล์เดี่ยวสำหรับพีระมิดข้อมูลไทล์ PMTiles archive สามารถโฮสต์บนแพลตฟอร์มสตอเรจอย่าง S3 ได้ และช่วยให้สร้างแอปแผนที่ต้นทุนต่ำที่แทบไม่ต้องดูแลระบบ”
    “PMTiles เป็นฟอร์แมตทั่วไปสำหรับข้อมูลไทล์ที่อ้างอิงด้วยพิกัด Z/X/Y สามารถบรรจุข้อมูลได้หลายแบบ เช่น เวกเตอร์ไทล์ของแผนที่ฐาน ข้อมูลสังเกตการณ์จากรีโมตเซนซิง และภาพ JPEG”
    “ตัวอ่าน PMTiles ใช้ HTTP range requests เพื่อดึงเฉพาะไทล์หรือเมทาดาทาที่ต้องการจากใน PMTiles archive แบบออนดีมานด์”
    “การจัดวางไทล์และไดเรกทอรีถูกออกแบบมาเพื่อลดจำนวนคำขอเพิ่มเติมให้น้อยที่สุดระหว่างการเลื่อนและซูม”
    https://docs.protomaps.com/pmtiles/

    • PMTiles ยอดเยี่ยมมาก ผมไปรู้จักตอนทำ แผนที่จุดความร้อนไฟป่าในแคนาดา ช่วงหน้าร้อนนี้
      ตอนนั้นผมรับไฟล์ CSV รายวันมาแปลงเป็นเวกเตอร์ไทล์ ซิงก์กับ S3 แล้วแสดงบนแผนที่ mapbox-gl โดยต้นทุนก้อนใหญ่ที่สุดคือการดำเนินการกับไฟล์บน S3 เพื่อลดค่าใช้จ่าย ผมต้องคลัสเตอร์ข้อมูลอย่างหนักและลดจำนวนไทล์ลงเหลือราว 75,000 ไทล์ แต่ด้วยความถี่ในการอัปเดตที่ต้องการ แค่ค่า operation บน S3 ก็เดือนละ $500 แล้ว
      ตอนนี้เปลี่ยนมาจัดการไฟล์เป็น PMTiles ไฟล์เดียว แล้วดีพลอยแค่ไฟล์นั้นไฟล์เดียว ต้นทุนลดลงเหลือไม่กี่เซ็นต์
      มันเปิดความเป็นไปได้มากขึ้นมากสำหรับการทำแผนที่สาธารณะ และถ้าสนใจ คุณดูข้อมูล hotspot ทั้งหมดของแคนาดาในปี 2023 ได้ที่นี่: https://lens.pathandfocus.com
    • PMTiles คือคู่เทียบฝั่งเวกเตอร์ของ Cloud Optimized GeoTIFF (COG) ที่ช่วยให้ไคลเอนต์ใช้งานข้อมูลแผนที่ได้อย่างมีประสิทธิภาพ เมื่อเซิร์ฟเวอร์รองรับ HTTP range requests
      วิธีแบบเดิมในฝั่งเวกเตอร์คือมีไฟล์เล็กจำนวนมหาศาล หรือไม่ก็มีไฟล์ใหญ่ที่ต้องมีฟรอนต์เอนด์มาคอยเสิร์ฟแต่ละไทล์
      ตอนนี้คุณสามารถแปลง OSM dump เป็นแผนที่ฐานระดับประเทศได้ในไม่กี่นาทีบนเครื่องที่ดีพอ และระดับทวีปได้ในไม่กี่ชั่วโมง จากนั้นโฮสต์เองบนเว็บเซิร์ฟเวอร์ทั่วไปพร้อมสไตล์ชีตแบบกำหนดเองได้เลย
    • จะใช้ PMTiles เป็นวิธีแพ็กและโฮสต์แบบหยาบๆ แต่รวดเร็วสำหรับ ข้อมูลภูมิสารสนเทศ อื่นที่ไม่ใช่ “ไทล์แผนที่” ตามความหมายเคร่งครัดได้ไหม? เช่น ฐานข้อมูล POI ที่ค่อนข้างใหญ่แต่ไม่ได้อัปเดตบ่อย
    • ถ้าเป็นไฟล์เวกเตอร์ นั่นหมายความว่าสามารถ จัดสไตล์ ได้ทันทีเลยใช่ไหม?
  • ถ้าคุณโอเคกับการที่ต้องผูกอยู่กับการฉายภาพแบบ Web Mercator ชุดผสมของ Maplibre[1] + PMTiles + tippecanoe[2] ของ Felt นั้นยอดเยี่ยมมากสำหรับเว็บแผนที่แบบโฮสต์เอง
    ข้อมูลต้นทางเชิงภูมิสารสนเทศแทบทุกแบบสามารถแปลงเป็น .pmtiles ได้ด้วย GDAL[3] และ tippecanoe: (.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtiles
    สำหรับข้อมูล OpenStreetMap มี planetiler[4] และยังมีสไตล์ openmaptiles[5] ที่ใช้ร่วมกับ Maplibre ได้
    ชุดนี้เป็นจุดเริ่มต้นที่ดีสำหรับ data pipeline แบบโอเพนซอร์ส ซึ่งสามารถโฮสต์บน 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/…

    • ผมเป็นนักศึกษาที่อยากพัฒนาทักษะด้านภูมิสารสนเทศ/วิทยาการคอมพิวเตอร์ มีโปรเจ็กต์อะไรที่พอจะทำด้วยสิ่งนี้ได้บ้างไหม? มีจุดเริ่มต้นที่แนะนำเป็นพิเศษหรือเปล่า?
  • เคยมีส่วนร่วมกับโปรเจ็กต์นี้ และที่บริษัทก็ใช้งานมันใน production อยู่
    มันดีมากจริง ๆ และ Brandon ก็ใจดีมากด้วย รู้สึกขอบคุณสำหรับงานทั้งหมดที่ใส่เข้ามาจนถึงตอนนี้

  • ผมได้ผลลัพธ์ที่ค่อนข้างดีจากการ deploy แผนที่แบบ serverless ด้วย PMTiles
    ถ้าสนใจ deploy บน AWS CloudFront/Lambda@Edge/S3 ลองดูได้ที่ https://github.com/serverlessmaps/serverlessmaps