3 poin oleh GN⁺ 2024-11-20 | 2 komentar | Bagikan ke WhatsApp
  • OpenStreetMap telah lama menyediakan tile raster statis berbasis PNG, tetapi kini mulai menghosting tile vektor dalam format Mapbox Vector Tiles (MVT), sehingga cara memanfaatkan peta menjadi lebih luas
  • Tile vektor memungkinkan pengguna menyesuaikan gaya dan aturan rendering, mengekstrak informasi dari dalam tile, atau menerapkan fitur seperti pergantian bahasa label
  • Situs web utama OSM masih menggunakan tile raster, tetapi tile vektor baru ini bisa langsung dilihat lewat demo web terpisah, QGIS, dan Leafmap
  • Contoh tile z14 di dekat Burj Khalifa menunjukkan bahwa MVT 114KB diubah menjadi JSON 1.4MB, dan layer POI memuat 474 record beserta berbagai key layer tingkat atas
  • Dengan tiles2columns, tile vektor OSM untuk bounding box tertentu bisa diunduh lalu diubah menjadi GeoPackage atau Parquet, sehingga data OSM yang telah diperbarui mudah langsung dipakai untuk analisis berbasis file

Titik perubahan pada tile OSM

  • Selama ini OpenStreetMap menyediakan peta sebagai tile raster PNG statis dengan aturan rendering dan gaya yang sudah ditentukan sebelumnya
  • Hosting baru ini menyediakan Mapbox Vector Tiles, yaitu tile vektor format MVT
  • Dengan tile vektor, pengguna akhir bisa mengontrol tampilan peta secara lebih langsung
    • Menyesuaikan gaya dan aturan rendering
    • Mengekstrak informasi dasar yang terkandung di tiap tile
    • Menampilkan gambar peta yang lebih tajam
    • Membuka kemungkinan pergantian bahasa label
  • Situs web utama OSM masih tetap menyediakan tile raster
  • Tile vektor baru ini bisa dilihat di demo web pada sebagian besar ponsel dan perangkat desktop

Alat yang digunakan dalam praktik

  • Contoh ini memakai Python dan berbagai alat geospasial untuk memvisualisasikan dan menganalisis data OSM
  • Alat instalasi dasar mencakup jq, python3-pip, python3-virtualenv
  • Di lingkungan virtual Python dipasang paket berikut
    • leafmap[maplibre]
    • mapbox_vector_tile
    • morecantile
    • notebook
  • DuckDB digunakan bersama ekstensi berikut
  • Untuk rendering peta digunakan QGIS 3.40
    • QGIS adalah aplikasi desktop yang berjalan di Windows, macOS, dan Linux
    • Jumlah eksekusi aplikasi oleh pengguna di seluruh dunia mencapai sekitar 15 juta kali per bulan

Membuka tile vektor di QGIS

Rendering dengan Leafmap dan Jupyter Notebook

  • Folder konfigurasi Jupyter Notebook dibuat, kata sandi diatur, lalu server dijalankan di 127.0.0.1
  • Notebook berjalan dengan hak akses pengguna yang mengeksekusinya dan bisa mengekspos direktori saat ini beserta file di bawahnya, sehingga dijalankan dari folder kosong
  • Di Leafmap digunakan leafmap.maplibregl dan URL style colorful.json untuk merender area sekitar Burj Khalifa
  • Dalam rendering Leafmap, ikon POI tampil dengan benar

Mengubah MVT menjadi data yang bisa dianalisis

  • Sebagai contoh digunakan tile zoom level 14 di dekat Burj Khalifa
  • Koordinat perkiraan [55.27, 25.2] dimasukkan ke morecantile tiles 14 untuk memperoleh koordinat tile [10707, 7006, 14]
  • Dengan nilai tersebut, tile berikut diunduh
  • File MVT 114KB diubah menjadi file JSON 1.4MB menggunakan mapbox_vector_tile.decode dan fungsi transformasi koordinat
  • Key tingkat atas pada tile hasil konversi mencakup layer-layer berikut
    • 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

Meninjau layer POI dengan DuckDB

  • Layer pois diekstrak ke file JSON terpisah lalu dibuka untuk analisis dengan ST_READ milik DuckDB
  • POI yang memiliki nilai cuisine terambil sebanyak 67 baris
    • Contoh amenity mencakup restaurant, fast_food, cafe
    • Contoh cuisine mencakup french, greek, american, lebanese, coffee_shop, asian, persian, chicken, pizza
  • Hasil SUMMARIZE DuckDB menunjukkan tingkat keterisian data POI
    • Total record POI: 474
    • Rasio null untuk name, name_de, name_en masing-masing 29.96%
    • Rasio null untuk amenity adalah 31.86%
    • Rasio null untuk cuisine adalah 85.86%
    • Rasio null untuk geom adalah 0.00%
  • Berdasarkan approx_unique, name memiliki 258 nilai, name_de 264, name_en 245, amenity 27, dan cuisine 39

Mengekstrak bounding box dengan tiles2columns

  • osm_split sebelumnya adalah alat untuk mengubah file OSM PBF buatan GeoFabrik menjadi file GeoPackage bernama
  • File PBF GeoFabrik bisa berisi data yang sudah tertinggal beberapa hari pada saat diproses
  • Tile vektor OSM yang baru diperbarui segera setelah data dasarnya diedit
  • tiles2columns adalah utilitas berbasis Python untuk mengunduh tile OSM pada bounding box tertentu lalu mengubahnya menjadi file GeoPackage atau Parquet
  • Contoh bounding box di sekitar Dubai utara mengunduh 42 tile dan menghasilkan file GeoPackage berukuran beberapa MB
    • streets.gpkg: 6.8MB
    • buildings.gpkg: 6.2MB
    • pois.gpkg: 1.4MB
    • street_labels.gpkg: 1.4MB
    • land.gpkg: 744KB
  • File GeoPackage yang dihasilkan bisa langsung dimasukkan ke proyek QGIS
  • File-file tersebut dipisahkan berdasarkan key yang digunakan dalam file OSM MVT, sehingga tiap layer mudah diidentifikasi, diberi style, dan dianalisis secara mandiri
  • Atribut tiap geometri disimpan dalam kolom terpisah
  • Contoh kueri pada pois.gpkg untuk POI yang memiliki nama mengembalikan 6.329 baris, termasuk nama seperti Kiku, Fujiya Restaurant, Mövenpick Grand Al Bustan Dubai, McDonald's

2 komentar

 
GN⁺ 2024-11-20
Komentar Hacker News
  • Saya merasa tile vektor agak rumit. Saya belum menemukan kombinasi gaya dan skema pembuat tile yang bisa menampilkan tingkat detail seperti yang dulu disediakan tile raster
    Dari tangkapan layar di artikel saja perbedaannya sudah jelas. Yang pertama memuat banyak informasi seperti titik minat semacam patung, toko, teater, gardu pandang, jalan yang ditandai sebagai jembatan, perbedaan warna rumput dan taman, ketebalan garis tiap jalan, lapangan olahraga, nama bangunan dan lingkungan, panah satu arah, sebagian bangunan, tangga, pohon, dan sebagainya
    Yang kedua hanya punya kira-kira satu halte troli dan satu nama jalan, dan nama jalan itu pun dirender dengan keliru
    Saya sudah banyak memakai gaya openmaptiles, gaya default protomaps, gaya mapbox, serta generator protomaps, openmaptiles, dan mapbox, tetapi tidak ada yang se-mudah dibaca sekaligus sedetail tile raster OSM
    Gaya vektor memang halus saat zoom dan pan, serta mudah dimodifikasi, tetapi terasa kurang ketika ingin melihat data peta yang sebenarnya, bukan sekadar memakainya sebagai peta latar untuk data sendiri
    Mungkin ini karena batasan sumber daya komputasi. Untuk menampilkan detail setingkat tile raster OSM, bisa jadi terlalu boros sumber daya baik di sisi klien maupun pembuatan tile
    Saya berharap OpenStreetMap lebih mendekati peniruan gaya raster yang sudah ada, alih-alih menyediakan satu lagi peta latar berkontras rendah dan berdetail rendah, dan semoga rilis tile vektor publik ini memungkinkan peta vektor yang lebih detail

    • Pada dasarnya itu benar, tetapi sudut pandangnya bisa sedikit berbeda. Bagi pihak yang menyediakan peta, keunggulan utama tile vektor bukanlah manfaat kecil seperti ketajaman atau fleksibilitas gaya, melainkan penurunan besar pada jumlah komputasi yang dibutuhkan
      Mempertahankan infrastruktur pembuatan tile raster modern adalah pekerjaan yang cukup besar
      Dulu saya lama mengembangkan gaya yang sangat detail untuk perencanaan perjalanan sepeda: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
      Saya beberapa kali mencoba mereproduksinya dengan tile vektor, tetapi cukup sulit memasukkan detail yang memadai tanpa terkena batas ukuran, dan tile Mapbox bawaan jauh lebih kekurangan informasi yang saya perlukan
      Namun tile vektor juga punya jalan pintas yang tidak dimiliki tile raster. Misalnya, berbagai layer bisa dinyalakan dan dimatikan, sementara label tetap dapat menyadari apa yang ada di bawahnya sehingga keterbacaan terjaga
    • Sejauh ini, tampaknya fokusnya lebih pada perangkat lunak untuk membuat tile vektor yang terus diperbarui, daripada memperkaya gaya yang memanfaatkan tile tersebut
    • Saya membuat fork OpenrailwayMap. Versi aslinya ada di https://www.openrailwaymap.org, dan gaya vektornya ada di https://openrailwaymap.fly.dev
      Gayanya dibuat mendekati tampilan tile raster asli, tetapi versi vektornya menambahkan jauh lebih banyak fitur interaktif
      Hal yang menarik dari sudut pandang desain gaya dan tile adalah kompromi performa menjadi sepenuhnya berbeda tergantung di mana dan bagaimana tile dirender. Ini memang jelas, tetapi juga memengaruhi apa yang mungkin secara visual di server dan klien
    • Saya sepenuhnya setuju. Saat mencari rute, saya memakai campuran OpenStreetMap dan Google Maps, dan meski ingin hanya memakai OSM, jumlah tempat yang terdaftar belum sebanyak Google Maps
      Meski begitu, peta OSM jauh lebih enak dipakai karena menampilkan banyak titik minat. Hanya dengan melihat peta, kita mendapat kesan tentang tempat sebenarnya; taman terlihat seperti taman, rumah sakit terlihat seperti rumah sakit
      Google Maps mungkin tampak lebih baik dari sudut pandang desainer grafis. Namun untuk menentukan arah, biasanya kita perlu membandingkan bentuk jalan dan persimpangan. Di Google Maps, semuanya terlihat mirip
    • Saya berpikiran persis sama. Gaya default di openstreetmap.org bagi saya pribadi hampir seperti kebahagiaan murni, dan saya sudah cukup lama mencoba membuat peta vektor mencapai level itu, tetapi belum menemukan hasil yang layak
      Hanya dengan mencobanya selama 2 menit, hilangnya detail langsung terlihat. Sangat disayangkan, tetapi saya optimistis suatu hari nanti seseorang akan menyelesaikannya
  • Menarik melihat komunitas open source membangun kemampuan tile peta vektor. Sekitar 2018, ketika mengerjakan GIS web, peta vektor streaming dari Google/Apple terasa seperti sihir, dan saya pasti ingin memakainya kalau biayanya terjangkau
    Tidak lama kemudian, teknologi intinya muncul sebagai open source, bahkan solusi hosting gratis pun tersedia. Sekarang kita bisa memakai layer vektor yang bagus di peta Leaflet secara gratis. Terima kasih kepada open source

    • Saya agak terkejut OSM butuh waktu selama ini untuk sampai ke titik ini. Komponen teknologi dasarnya sudah ada lebih dari 10 tahun lalu
      Saya tidak bermaksud mengeluhkan layanan peta gratis, dan saya paham layanannya bagus serta mereka lebih berfokus pada penyuntingan dan kepemilikan data. Infrastruktur penyediaan layanan memang sulit dan mahal
      Namun saya penasaran seberapa besar dominasi MapBox selama beberapa tahun menghambat upaya-upaya lain
  • Saya penasaran apakah biaya operasional akan turun saat meng-hosting peta berbasis OSM. Alasannya, CPU yang dipakai untuk rendering tampaknya akan lebih sedikit, dan vektor juga sepertinya memakan lebih sedikit ruang penyimpanan serta bandwidth

    • Bisa ya, bisa juga tidak
      Tidak, karena layer tile resmi OSM mendapat sponsor besar dari Fastly. Terakhir kali saya cek, Fastly €720k, sementara rendering AWS €40k
      Ya, karena secara teknis memakai sumber daya lebih sedikit, sehingga beban pada AWS+Fastly juga lebih ringan, dan self-hosting pun menjadi lebih mudah
      Dalam penilaian risiko yang dulu saya baca cukup mendetail, tertulis bahwa OSM “jika kehilangan sponsor Fastly, kemungkinan besar akan memutus semua akses pihak ketiga ke layer tile standar dan hanya mengoperasikan sedikit server Varnish”
      Sejauh yang saya pahami, motivasi utama vektor lebih dekat ke peningkatan internasionalisasi, memungkinkan keputusan rendering di sisi klien, dan membangun ekosistem alat modern yang menghasilkan banyak manfaat lanjutan, bukan sekadar penghematan biaya
      Pasti ada informasi yang lebih baru, dan materi terkait ada di 1 dan 2
      1. https://operations.osmfoundation.org/2024/01/25/owg_budget.o...
      2. https://osmfoundation.org/wiki/Finances
    • Bisa juga dibilang tidak. Karena vector tile sudah lama bisa di-self-host atau di-host oleh pihak lain dengan upaya yang sangat kecil
      Namun benar dalam arti sebagian pemrosesan bisa dialihkan ke klien, dan yang lebih penting, banyak keputusan styling bisa dibuat oleh klien. Tentu saja tidak semuanya bisa
      Vector tile yang statis atau tidak sering diperbarui bisa dibuat dari data OSM dengan berbagai alat; yang saat ini paling populer adalah https://github.com/systemed/tilemaker dan https://github.com/onthegomap/planetiler
      Hal yang benar-benar baru adalah berkat pekerjaan yang dibuat Paul untuk OSMF, vector tile kini bisa diperbarui seketika, yakni dalam hitungan menit. Ini penting sebagai mekanisme umpan balik bagi kontributor OSM, dan juga merupakan alasan utama OSMF saat ini mengoperasikan layanan raster tile
      Saat ini masih terbuka batasan apa yang akan diterapkan pada penggunaan layanan vector tile. Seperti layanan raster tile, tujuannya bukan untuk bersaing dengan atau menggantikan layanan pihak ketiga, tetapi layanan vector tile berpotensi menjadi seperti itu
    • Ya, vector tile jauh lebih mudah untuk self-hosting
      Misalnya https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/
    • Saya pembuat openfreemap.org. Benar. Vector tile pada dasarnya adalah hosting file statis, dan server tidak punya pekerjaan selain enkripsi HTTPS
      Kompresi gzip juga sudah selesai di dalam tile
  • Masalah lain adalah di versi vektor, font Arab tidak dirender dengan benar. Teks dirender dari kiri ke kanan, bukan dari kanan ke kiri, dan huruf-hurufnya tampak terpisah, tidak tersambung

    • Inti dari vector tile adalah rendering terjadi secara lokal, dan selain skema tile, dikendalikan oleh pengaturan style yang bisa diubah
      Jadi kerusakan yang terlihat itu adalah masalah pada style atau pada library yang merender konten secara lokal
    • Saya tidak tahu bagaimana renderer vector tile QGIS bekerja, tetapi kalau halaman demo GitHub, seharusnya mudah menambahkan plugin teks RTL ke MapLibre agar teks kanan-ke-kiri ditangani dengan benar: https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-...
  • Yang juga layak dilihat: OpenFreeMap — hosting vector tile OpenStreetMap gratis
    https://openfreemap.org/

    • OpenFreeMap tidak menyediakan: pencarian atau geocoding, perhitungan rute·navigasi·petunjuk arah, pembuatan gambar statis, hosting raster tile, hosting citra satelit, kueri elevasi, hosting tile atau dataset kustom
      https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
    • Wah, kelihatannya sangat rapi
      Saya penasaran apakah ini juga berbasis stack teknologi vektor yang sama, atau pengembangan yang sepenuhnya terpisah
  • Bagian “gambar akan menjadi jauh lebih tajam dan bahasa label juga bisa diganti” tampaknya tidak akan berjalan sebaik yang diharapkan
    Saat bahasa diubah, sama sekali tidak ada jaminan bahwa ukuran label akan tetap sama, dan ukuran label berinteraksi dengan tata letak peta serta ikut menentukan apa yang ditampilkan
    Jika label membesar, label bisa menutupi terlalu banyak peta atau saling bertumpang tindih. Jika label mengecil, pengguna bisa heran mengapa kota yang sebelumnya dihilangkan karena keterbatasan ruang tidak muncul di ruang kosong yang baru terbentuk

    • Saya benar-benar tidak suka ketika nama kota dan nama jalan menghilang saat zoom in/out di Google Maps. Beberapa nama jalan atau toko hanya terlihat pada level zoom tertentu, lalu tidak terlihat kalau diperbesar atau diperkecil
      Tampilkan saja semua nama jalan. Tidak apa-apa kalau jadi padat. Berdiri di persimpangan sambil melihat peta tanpa nama itu peta yang tidak berguna
    • Bagaimanapun, titik awalnya adalah penempatan label otomatis
      Hal yang sama juga berlaku pada raster tile yang sudah dipakai selama bertahun-tahun
    • Apakah ada alasan untuk memperkirakan algoritma penempatannya akan berubah drastis?
  • Ini perubahan baru yang sangat menyenangkan. Saya menantikan peta yang lebih enak dilihat
    Namun bagian “my workstation” agak membuat heran. Kelihatannya tidak terlalu terkait dengan sisa tulisan, dan pekerjaan yang dibahas setelahnya juga tampaknya tidak membutuhkan spesifikasi sistem yang tinggi

  • Jika “gambar akan jauh lebih tajam dan pengalihan bahasa label juga akan dimungkinkan”, apakah itu berarti, misalnya, vektor bentuk kota—lebih tepatnya poligon—akan membawa metadata nama kota dalam semua bahasa yang didefinisikan?

    • Kota-kota besar sudah menyertakan nama dalam berbagai bahasa. Misalnya lihat Paris: https://www.openstreetmap.org/relation/71525
      Kegunaan fitur pengalihan bahasa tentu bergantung pada ada tidaknya terjemahan. Ini juga bisa mendorong para penyunting untuk menambahkan lebih banyak terjemahan nama tempat
    • shortbread, skema tile yang saat ini digunakan untuk pengujian, belum mendukung banyak bahasa, tetapi sejauh yang saya tahu orang-orang yang mengerjakannya berniat mendukungnya setelah bug dibereskan
      Contoh seperti apa tampilannya bisa dilihat di https://americanamap.org. Itu memakai data OSM, tetapi tidak menargetkan hampir real-time seperti tile dalam tulisan ini
    • Tidak, tetapi Anda bisa mengambil tile yang hanya berisi teks yang diperlukan lalu menambal tile yang sudah Anda miliki
  • Semoga ini berarti OSMAnd dan OrganicMaps akhirnya akan bergabung untuk menghadirkan aplikasi peta bebas dan open source yang pamungkas

    • Kedua aplikasi itu terutama menggunakan data peta unduhan dan offline yang telah dipraproses dalam format mereka sendiri
      Tile vektor format MVT sama sekali tidak cocok untuk navigasi atau pencarian. Bukan berarti tidak bisa dipaksakan untuk dirangkai, tetapi itu cukup tidak masuk akal
    • Tidak mungkin ada satu aplikasi peta yang pamungkas. Karena kasus penggunaannya berbeda-beda
      Misalnya, OSMAnd memiliki banyak fitur pengguna tingkat lanjut yang sangat berguna bagi kontributor OSM, tetapi pada aplikasi untuk pengguna umum fitur-fitur itu mungkin hanya akan membuat antarmukanya berantakan
    • Setidaknya, semoga keduanya bisa berbagi tile peta, sehingga tidak perlu memakai ruang bergigabyte-gigabyte secara duplikat untuk peta yang sama
  • https://marble.kde.org/ sudah memiliki implementasi sendiri untuk streaming layer OSM vektor sejak 9 tahun lalu, dan saya sudah cukup lama menunggu hal serupa muncul di aplikasi peta OSM lainnya
    Di aplikasi OSM Android, mengunduh peta ratusan megabyte dalam bongkahan besar per negara selalu menjadi masalah penyimpanan. Senang sekali akhirnya standar mulai terbentuk, dan saya berharap ini diadopsi serta disempurnakan di berbagai aplikasi. Kerja yang luar biasa

    • Saya mencari aplikasi Marble di Android, tetapi tidak ada di Play Store maupun F-Droid. Tautan Play Store di situs webnya 404. Apakah sudah ditinggalkan?