- MapLibre Tile(MLT), mevcut Mapbox Vector Tile(MVT)'nin yerini alacak yeni bir yeni nesil vektör döşeme formatı olup, büyük ölçekli coğrafi mekânsal veri işlemede verimliliği artırmak için tasarlandı
- 6 kata kadar daha iyi sıkıştırma oranı ve SIMD tabanlı hızlı kod çözme performansı sunarak depolama alanını, gecikmeyi ve önbellek verimliliğini iyileştiriyor
- Gelecekte 3D koordinatlar (yükseklik), GPU tabanlı işleme, bileşik veri tipleri, doğrusal referanslama ve m-values desteği hedefiyle genişletilebilir
- Şu anda MapLibre GL JS ve MapLibre Native içinde doğrudan kullanılabiliyor; demo döşemeler, dönüştürme sunucusu ve Planetiler üzerinden üretim desteği mevcut
- Açık kaynak topluluğu, şirketler ve akademinin iş birliğiyle geliştirilen format, Microsoft ve AWS sponsorluğuyla tamamlandı
MapLibre Tile'a giriş
-
MapLibre Tile(MLT), [Mapbox Vector Tile(MVT)] için ardıl bir format olarak, hızla artan coğrafi mekânsal veri miktarını ve karmaşık yeni nesil kaynak formatlarını işlemek amacıyla sıfırdan yeniden tasarlandı
- Modern donanım ve grafik API'lerinin performansından yararlanacak şekilde tasarlandığı için, gezegen ölçeğinde 2D ve 2.5D taban haritaları yüksek performansla işleyip render edebiliyor
- Mevcut uygulama şu anda MVT ile işlevsel olarak eşdeğer, ancak performans ve verimlilik açısından geliştirilmiş durumda
-
Başlıca teknik iyileştirmeler
- Sıkıştırma oranında artış: Büyük döşemelerde 6 kata kadar iyileşme; sütun odaklı yerleşim ve özyinelemeli hafif kodlama kullanılıyor
- Kod çözme performansında artış: SIMD/vektörleştirilmiş komutlarla birleştirilebilen hızlı ve hafif bir kodlama yapısı
- Sonuç olarak daha düşük gecikme, daha düşük depolama ve aktarım maliyeti ve daha iyi önbellek kullanımı sağlanıyor
Gelecekteki genişleme potansiyeli
-
MLT, aşağıdaki gibi gelecekteki özellik desteği düşünülerek tasarlandı
- 3D koordinat (yükseklik) desteğinin güçlendirilmesi
- CPU ve GPU üzerinde verimli işleme için depolama ve bellek formatlarının optimize edilmesi
- Doğrusal referanslama (linear referencing) ve m-values desteğiyle Overture Maps(GeoParquet) gibi yeni nesil formatlarla uyumluluk
- İç içe geçmiş öznitelikler, listeler, map'ler gibi bileşik tip desteği
-
MLT'nin gelişim yönü topluluğun ihtiyaçlarına göre belirlenecek ve çeşitli genişletme fikirleri ile katkılar memnuniyetle karşılanacak
- İlgili kaynaklar arasında Markus Tremmel'in FOSS4G 2024 sunum slaytları, YouTube konuşması ve ACM makalesi yer alıyor
Kullanılabilirlik ve entegrasyon
-
MLT hemen şimdi kullanılabiliyor
- Hem MapLibre GL JS hem de MapLibre Native, MLT kaynaklarını destekliyor
- Style JSON içindeki
encodingözelliğinemltdeğeri verilerek kullanılabiliyor
-
Deneme ve geliştirme yöntemleri
- MLT tabanlı demo döşeme stili kullanın
- Encoding server üzerinden mevcut MVT stillerini gerçek zamanlı olarak MLT'ye dönüştürün
- Planetiler'in bir sonraki sürümünde MLT üretim desteği planlanıyor
- Entegrasyon durumu resmî uygulama durumu sayfasından takip edilebilir
-
MLT kullanım deneyimlerini paylaşmak için Slack'teki
#maplibre-tile-formatkanalına veya GitHub issue/discussion alanlarına katılım öneriliyor
Teşekkür ve iş birliği
- MLT, akademi, açık kaynak ve şirketler arasındaki çok yıllı iş birliği sayesinde geliştirildi
- Markus Tremmel formatı tasarladı, Yuri Astrakhan projeye liderlik etti
- Tim Sylvester C++ uygulamasını, Harel Mazor, Benedikt Vogl, Niklas Greindl ise JavaScript uygulamasını üstlendi
- Microsoft ve AWS geliştirme finansmanı sağladı
Not
- MLT, MVT'den farklı olarak bir sütundaki değer türünün feature'a göre değiştiği katmanları desteklemiyor
1 yorum
Hacker News yorumları
Cumartesi günü FOSDEM'deki Geospatial devroom'da yapılacak MapLibre sunumuna katılmanızı tavsiye ederim
etkinlik takvimi bağlantısı
Birkaç örnek sayfaya baktım; MLT ile harita gösterme örneği ile mevcut harita gösterme örneğini karşılaştırdım
Konsol loglarına bakınca sıkıştırma verimliliğinde yaklaşık %10'luk bir iyileşme olduğunu gördüm. Oldukça etkileyici
MLT formatında çeşitli hafif kodlama yöntemleri yerleşik olarak bulunuyor ve bunlar her tile için farklı şekillerde de uygulanabiliyor
Bu yüzden en iyi kombinasyonu bulmak için sezgisel bir yaklaşım gerekiyor; ayrıca tile boyutu ile decode performansı arasında bir ödünleşim var
Henüz erken aşamada ama AWS bu yıl da MLT optimizasyon çalışmalarına sponsor oluyor, dolayısıyla ileride daha çok gelişme görebiliriz
Benchmark yaparken toplam tile boyutundan çok gerçek kullanım örüntülerine bakmak önemli — sonuçta kimse okyanusun ortasına zoom yapmıyor 😉
Kısa süre önce pmtiles tabanlı bir çözüm dağıttım ve gerçekten çok memnunum
Ayrıntılar için PMTiles belgelerine bakabilirsiniz
pmtiles MVT kullanıyor ama ileride bunu MLT'ye dönüştürebilen araçların çıkmasını umuyorum
MapLibre, tarayıcıda harita göstermek için şimdiye kadar kullandığım en iyi JS kütüphanesi
Yeni formata geçeceğini düşünmek heyecan verici
Planetiler tarafında
--tile-format=mltCLI seçeneğiyle MLT üretmek mümkünŞu anda yalnızca main branch'te ama yakında bir sürümde yayınlanacak
Testlerde varsayılan ayarlarda OpenMapTiles arşiv boyutunun yaklaşık %10 küçüldüğü görüldü. Ek optimizasyonlar da sürüyor
Ne yazık ki Tilemaker'ın orta vadede MLT desteği planı yok
Bu yüzden topluluğun bir kısmı geçiş sürecinin dışında kalabilir
İlgili tartışma için issue başlığına bakabilirsiniz
Vektör dosya formatlarının hâlâ yeniden icat ediliyor olması ilginç
Sıkıştırma oranı ya da decode hızı iyileştirmelerini anlıyorum ama bu tasarımı yönlendiren yeni fikirlerin veya içgörülerin ne olduğunu merak ediyorum
Bu projeyi bir süredir takip ediyorum ve gerçekten heyecan verici görünüyor
MapLibre yığını kullanıcısı olarak son büyük eksik parçanın PostGIS'e As_MLT() fonksiyonunun eklenmesi olduğunu düşünüyorum
Harita self-hosting yapan var mı? Artıları, eksileri ve hangi araçları kullandığınızı merak ediyorum
Sunucunun tek yapması gereken range request ile statik dosya sunabilmek; bunu Caddy ya da Nginx rahatlıkla yapabiliyor
Harita tek bir büyük dosya olduğu için birden fazla sunucu arasında paylaşmak da kolay
Neredeyse hiç dezavantajı yok ama istemci tarafına özel protokol desteği sağlayan bir kütüphane eklemeniz gerekiyor
Stil düzenleme biraz uğraştırıcı olabiliyor ama Maputnik editörü ile protomaps stilini yükleyip düzenlemek mümkün
rehber belgeye bakabilirsiniz
Dünya geneli düşük çözünürlüklü haritayı (50MB) ve Avustralya yüksek çözünürlüklü haritayı (900MB) ayrı oluşturup S3'e yükledim
Güncel veri gerekmediği için olduğu gibi bırakıp kullanıyorum ve gayet iyi çalışıyor
Ticari API'lerde 300dpi raster üretim maliyeti çok yüksekti ya da yeniden satış kısıtları vardı
Vektör tile'ları PostGIS ile depolayıp sunuyorum, raster veriyi ise GeoTiff COG olarak AWS S3'te tutuyorum
OSM'den ilgilendiğimiz bölgenin (Colorado) pbf'sini build ediyor, ardından openstreetmap-tile-server container'ını ayağa kaldırıp stilleri uygulayarak renderd ile render alıyoruz
MLT güzel ama keşke 3D tile formatlarında da böyle ilerlemeler olsa
Şu anda fiilen tek seçenek Cesium'un 3D Tiles formatı gibi görünüyor ama performansı beklediğim kadar hızlı değil