Daftar Isi:

Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap: 7 Langkah (dengan Gambar)
Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap: 7 Langkah (dengan Gambar)

Video: Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap: 7 Langkah (dengan Gambar)

Video: Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap: 7 Langkah (dengan Gambar)
Video: Tutorial Menggambar Peta Indonesia Langkah Demi Langkah 2024, Juli
Anonim
Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap
Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap

Dalam instruksi ini, saya akan menjelaskan proses di mana Anda dapat membuat peta bergaya buatan Anda sendiri. Peta bergaya adalah peta di mana pengguna dapat menentukan lapisan data mana yang divisualisasikan, serta menentukan gaya yang dengannya setiap lapisan divisualisasikan. Pertama-tama saya akan menjelaskan proses di mana Anda dapat menulis perangkat lunak untuk menyesuaikan dgn mode peta, diikuti dengan contoh perangkat lunak Python yang saya tulis untuk melakukan tugas ini.

Video berikut menyoroti bagaimana saya secara pribadi menghasilkan peta bergaya, tetapi teruslah membaca untuk detail intim. Saya sangat senang melihat apa yang diciptakan komunitas!

Apa motivasi saya di balik proyek ini?

Sejujurnya, saya memulai proyek ini karena saya pikir itu akan menyenangkan untuk dilakukan. Ide ini telah berkecamuk di pikiran saya selama setahun terakhir, dan akhirnya saya meluangkan waktu yang saya butuhkan untuk mewujudkannya. Setelah seharian membuat prototipe dengan beberapa skrip dasar, saya dapat menghasilkan hasil yang sangat menjanjikan - sangat menjanjikan sehingga saya tahu bahwa saya perlu memformalkan skrip saya sehingga orang lain dapat dengan mudah membuat kreasi mereka sendiri.

Motivasi saya dalam menulis instruksi ini adalah karena saya menemukan informasi yang sangat minim tentang cara membuat peta bergaya Anda sendiri dari awal. Saya berharap dapat berbagi apa yang telah saya pelajari dengan komunitas.

Sumber Daya/Tautan:

  • Peta Jalan Terbuka
  • OpenStreetMap Legal
  • Repositori Github

Perlengkapan

  • Distribusi Python (saya menggunakan Anaconda & Python 3.6)
  • PyQt5 (untuk dependensi GUI)

Langkah 1: Menentukan Proses I: Mengunduh File OSM

Mendefinisikan Proses I: Mengunduh File OSM
Mendefinisikan Proses I: Mengunduh File OSM

Ketika saya pertama kali memulai proyek ini, pertanyaan yang paling mencolok adalah, "di mana saya bisa mendapatkan data peta." Tentu saja, seperti yang Anda harapkan, saya langsung memikirkan Google Maps. Setelah penelitian yang signifikan, saya menemukan bahwa Google benar-benar tidak ingin orang bermain dengan data mereka, dalam arti kreatif atau sebaliknya. Bahkan, mereka secara eksplisit melarang pengikisan web dari Google Maps.

Untungnya, keputusasaan saya berumur pendek setelah saya menemukan OpenStreetMap (OSM). OSM adalah proyek kolaboratif yang melibatkan orang-orang di seluruh dunia yang menyumbangkan data. OSM secara eksplisit mengizinkan penggunaan data mereka secara terbuka atas nama perangkat lunak Open Source. Dengan demikian, mengunjungi halaman web OSM adalah tempat perjalanan penataan peta dimulai.

Setelah sampai di website OSM, klik tab "Export" untuk menampilkan alat ekspor peta. Sekarang, perbesar untuk melihat wilayah yang Anda minati untuk mengumpulkan data peta. Pilih tautan "Pilih area yang berbeda secara manual", yang akan memunculkan kotak di layar Anda. Bentuk dan tempatkan kotak ini di atas wilayah yang diinginkan. Setelah puas, klik tombol "Ekspor" untuk mengunduh file data OSM Anda.

Catatan #1: Jika wilayah yang Anda pilih berisi terlalu banyak data, Anda akan mendapatkan kesalahan bahwa Anda telah memilih terlalu banyak node. Jika ini terjadi pada Anda, klik tombol "Overpass API" untuk mengunduh file Anda yang lebih besar.

Catatan #2: Jika file OSM yang Anda unduh lebih besar dari 30MB, program Python yang saya tulis akan terasa lambat. Jika Anda bertekad untuk menggunakan wilayah yang luas, pertimbangkan untuk menulis skrip untuk membuang data berlebihan yang tidak Anda rencanakan untuk menggambar.

Langkah 2: Mendefinisikan Proses II: Memahami Data

Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data
Mendefinisikan Proses II: Memahami Data

"Aku punya datanya… sekarang apa?"

Mulailah dengan membuka file OSM yang Anda unduh ke dalam perangkat lunak pengedit teks favorit Anda. Pertama-tama Anda akan melihat ini adalah file XML, yang sangat bagus! XML cukup mudah untuk diurai. Awal file Anda akan terlihat hampir sama dengan gambar pertama langkah ini - beberapa metadata dasar dan batasan geografis akan dicantumkan.

Saat Anda menggulir file, Anda akan melihat tiga elemen data yang digunakan di seluruh:

  1. Node
  2. cara
  3. Hubungan

Elemen data paling dasar, sebuah node hanya memiliki pengidentifikasi unik, garis lintang, dan garis bujur yang terkait dengannya. Tentu saja, ada metadata tambahan, tetapi kami dapat membuangnya dengan aman.

Cara adalah kumpulan node. Sebuah cara dapat dirender sebagai bentuk tertutup atau sebagai garis terbuka. Cara terdiri dari kumpulan node yang diidentifikasi oleh pengidentifikasi uniknya. Mereka ditandai dengan kunci yang menentukan grup data tempat mereka berada. Misalnya, cara yang digambarkan pada gambar ketiga di atas termasuk dalam kelompok data "tempat", dan subkelompoknya, "pulau". Dengan kata lain, cara khusus ini termasuk dalam lapisan "pulau" di bawah kelompok "tempat". Cara juga memiliki pengidentifikasi unik.

Terakhir, hubungan adalah kumpulan cara. Suatu relasi dapat mewakili bentuk kompleks dengan lubang atau dengan beberapa daerah. Relasi juga akan memiliki pengenal unik dan akan ditandai dengan cara yang sama.

Anda dapat membaca lebih lanjut tentang elemen data ini dari wiki OSM:

  • Node
  • cara
  • Hubungan

Langkah 3: Mendefinisikan Proses III: Mencerna Data

Mendefinisikan Proses III: Mencerna Data
Mendefinisikan Proses III: Mencerna Data

Sekarang Anda setidaknya harus memiliki pemahaman yang dangkal tentang elemen data yang membentuk file OSM. Pada titik ini, kami tertarik untuk membaca data OSM menggunakan bahasa pilihan Anda. Meskipun langkah ini berpusat pada Python, jika Anda tidak ingin menggunakan Python, Anda tetap harus membaca bagian ini karena berisi beberapa tips dan trik.

Paket xml disertakan secara default dengan sebagian besar distribusi Python standar. Kami akan menggunakan paket ini untuk mengurai file OSM kami dengan sangat mudah seperti yang ditunjukkan pada gambar pertama. Dalam satu for loop, Anda dapat memproses penanganan data OSM untuk setiap elemen data tertentu.

Pada baris terakhir gambar, Anda akan melihat saya memeriksa tag 'batas'. Langkah ini sangat penting dalam menerjemahkan nilai lintang dan bujur ke dalam piksel di layar. Saya sangat merekomendasikan menjalankan konversi ini pada saat Anda memuat file OSM, karena konversi massal data membutuhkan proses yang intensif.

Berbicara tentang mengubah garis lintang dan garis bujur ke koordinat layar, berikut adalah tautan ke fungsi komputasi yang saya tulis. Anda mungkin akan melihat sesuatu yang sedikit aneh dalam mengonversi garis lintang ke koordinat layar. Ada langkah ekstra yang terlibat jika dibandingkan dengan garis bujur! Ternyata, data OSM dimodelkan menggunakan metode proyeksi Pseudo-Mercator. Untungnya, OSM memiliki dokumentasi fantastis tentang topik ini di sini, dan mereka menyediakan fungsi konversi lintang untuk sejumlah besar bahasa. Luar biasa!

Catatan: Dalam kode saya, koordinat layar (0, 0) adalah sudut kiri atas layar.

Langkah 4: Implementasi Python Map Stylizer

Implementasi Penata Peta Python
Implementasi Penata Peta Python
Implementasi Penata Peta Python
Implementasi Penata Peta Python
Implementasi Penata Peta Python
Implementasi Penata Peta Python

Sampai saat ini, saya telah membahas file data OSM - apa itu, bagaimana membacanya, dan apa yang harus dilakukan dengannya. Sekarang saya akan membahas perangkat lunak yang saya tulis untuk menangani visualisasi peta gaya (repo GitHub disediakan dalam pendahuluan).

Implementasi spesifik saya berfokus pada kontrol pengguna dari pipeline rendering. Secara khusus, saya mengizinkan pengguna untuk memilih lapisan yang mereka inginkan terlihat dan bagaimana mereka ingin lapisan itu divisualisasikan. Seperti yang saya sebutkan secara singkat sebelumnya, ada dua kelas elemen yang dirender: item isi dan item baris. Isi ditentukan hanya oleh warna, sedangkan garis ditentukan oleh warna, lebar garis, gaya garis, gaya batas garis, dan gaya gabungan garis.

Saat pengguna membuat modifikasi pada gaya lapisan dan visibilitas, perubahan tersebut tercermin dalam widget peta di sebelah kanan. Setelah pengguna memodifikasi tampilan peta untuk kepuasan mereka, dia dapat menyesuaikan dimensi peta maksimum dan menyimpan peta sebagai gambar di komputernya. Dalam menyimpan gambar, file konfigurasi pengguna juga akan disimpan. Ini memastikan pengguna dapat mengingat dan menggunakan kembali konfigurasi yang dia gunakan untuk menghasilkan gambar tertentu kapan saja.

Langkah 5: Kelemahan Implementasi + Solusi

Kelemahan Implementasi + Solusi
Kelemahan Implementasi + Solusi
Kelemahan Implementasi + Solusi
Kelemahan Implementasi + Solusi

Ketika saya pertama kali mulai menata peta secara manual, saya mengetahui bahwa ini adalah proses yang agak membosankan. Menawarkan kontrol maksimum kepada pengguna bisa sangat merepotkan karena banyaknya "kenop" yang tersedia. Namun, ada solusi sederhana, yang melibatkan sedikit skrip tambahan.

Saya mulai dengan mengidentifikasi lapisan mana yang sangat saya minati. Untuk tujuan instruksi ini, katakanlah saya paling tertarik pada bangunan (semuanya), sungai, jalan raya utama, dan jalan permukaan. Saya akan menulis skrip tempat saya membuat instance Konfigurasi, beralih status lapisan dengan tepat menggunakan fungsi setItemState() dan konstanta yang ditentukan, dan mengatur warna berdasarkan bagaimana saya ingin lapisan saya muncul menggunakan setValue(). File konfigurasi yang dihasilkan yang disimpan dapat disalin ke folder konfigurasi dan dimuat oleh pengguna.

Contoh script ada pada gambar di atas. Gambar kedua adalah contoh tampilan fungsi pembantu, dan karena pada dasarnya semuanya identik, hanya dengan konstanta yang bervariasi, saya hanya menyertakan gambar satu contoh.

Langkah 6: Area untuk Peningkatan

Area untuk Peningkatan
Area untuk Peningkatan

Setelah merenungkan implementasi perangkat lunak saya, saya telah mengidentifikasi beberapa area yang akan menjadi peningkatan yang bermanfaat bagi pengguna listrik.

  1. Rendering lapisan dinamis. Saat ini, saya memiliki daftar lapisan yang telah ditentukan sebelumnya yang akan dirender, itu saja. Bagian dari pembenarannya adalah kesulitan dalam menentukan apakah suatu lapisan harus berupa garis atau isian. Akibatnya, dengan hampir setiap file OSM yang Anda buka, Anda akan disambut dengan banyak peringatan tentang lapisan yang tidak akan ditampilkan. Seringkali ini sangat minim sehingga tidak menjadi masalah, tetapi pasti ada lapisan kritis yang hilang. Rendering lapisan dinamis akan menghilangkan masalah ini.
  2. Penugasan lapisan dinamis. Ini sejalan dengan #1; jika Anda menginginkan rendering lapisan dinamis, Anda memerlukan penetapan lapisan dinamis (yaitu, mengidentifikasi lapisan pengisi vs. lapisan garis). Ini dapat dicapai secara wajar, seperti yang telah saya pelajari, karena Cara yang simpul pertama dan terakhirnya sama akan menjadi jalur tertutup dan karena itu diisi.
  3. Grup Warna. Peta bergaya sering kali memiliki beberapa lapisan yang memiliki gaya yang sama, dan memungkinkan pengguna untuk mengubah gaya grup sekaligus akan sangat mengurangi waktu yang dihabiskan pengguna untuk mengedit lapisan satu per satu.

Langkah 7: Menutup Pikiran

Pikiran Penutup
Pikiran Penutup
Pikiran Penutup
Pikiran Penutup
Pikiran Penutup
Pikiran Penutup

Terima kasih semuanya telah meluangkan waktu untuk membaca Instructable saya. Proyek ini merupakan puncak dari banyak jam penelitian, desain, pemrograman, dan debugging. Saya harap saya dapat menyediakan landasan peluncuran dari mana Anda dapat membangun proyek Anda sendiri atau membangun apa yang telah saya tulis. Saya juga berharap kekurangan dan tips saya memberikan banyak poin untuk dipertimbangkan dalam desain Anda. Jika Anda kurang ingin memprogram dan lebih cenderung membuat karya seni, saya ingin melihat apa yang Anda buat di komentar! Kemungkinannya tidak terbatas!

Terima kasih khusus kepada para kontributor OpenStreetMap! Proyek seperti ini tidak akan mungkin terjadi tanpa upaya signifikan mereka.

Tolong beri tahu saya jika Anda memiliki pertanyaan di komentar!

Tantangan Peta
Tantangan Peta
Tantangan Peta
Tantangan Peta

Runner Up dalam Tantangan Peta

Direkomendasikan: