3 puan yazan GN⁺ 2024-11-20 | 2 yorum | WhatsApp'ta paylaş
  • OpenStreetMap uzun süredir statik PNG tabanlı raster karolar sunuyordu; artık Mapbox Vector Tiles (MVT) biçiminde vektör karolar barındırmaya başlayarak haritaların kullanım alanını genişletiyor
  • Vektör karolar, kullanıcıların stil ve render kurallarını ayarlamasına, karodaki bilgileri çıkarmasına veya etiket dilini değiştirme gibi işlevleri uygulamasına olanak tanıyor
  • Ana OSM web sitesi hâlâ raster karolar kullanıyor, ancak yeni vektör karolar ayrı bir web demosu, QGIS ve Leafmap üzerinden doğrudan incelenebiliyor
  • Burj Khalifa yakınındaki z14 karo örneğinde 114 KB’lık MVT, 1,4 MB JSON’a dönüştürüldü; POI katmanında 474 kayıt ve birden fazla üst düzey katman anahtarı bulunuyor
  • tiles2columns kullanılarak belirlenen sınır kutusundaki OSM vektör karoları indirilebiliyor ve GeoPackage veya Parquet’e dönüştürülebiliyor; böylece güncellenmiş OSM verilerini dosya tabanlı analizlerde doğrudan kullanmak kolaylaşıyor

OSM karolarının değiştiği nokta

  • OpenStreetMap şimdiye kadar haritaları, render kuralları ve stili önceden belirlenmiş statik PNG raster karolar olarak sunuyordu
  • Yeni barındırma, Mapbox Vector Tiles yani MVT biçiminde vektör karolar sağlıyor
  • Vektör karolar kullanıldığında son kullanıcı harita gösterimi üzerinde daha doğrudan kontrol sahibi olabiliyor
    • Stil ve render kurallarını ayarlama
    • Her karoda yer alan temel bilgileri çıkarma
    • Daha keskin harita görüntüleri gösterme
    • Etiket dilini değiştirme olanağı sağlama
  • OSM ana web sitesi hâlâ raster karolar sunuyor
  • Yeni vektör karolar, web demosunda çoğu telefon ve masaüstü cihazdan incelenebiliyor

Uygulamada kullanılan araçlar

  • Örnekte OSM verilerini görselleştirmek ve analiz etmek için Python ve çeşitli jeo-uzamsal araçlar kullanılıyor
  • Temel kurulum araçları arasında jq, python3-pip, python3-virtualenv bulunuyor
  • Python sanal ortamına şu paketler kuruluyor
    • leafmap[maplibre]
    • mapbox_vector_tile
    • morecantile
    • notebook
  • DuckDB şu eklentilerle birlikte kullanılıyor
  • Harita render etmek için QGIS 3.40 kullanılıyor
    • QGIS, Windows, macOS ve Linux’ta çalışan bir masaüstü uygulamasıdır
    • Dünya genelinde kullanıcıların uygulama çalıştırma sayısı ayda yaklaşık 15 milyon düzeyindedir

QGIS’te vektör karo açma

  • QGIS’te OSM vektör karoları Layer Menu -> Add Layer -> Add Vector Tile Layer yoluyla eklenebilir
  • Yeni bağlantıda stil URL’si için şu değer kullanılır
  • Kaynak URL olarak şu MVT endpoint’i belirtilir
  • Stil sayfası isteğe bağlıdır; olmasa da QGIS vektör verilerini rastgele renklerle render edebilir
  • QGIS’te ikon render etme ile ilgili hizasızlık sorunu gözlemlenmiştir
    • Diğer haritalama araçları ilgili stilin sprite’larını düzgün render ediyor
    • QGIS’te ikonlar bulanık siyah ikonlar gibi görünüyor
    • İlgili konu QGIS #59492’de yer alıyor

Leafmap ve Jupyter Notebook ile render etme

  • Jupyter Notebook yapılandırma klasörü oluşturulup parola ayarlandıktan sonra sunucu 127.0.0.1 üzerinde çalıştırılıyor
  • Notebook, çalıştıran kullanıcının yetkileriyle çalışır ve geçerli dizin ile altındaki dosyaları açığa çıkarabilir; bu nedenle boş bir klasörde çalıştırma yöntemi kullanılıyor
  • Leafmap’te leafmap.maplibregl kullanılıyor ve stil URL’si olarak colorful.json belirtilerek Burj Khalifa çevresi render ediliyor
  • Leafmap render’ında POI ikonları doğru şekilde gösteriliyor

MVT’yi analiz edilebilir veriye dönüştürme

  • Örnek olarak Burj Khalifa yakınındaki zoom level 14 karosu kullanılıyor
  • Yaklaşık koordinatlar [55.27, 25.2], morecantile tiles 14 içine verilerek [10707, 7006, 14] karo koordinatları elde ediliyor
  • Bu değerlerle şu karo indiriliyor
  • 114 KB’lık MVT dosyası, mapbox_vector_tile.decode ve koordinat dönüştürme fonksiyonuyla 1,4 MB’lık JSON dosyasına dönüştürülüyor
  • Dönüştürülen karonun üst düzey anahtarları şu katmanları içeriyor
    • addresses
    • bridges
    • buildings
    • ferries
    • land
    • ocean
    • pier_lines
    • pier_polygons
    • place_labels
    • pois
    • public_transport
    • sites
    • street_labels
    • street_polygons
    • streets
    • streets_labels_points
    • water_polygons
    • water_polygons_labels

POI katmanını DuckDB ile inceleme

  • pois katmanı ayrı bir JSON dosyasına çıkarıldıktan sonra DuckDB’nin ST_READ fonksiyonuyla açılıp analiz ediliyor
  • cuisine değeri bulunan POI’ler 67 satır olarak sorgulanıyor
    • Örnek amenity değerleri arasında restaurant, fast_food, cafe bulunuyor
    • Örnek cuisine değerleri arasında french, greek, american, lebanese, coffee_shop, asian, persian, chicken, pizza bulunuyor
  • DuckDB SUMMARIZE sonucu, POI verisinin ne ölçüde dolu olduğunu gösteriyor
    • Toplam POI kaydı 474
    • name, name_de, name_en alanlarının null oranı sırasıyla %29,96
    • amenity alanının null oranı %31,86
    • cuisine alanının null oranı %85,86
    • geom alanının null oranı %0,00
  • approx_unique ölçütüne göre name 258, name_de 264, name_en 245, amenity 27, cuisine 39 değere sahip

tiles2columns ile sınır kutusu çıkarma

  • Mevcut osm_split, GeoFabrik’in oluşturduğu OSM PBF dosyalarını adlandırılmış GeoPackage dosyalarına dönüştüren bir araçtı
  • GeoFabrik PBF dosyaları, işlenebilir hale geldiğinde birkaç gün öncesinin verisi olabilir
  • Yeni OSM vektör karoları, temel veri düzenlendikten hemen sonra güncelleniyor
  • tiles2columns, belirlenen sınır kutusundaki OSM karolarını indirip GeoPackage veya Parquet dosyalarına dönüştüren Python tabanlı bir yardımcı araçtır
  • Kuzey Dubai çevresindeki sınır kutusu örneği 42 karo indiriyor ve birkaç MB boyutunda GeoPackage dosyaları oluşturuyor
    • streets.gpkg: 6,8 MB
    • buildings.gpkg: 6,2 MB
    • pois.gpkg: 1,4 MB
    • street_labels.gpkg: 1,4 MB
    • land.gpkg: 744 KB
  • Oluşturulan GeoPackage dosyaları doğrudan QGIS projesine eklenebilir
  • Dosyalar OSM MVT dosyalarında kullanılan anahtarlara göre ayrıldığı için her katmanı bağımsız olarak tanımlamak, stillendirmek ve analiz etmek kolaydır
  • Her geometrinin öznitelikleri ayrı sütunlarda saklanır
  • pois.gpkg içinde adı bulunan POI’leri sorgulayan örnek 6.329 satır döndürür ve Kiku, Fujiya Restaurant, Mövenpick Grand Al Bustan Dubai, McDonald's gibi adları içerir

2 yorum

 
GN⁺ 2024-11-20
Hacker News yorumları
  • Vektör tile konusunda biraz karmaşık hissediyorum. Orijinal raster tile’ların sunduğu ayrıntı düzeyini gösterebilen bir stil ve tile oluşturucu şeması kombinasyonunu hâlâ bulamadım.
    Yazıdaki ekran görüntülerine bakınca bile fark çok belirgin. İlkinde heykeller, mağazalar, tiyatrolar, seyir noktaları gibi ilgi noktaları; köprü olarak gösterilen yollar; çim ve parklar arasındaki renk farkı; yollara göre çizgi kalınlığı; spor sahaları; bina ve mahalle adları; tek yön okları; bazı binalar; merdivenler; ağaçlar vb. pek çok bilgi var.
    İkincisinde ise bir troleybüs durağı ve bir yol adı kadar bilgi var; o yol adı da hatalı render edilmiş.
    openmaptiles stillerini, protomaps varsayılan stilini, mapbox stillerini ve protomaps, openmaptiles, mapbox oluşturucularını çok kullandım ama OSM raster tile kadar okunabilir ve aynı zamanda ayrıntı bakımından zengin olanına rastlamadım.
    Vektör stillerde yakınlaştırma ve kaydırma akıcı, stil düzenlemek de kolay; ama kendi veriniz için arka plan haritası olarak kullanmak değil de gerçek harita verilerini görmek istediğinizde yetersiz kalıyorlar.
    Belki de bunun nedeni hesaplama kaynağı sınırlarıdır. OSM raster tile düzeyinde ayrıntı göstermek, hem istemci hem de tile oluşturma tarafında çok fazla kaynak tüketebilir.
    OpenStreetMap’in bir başka düşük kontrastlı, düşük ayrıntılı arka plan haritası sunmak yerine mevcut raster stili daha yakından taklit etmesini isterim; bu herkese açık vektör tile sürümünün de daha ayrıntılı vektör haritaları mümkün kılmasını umuyorum.

    • Temelde doğru, ama bakış açısı biraz farklı olabilir. Harita sağlayan taraf için vektör tile’ların başlıca avantajı keskinlik veya stil esnekliği gibi küçük faydalar değil, gerekli hesaplama miktarını ciddi ölçüde azaltmasıdır.
      Modern bir raster tile üretim altyapısını sürdürmek epey büyük bir iş.
      Eskiden bisiklet turu planlaması için çok ayrıntılı bir stili uzun süre geliştirmiştim: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
      Bunu birkaç kez vektör tile’larla yeniden üretmeye çalıştım, ama boyut sınırlarına takılmadan yeterli ayrıntıyı koymak oldukça zordu; varsayılan Mapbox tile’larında da ihtiyaç duyduğum bilgiler çok daha eksikti.
      Yine de vektör tile’larda raster tile’larda olmayan dolaylı çözümler de var. Örneğin farklı katmanlar açılıp kapatılabilirken, etiketler altta ne olduğunu algılayabildiği için okunabilirlik korunabiliyor.
    • Şimdiye kadar odak, o tile’ları kullanan stili zenginleştirmekten ziyade sürekli güncellenen vektör tile üreten yazılıma verilmiş gibi görünüyor.
    • OpenrailwayMap’in bir fork’unu yaptım. Orijinali https://www.openrailwaymap.org, vektör stili ise https://openrailwaymap.fly.dev adresinde.
      Stili, orijinal raster tile’ların görünümüne yakın olacak şekilde ayarladım; ama vektör sürümüne çok daha fazla etkileşim özelliği ekledim.
      Stil ve tile tasarımı açısından ilginç olan nokta, tile’ların nerede ve nasıl render edildiğine bağlı olarak performans ödünleşimlerinin tamamen değişmesi. Bariz bir şey ama sunucuda ve istemcide görsel olarak nelerin mümkün olduğunu da etkiliyor.
    • Tamamen katılıyorum. Yol tarifi alırken OpenStreetMap ile Google Maps’i birlikte kullanıyorum; sadece OSM kullanmak istesem de kayıtlı yer sayısı Google Maps kadar fazla değil.
      Yine de OSM haritası, gösterilen ilgi noktaları fazla olduğu için çok daha kullanışlı. Haritaya sadece bakarak bile gerçek mekâna dair bir his oluşuyor; park park gibi, hastane hastane gibi görünüyor.
      Google Maps, grafik tasarımcı bakış açısından daha iyi görünebilir. Ama yön bulmak için genelde yolların ve kavşakların biçimini karşılaştırmak gerekir. Google Maps’te her yer birbirine benzer görünüyor.
    • Tam olarak aynı fikirdeyim. openstreetmap.org’un varsayılan stili benim için neredeyse saf mutluluk; vektör haritaları o seviyeye getirmek için epey uzun süre denedim ama kullanılabilir bir sonuç bulamadım.
      İki dakika kurcalayınca bile ayrıntı kaybı hemen fark ediliyor. Gerçekten üzücü, ama bir gün birinin bunu çözeceği konusunda iyimserim.
  • Açık kaynak topluluğunun vektör harita tile özelliğini geliştirme sürecini izlemek ilginçti. 2018 civarında web GIS işleri yaparken Google/Apple’ın akışlı vektör haritaları sihir gibi görünüyordu; maliyeti karşılayabilseydim kesin kullanmak isterdim.
    Çok geçmeden temel teknoloji açık kaynak olarak ortaya çıktı, ücretsiz barındırma çözümleri bile çıktı. Artık Leaflet haritasında harika vektör katmanlarını ücretsiz kullanabiliyorsunuz. Açık kaynağa teşekkürler.

    • OSM’in buraya gelmesinin bu kadar uzun sürmesi biraz şaşırtıcı. Temel teknoloji bileşenleri 10 yıldan da uzun süre önce zaten vardı.
      Ücretsiz bir harita hizmetinden şikâyet etmek istemiyorum; hizmet harika ve düzenleme ile veri sahipliğine daha fazla odaklandıklarını da anlıyorum. Sunum altyapısı zor ve pahalı.
      Yine de birkaç yıl boyunca MapBox’ın hâkimiyetinin diğer denemeleri ne kadar engellediğini merak ediyorum.
  • OSM tabanlı haritaları barındırırken işletme maliyetlerinin düşüp düşmeyeceğini merak ediyorum. Çünkü render için daha az CPU gerekecek, vektörlerin de daha az depolama alanı ve bant genişliği tüketeceği düşünülebilir

    • Hem evet hem hayır
      Hayır, çünkü resmi OSM tile katmanı Fastly’nin büyük sponsorluğundan yararlanıyor. En son kontrol ettiğimde Fastly €720k, AWS render tarafı €40k idi
      Evet, çünkü teknik olarak daha az kaynak kullandığı için AWS+Fastly üzerindeki yük de azalır ve self-host etmek de kolaylaşır
      Daha önce ayrıntılı okuduğum bir risk değerlendirmesinde OSM’nin “Fastly sponsorluğunu kaybederse standart tile katmanına tüm üçüncü taraf erişimini kesip yalnızca az sayıda Varnish sunucusu işletme olasılığının yüksek olduğu” yazıyordu
      Anladığım kadarıyla vektörün ana motivasyonu maliyet düşürmeden çok uluslararasılaştırmayı iyileştirmek, render kararlarını istemci tarafında mümkün kılmak ve birçok sonraki faydayı doğuracak modern bir araç zinciri kurmaktı
      Daha güncel bilgiler mutlaka vardır; ilgili materyaller 1 ve 2’de
      1. https://operations.osmfoundation.org/2024/01/25/owg_budget.o...
      2. https://osmfoundation.org/wiki/Finances
    • Hayır da denebilir. Çünkü vektör tile’lar zaten uzun zamandır çok az çabayla self-host edilebiliyor ya da birine barındırtılabiliyordu
      Ancak bir miktar işlem yükünü istemciye devretmesi ve daha önemlisi birçok stil kararını istemcinin vermesini sağlayabilmesi açısından evet. Elbette her şey mümkün değil
      Statik ya da sık güncellenmeyen vektör tile’lar çeşitli araçlarla OSM verisinden üretilebiliyor; şu anda en popüler olanlar https://github.com/systemed/tilemaker ve https://github.com/onthegomap/planetiler
      Asıl yeni olan, Paul’un OSMF için yaptığı çalışma sayesinde vektör tile’ların anında, yani birkaç dakika içinde güncellenebilir hale gelmesi. Bu, OSM katkıcıları için bir geri bildirim mekanizması olarak önemli ve OSMF’nin bugün raster tile hizmetini işletmesinin başlıca nedeni de bu
      Şu anda vektör tile hizmetinin kullanımına ne tür kısıtlamalar getirileceği hâlâ açık. Raster tile hizmetinde olduğu gibi üçüncü taraf hizmetlerle rekabet etme ya da onların yerini alma amacı yok, ancak vektör tile hizmeti potansiyel olarak bunu yapabilir
    • Evet, vektör tile’ları self-host etmek çok daha kolay
      Örneğin https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/ var
    • openfreemap.org’u yapan kişiyim. Doğru. Vektör tile’lar temelde statik dosya barındırmaktan ibaret; sunucunun HTTPS şifrelemesi dışında yapacak işi yok
      gzip sıkıştırması da zaten tile’ın içinde yapılmış durumda
  • Bir başka sorun da vektör sürümünde Arapça yazı tiplerinin düzgün render edilmemesi. Sağdan sola değil soldan sağa render ediliyor ve harfler birleşmeden ayrı ayrı görünüyor

    • Vektör tile’ların özü, render işleminin yerelde gerçekleşmesi ve tile şeması dışında değiştirilebilir stil ayarlarıyla kontrol edilmesi
      Bu yüzden görünen bozulma, stilden ya da içeriği yerelde render eden kütüphaneden kaynaklanan bir sorun
    • QGIS vektör tile render’ının nasıl çalıştığını bilmiyorum ama GitHub demo sayfasıysa MapLibre’ye RTL metin eklentisi ekleyerek sağdan sola yazılan metinleri düzgün işlemesini sağlamak kolay olmalı: https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-...
  • Birlikte bakılabilir: OpenFreeMap — ücretsiz OpenStreetMap vektör tile barındırma
    https://openfreemap.org/

    • OpenFreeMap şunları sağlamaz: arama veya geocoding, rota hesaplama·navigasyon·yol tarifi, statik görüntü oluşturma, raster tile barındırma, uydu görüntüsü barındırma, yükseklik sorgulama, özel tile ya da veri seti barındırma
      https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
    • Vay, oldukça iyi cilalanmış görünüyor
      Bunun da aynı vektör teknoloji yığını üzerine mi kurulduğunu, yoksa tamamen ayrı bir geliştirme mi olduğunu merak ediyorum
  • “Görüntüler çok daha net olacak ve etiket dili değiştirilebilecek” kısmının beklendiği kadar iyi çalışmayacağını düşünüyorum
    Dili değiştirdiğinizde etiket boyutunun aynı kalacağına dair hiçbir garanti yok; etiket boyutu harita yerleşimiyle etkileşir ve neyin gösterileceğini de belirler
    Etiket büyürse haritanın çok fazlasını kapatabilir ya da birbirleriyle çakışabilir. Etiket küçülürse kullanıcı, daha önce alan kısıtı nedeniyle atlanan şehirlerin neden yeni oluşan boş alanda görünmediğini merak edebilir

    • Google Maps’te yakınlaştırıp uzaklaştırırken şehir ve yol adlarının kaybolmasından gerçekten nefret ediyorum. Bazı yol ya da mağaza adları yalnızca belirli yakınlaştırma seviyelerinde görünüyor; daha fazla yakınlaştırınca ya da uzaklaştırınca görünmüyor
      Sadece tüm yol adlarını gösterin. Sıkışık görünmesi umurumda değil. Bir kavşakta durup üzerinde ad olmayan bir haritaya bakmak işe yaramaz bir haritadır
    • Zaten başlangıç noktası otomatik etiket yerleşimi
      Yıllardır kullanılan raster tile’larda da durum böyleydi
    • Yerleşim algoritmasının ciddi biçimde değişmesini beklemek için bir neden var mı?
  • Çok sevindirici bir yenilik. Daha güzel görünen haritalar bekliyorum
    Ancak “my workstation” bölümü biraz tuhaf. Yazının geri kalanıyla pek ilgili görünmüyor ve sonrasında ele alınan işler için yüksek sistem gereksinimleri gerekiyor gibi de durmuyor

  • “Görüntüler çok daha keskin olacak ve etiket dili değiştirilebilecek” deniyorsa, örneğin şehir şekli vektörleri, daha doğrusu çokgenler için tanımlı tüm dillerdeki şehir adı meta verileri de taşınacak mı?

    • Büyük şehirler zaten birden çok dilde ad içeriyor. Örneğin Paris’e bakılabilir: https://www.openstreetmap.org/relation/71525
      Dil değiştirme özelliğinin kullanışlılığı doğal olarak çevirilerin var olup olmamasına bağlı. Editörleri yer adları için daha fazla çeviri eklemeye de teşvik edebilir.
    • Şu anda testlerde kullanılan döşeme şeması shortbread birden çok dili desteklemiyor, ancak hatalar temizlendikten sonra üzerinde çalışanların bunu desteklemek istediğini biliyorum.
      Bunun nasıl göründüğüne dair bir örnek https://americanamap.org adresinde görülebilir. OSM verilerini kullanıyor, ancak bu yazıdaki döşemeler gibi neredeyse gerçek zamanlı olmayı hedeflemiyor.
    • Hayır, ama yalnızca gerekli metni içeren döşemeyi alıp elinizdeki döşemeye yama olarak uygulayabilirsiniz.
  • Keşke bu, OSMAnd ile OrganicMaps’in sonunda güçlerini birleştirip nihai özgür ve açık kaynaklı harita uygulamasını çıkaracağı anlamına gelse.

    • İki uygulama da çoğunlukla kendi biçimlerinde önceden işlenmiş indirilebilir/çevrimdışı harita verilerini kullanıyor.
      MVT biçimindeki vektör döşemeler navigasyon ya da arama için hiç uygun değil. Zorla bir araya getirilemez demek değil, ama oldukça zorlama olur.
    • Tek bir nihai harita uygulaması olamaz; çünkü kullanım senaryoları farklı.
      Örneğin OSMAnd’de OSM’ye katkıda bulunanlar için çok kullanışlı pek çok ileri kullanıcı özelliği var, ama genel kullanıcıya yönelik bir uygulamada bunlar arayüzü yalnızca kalabalıklaştırabilir.
    • En azından ikisinin harita döşemelerini paylaşabilmesi ve böylece aynı haritalar için gigabaytlarca alanı tekrar tekrar kullanmak zorunda kalmamaları güzel olurdu.
  • https://marble.kde.org/ 9 yıl öncesinden beri akış olarak gelen vektör OSM katmanını kendi içinde uygulamıştı; benzer bir şeyin diğer OSM harita uygulamalarında da ortaya çıkmasını epey uzun süredir bekliyordum.
    Android OSM uygulamalarında tüm ülke ölçeğinde büyük parçalar halinde yüzlerce megabaytlık harita indirmek her zaman depolama alanı sorunu yaratıyordu. Sonunda bir standardın oluşmaya başlaması çok sevindirici; bunun birçok uygulama tarafından benimsenip geliştirilmesini bekliyorum. Harika iş.

    • Android’de Marble uygulamasını aradım ama ne Play Store’da var ne de F-Droid’de. Web sitesindeki Play Store bağlantısı 404 veriyor. Vaz mı geçildi?