- MapLibre Tile(MLT) คือ ฟอร์แมตเวกเตอร์ไทล์ยุคถัดไป แบบใหม่ที่มาแทน Mapbox Vector Tile(MVT) เดิม โดยออกแบบมาเพื่อเพิ่มประสิทธิภาพในการจัดการข้อมูลภูมิสารสนเทศขนาดใหญ่
- ให้ อัตราการบีบอัดดีขึ้นสูงสุด 6 เท่า และ ประสิทธิภาพการถอดรหัสที่รวดเร็วด้วย SIMD ช่วยปรับปรุงพื้นที่จัดเก็บ เวลาแฝง และประสิทธิภาพของแคช
- สามารถขยายต่อได้ในอนาคต โดยมุ่งรองรับ พิกัด 3D (ระดับความสูง), การประมวลผลบน GPU, ชนิดข้อมูลแบบประกอบ, linear referencing และ 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 เท่า ด้วยเลย์เอาต์แบบคอลัมน์และการเข้ารหัสแบบ recursive lightweight encoding
- ประสิทธิภาพการถอดรหัสดีขึ้น: โครงสร้างการเข้ารหัสที่รวดเร็วและเบา ซึ่งสามารถทำงานร่วมกับคำสั่ง SIMD/การเวกเตอร์ไรซ์ได้
- ผลลัพธ์คือช่วย ลดเวลาแฝง, ลดต้นทุนการจัดเก็บและการส่งข้อมูล และ เพิ่มการใช้แคชให้มีประสิทธิภาพ
ความเป็นไปได้ในการขยายในอนาคต
-
MLT ถูกออกแบบโดยคำนึงถึงการรองรับ ฟีเจอร์ในอนาคต ดังต่อไปนี้
- เพิ่มการรองรับ พิกัด 3D (ระดับความสูง)
- ปรับแต่งฟอร์แมตการจัดเก็บและหน่วยความจำให้เหมาะกับ การประมวลผลอย่างมีประสิทธิภาพบน CPU และ GPU
- รองรับ linear referencing และ m-values เพื่อให้เข้ากันได้กับฟอร์แมตยุคใหม่อย่าง Overture Maps(GeoParquet)
- รองรับชนิดข้อมูลแบบประกอบ เช่น คุณสมบัติแบบซ้อน, ลิสต์, แมป
-
ทิศทางการพัฒนาของ MLT จะถูกกำหนดตาม ความต้องการของชุมชน และยินดีรับทั้งแนวคิดการขยายความสามารถและการมีส่วนร่วมในหลากหลายรูปแบบ
- เอกสารที่เกี่ยวข้องประกอบด้วย สไลด์บรรยาย FOSS4G 2024 ของ Markus Tremmel, วิดีโอบน YouTube และ บทความวิชาการ ACM
ช่วงเวลาที่ใช้งานได้และการผสานรวม
-
MLT พร้อมใช้งานได้ทันทีในตอนนี้
- ทั้ง MapLibre GL JS และ MapLibre Native รองรับแหล่งข้อมูล MLT
- สามารถใช้งานได้โดยกำหนดค่า
encodingใน style JSON เป็นmlt
-
วิธีทดลองใช้และพัฒนา
- ใช้ สไตล์เดโมไทล์ที่อิงกับ MLT
- ใช้ Encoding server เพื่อแปลงสไตล์ MVT เดิมเป็น MLT แบบเรียลไทม์
- Planetiler เวอร์ชันถัดไปจะรองรับการสร้าง MLT
- ตรวจสอบสถานะการผสานรวมได้ที่ หน้าสถานะการติดตั้งใช้งานอย่างเป็นทางการ
-
เพื่อแบ่งปันประสบการณ์การใช้งาน MLT แนะนำให้เข้าร่วม ช่อง
#maplibre-tile-formatบน Slack หรือ GitHub issues/discussions
คำขอบคุณและความร่วมมือ
- MLT ได้รับการพัฒนาผ่าน ความร่วมมือหลายปีระหว่างภาควิชาการ โอเพนซอร์ส และภาคธุรกิจ
- Markus Tremmel เป็นผู้คิดฟอร์แมตนี้ขึ้นมา และ Yuri Astrakhan เป็นผู้นำโครงการ
- Tim Sylvester ดูแลอิมพลีเมนต์ C++ ขณะที่ Harel Mazor, Benedikt Vogl, Niklas Greindl รับผิดชอบอิมพลีเมนต์ JavaScript
- Microsoft และ AWS สนับสนุนงบประมาณการพัฒนา
หมายเหตุ
- MLT ต่างจาก MVT ตรงที่ ไม่รองรับเลเยอร์ที่ชนิดของค่าในคอลัมน์เดียวกันเปลี่ยนไปตามแต่ละฟีเจอร์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
แนะนำให้ลองไปฟัง เซสชัน MapLibre ใน geospatial devroom ของ FOSDEM วันเสาร์
ลิงก์ตารางงาน
ลองไล่ดูหน้าตัวอย่างนิดหน่อย แล้วเปรียบเทียบ ตัวอย่างการแสดงแผนที่ด้วย MLT กับ ตัวอย่างการแสดงแผนที่แบบเดิม
ดูจาก console log แล้วเห็นว่า ประสิทธิภาพการบีบอัดดีขึ้นราว 10% ค่อนข้างน่าประทับใจ
ฟอร์แมต MLT มี lightweight encoding หลายแบบในตัว และยังเข้ารหัสต่างกันในแต่ละไทล์ได้ด้วย
เพราะงั้นจึงต้องใช้ heuristic approach เพื่อหาชุดที่เหมาะที่สุด และมี trade-off ระหว่างขนาดไทล์กับประสิทธิภาพการถอดรหัส
ตอนนี้ยังอยู่ช่วงต้น แต่ AWS ก็ยังสนับสนุนงานปรับแต่ง MLT ต่อในปีนี้ จึงน่าจะพัฒนาได้อีกมาก
เวลา benchmark การดูพฤติกรรมการใช้งานจริงสำคัญกว่าดูขนาดไทล์รวม — เพราะไม่มีใครซูมกลางมหาสมุทรกันอยู่แล้ว 😉
เพิ่ง deploy โซลูชันที่ใช้ pmtiles ไปเมื่อไม่นานนี้ และพอใจมาก
ดู เอกสาร PMTiles ได้
pmtiles ใช้ MVT แต่หวังว่าในอนาคตจะมีเครื่องมือแปลงเป็น MLT ออกมา
MapLibre เป็นไลบรารี JS สำหรับแสดงแผนที่ในเบราว์เซอร์ที่ดีที่สุดเท่าที่เคยใช้มา
เลยตื่นเต้นกับการเปลี่ยนไปใช้ฟอร์แมตใหม่นี้มาก
ใน Planetiler สามารถสร้าง MLT ได้ด้วยออปชัน CLI
--tile-format=mltตอนนี้ยังมีเฉพาะบน main branch แต่จะออกรีลีสเร็ว ๆ นี้
จากการทดสอบ ขนาด archive ของ OpenMapTiles ลดลงราว 10% ด้วยค่าตั้งต้น และกำลังปรับแต่งเพิ่มเติมอยู่
น่าเสียดายที่ Tilemaker ยังไม่มีแผนรองรับ MLT ในระยะกลาง
ทำให้คนในชุมชนบางส่วนอาจถูกทิ้งไว้ตอนเปลี่ยนผ่าน
ดูการพูดคุยที่ issue thread
น่าสนใจดีที่ฟอร์แมตไฟล์เวกเตอร์ยังคงถูก คิดขึ้นใหม่ อยู่เรื่อย ๆ
เข้าใจเรื่องอัตราการบีบอัดหรือความเร็วในการถอดรหัสที่ดีขึ้น แต่ก็อยากรู้ว่า ไอเดียหรืออินไซต์ใหม่ อะไรเป็นตัวผลักดันดีไซน์นี้
ตามดูโปรเจกต์นี้มาสักพักแล้ว และรู้สึกตื่นเต้นมาก
ในมุมคนใช้สแตก MapLibre งานใหญ่ชิ้นสุดท้ายคือการมี ฟังก์ชัน As_MLT() ใน PostGIS
มีใคร self-host แผนที่ อยู่บ้างไหม? อยากรู้ทั้งข้อดีข้อเสียและเครื่องมือที่ใช้
เซิร์ฟเวอร์แค่ต้องเสิร์ฟไฟล์ static พร้อม range request ได้ก็พอ (ใช้ได้ทั้ง Caddy และ Nginx)
แผนที่เป็นไฟล์ใหญ่ไฟล์เดียว เลยแชร์ข้ามหลายเซิร์ฟเวอร์ได้ง่าย
แทบไม่มีข้อเสีย แต่ฝั่งไคลเอนต์ต้องเพิ่ม ไลบรารีรองรับโปรโตคอลแบบกำหนดเอง
การแก้สไตล์จะยุ่งยากนิดหน่อย แต่สามารถโหลดสไตล์ protomaps เข้าไปแก้ใน Maputnik editor ได้
ดู คู่มือ ได้
แยกทำแผนที่ความละเอียดต่ำทั้งโลก (50MB) กับแผนที่ความละเอียดสูงของออสเตรเลีย (900MB) แล้วอัปโหลดขึ้น S3
เพราะไม่ต้องใช้ข้อมูลล่าสุดมากก็เลยปล่อยไว้แบบนั้น ซึ่งทำงานได้ดีมาก
API เชิงพาณิชย์มีทั้ง ค่าใช้จ่ายในการสร้างแรสเตอร์ 300dpi สูงเกินไป หรือมีข้อจำกัดเรื่องการนำไปขายต่อ
ใช้ PostGIS เก็บและเสิร์ฟ vector tile และเก็บข้อมูลแรสเตอร์ใน AWS S3 ในรูปแบบ GeoTiff COG
build pbf ของพื้นที่ที่สนใจจาก OSM (โคโลราโด) แล้วรันคอนเทนเนอร์ openstreetmap-tile-server จากนั้นใช้สไตล์และเรนเดอร์ด้วย renderd
MLT ก็น่าสนใจ แต่ก็อยากเห็นความก้าวหน้าแบบนี้ใน ฟอร์แมตไทล์ 3D ด้วย
ตอนนี้ 3D Tiles ของ Cesium แทบเป็นตัวเลือกเดียวโดยพฤตินัย แต่ประสิทธิภาพก็ยังไม่เร็วอย่างที่หวัง