Isi kandungan:

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, November
Anonim
Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap
Cara Membuat Peta Bergaya Khusus Menggunakan OpenStreetMap

Dalam arahan ini, saya akan menerangkan proses di mana anda boleh menghasilkan peta bergaya khas anda sendiri. Peta bergaya adalah peta di mana pengguna dapat menentukan lapisan data yang divisualisasikan, serta menentukan gaya dengan mana setiap lapisan digambarkan. Saya akan menerangkan terlebih dahulu proses di mana anda boleh menulis perisian untuk menyusun peta, diikuti dengan contoh perisian Python yang saya tulis untuk melaksanakan tugas ini.

Video berikut menyoroti bagaimana saya menghasilkan peta bergaya secara peribadi, tetapi terus membaca untuk maklumat terperinci. Saya sangat teruja untuk melihat apa yang dihasilkan oleh komuniti!

Apakah motivasi saya di sebalik projek ini?

Sejujurnya, saya memulakan projek ini kerana saya fikir ia akan menyenangkan. Idea ini telah muncul dalam benak saya selama setahun terakhir, dan akhirnya saya meluangkan masa yang saya perlukan untuk membuahkan hasil. Setelah seharian melakukan prototaip dengan beberapa skrip asas, saya dapat menghasilkan hasil yang sangat menjanjikan - begitu menjanjikan bahawa saya tahu bahawa saya perlu memformalkan skrip saya sehingga orang lain dapat membuat ciptaan mereka sendiri dengan mudah.

Motivasi saya dalam menulis instruksional ini adalah kerana saya dapati maklumat yang sangat minimum mengenai cara membuat peta bergaya anda sendiri dari awal. Saya berharap dapat berkongsi apa yang telah saya pelajari dengan masyarakat.

Sumber / Pautan:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Repositori Github

Bekalan

  • Sebaran Python (saya menggunakan Anaconda & Python 3.6)
  • PyQt5 (untuk kebergantungan GUI)

Langkah 1: Menentukan Proses I: Memuat turun Fail OSM

Menentukan Proses I: Memuat turun Fail OSM
Menentukan Proses I: Memuat turun Fail OSM

Semasa saya memulakan projek ini, soalan yang paling mencolok adalah, "di mana saya boleh mendapatkan data peta." Sememangnya, seperti yang anda harapkan, saya segera memikirkan Peta Google. Setelah membuat kajian yang mendalam, saya dapati bahawa Google sebenarnya tidak mahu orang bermain dengan data mereka, dari segi kreatif atau sebaliknya. Sebenarnya, mereka secara terang-terangan tidak membenarkan pengikisan web dari Peta Google.

Nasib baik, keputusasaan saya tidak lama setelah saya menemui OpenStreetMap (OSM). OSM adalah projek kolaboratif yang melibatkan orang di seluruh dunia menyumbang data. OSM secara eksplisit membenarkan penggunaan data mereka secara terbuka atas nama perisian Open Source. Oleh itu, melayari laman web OSM adalah tempat memulakan perjalanan penataan peta.

Setelah tiba di laman web OSM, klik pada tab "Eksport" untuk menunjukkan alat eksport peta. Sekarang, zum masuk untuk melihat wilayah yang anda berminat untuk mengumpulkan data peta. Pilih pautan "Pilih kawasan lain secara manual", yang akan memunculkan kotak di skrin anda. Bentuk dan letakkan kotak ini di kawasan yang menarik. Setelah berpuas hati, klik butang "Eksport" untuk memuat turun fail data OSM anda.

Catatan # 1: Sekiranya kawasan pilihan anda mengandungi terlalu banyak data, anda akan mendapat ralat bahawa anda memilih terlalu banyak nod. Sekiranya ini berlaku kepada anda, klik butang "Overpass API" untuk memuat turun fail anda yang lebih besar.

Catatan # 2: Sekiranya fail OSM yang anda muat turun lebih besar daripada 30MB, program Python yang saya tulis akan perlahan. Sekiranya anda bertekad untuk menggunakan wilayah yang luas, pertimbangkan untuk menulis skrip untuk membuang data berlebihan yang tidak anda rancangkan.

Langkah 2: Menentukan 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

"Saya mempunyai data … sekarang apa?"

Mulakan dengan membuka fail OSM yang dimuat turun ke dalam perisian penyuntingan teks kegemaran anda. Anda pertama kali akan melihat ini adalah fail XML, yang sangat bagus! XML cukup mudah untuk dihuraikan. Permulaan fail anda akan kelihatan hampir sama dengan gambar pertama langkah ini - beberapa metadata asas dan sempadan geografi akan disenaraikan.

Semasa anda menatal fail, anda akan melihat tiga elemen data yang digunakan sepanjang:

  1. Nod
  2. Cara-cara
  3. Perhubungan

Unsur data paling asas, simpul hanya mempunyai pengecam, garis lintang, dan garis bujur yang unik yang berkaitan dengannya. Sudah tentu, terdapat metadata tambahan, tetapi kita dapat membuangnya dengan selamat.

Cara adalah koleksi nod. Cara boleh diberikan sebagai bentuk tertutup atau sebagai garis terbuka. Cara terdiri daripada kumpulan nod yang dikenal pasti oleh pengecam uniknya. Mereka ditandai dengan kunci yang menentukan kumpulan data yang menjadi milik mereka. Sebagai contoh, cara yang digambarkan dalam gambar ketiga di atas adalah milik kumpulan data "tempat", dan subkumpulannya, "pulau." Dengan kata lain, cara khusus ini tergolong dalam lapisan "pulau" di bawah kumpulan "tempat". Cara juga mempunyai pengecam unik.

Terakhir, hubungan adalah kumpulan cara. Hubungan boleh mewakili bentuk kompleks dengan lubang atau dengan pelbagai kawasan. Hubungan juga akan mempunyai pengecam yang unik dan akan ditandai sama dengan cara.

Anda boleh membaca lebih lanjut mengenai elemen data ini dari wiki OSM:

  • Nod
  • Cara-cara
  • Perhubungan

Langkah 3: Menentukan Proses III: Mencerna Data

Menentukan Proses III: Mencerna Data
Menentukan Proses III: Mencerna Data

Sekarang anda harus mempunyai sekurang-kurangnya pemahaman dangkal mengenai elemen data yang membentuk fail OSM. Pada ketika ini, kami berminat membaca data OSM menggunakan bahasa pilihan anda. Walaupun langkah ini berpusat pada Python, jika anda tidak mahu menggunakan Python, anda masih harus membaca bahagian ini kerana mengandungi beberapa petua dan trik.

Pakej xml disertakan secara lalai dengan sebilangan besar pengedaran Python standard. Kami akan menggunakan pakej ini untuk menguraikan fail OSM kami dengan mudah seperti yang ditunjukkan pada gambar pertama. Dalam single for loop, anda boleh memproses pengendalian data OSM untuk setiap elemen data tertentu.

Pada baris terakhir gambar, anda akan melihat bahawa saya memeriksa tanda 'batas'. Langkah ini sangat penting dalam menerjemahkan nilai garis lintang dan garis bujur menjadi piksel di skrin. Saya sangat mengesyorkan menjalankan penukaran ini pada masa anda memuat fail OSM, kerana penukaran massa data memerlukan proses yang intensif.

Bercakap tentang menukar garis lintang dan garis bujur ke koordinat skrin, berikut adalah pautan ke fungsi pengiraan yang saya tulis. Anda mungkin akan melihat sesuatu yang agak aneh dalam menukar garis lintang ke koordinat skrin. Terdapat langkah tambahan yang diperlukan jika dibandingkan dengan garis bujur! Ternyata, data OSM dimodelkan menggunakan kaedah unjuran Pseudo-Mercator. Nasib baik, OSM mempunyai dokumentasi hebat mengenai topik ini di sini, dan mereka menyediakan fungsi penukaran garis lintang untuk sebilangan besar bahasa. Hebat!

Catatan: Dalam kod saya, koordinat skrin (0, 0) adalah sudut kiri atas skrin.

Langkah 4: Pelaksanaan Stylizer Peta Python

Pelaksanaan Stylizer Peta Python
Pelaksanaan Stylizer Peta Python
Pelaksanaan Stylizer Peta Python
Pelaksanaan Stylizer Peta Python
Pelaksanaan Stylizer Peta Python
Pelaksanaan Stylizer Peta Python

Sehingga ini, saya telah membincangkan fail data OSM - apakah itu, bagaimana membacanya, dan apa yang perlu dilakukan dengannya. Sekarang saya akan membincangkan perisian yang saya tulis untuk menangani visualisasi peta gaya (repo GitHub disediakan dalam pengenalan).

Pelaksanaan khusus saya memfokuskan pada kawalan pengguna saluran penyampaian. Secara khusus, saya membenarkan pengguna memilih lapisan yang mereka mahu kelihatan dan bagaimana mereka mahu lapisan itu dapat dilihat. Seperti yang saya nyatakan sebentar tadi, terdapat dua kelas elemen yang diberikan: isi item dan item baris. Isi didefinisikan hanya dengan warna, sementara garis ditentukan oleh warna, lebar garis, gaya garis, gaya penutup garis, dan gaya gabung baris.

Ketika pengguna melakukan pengubahsuaian pada gaya lapisan dan keterlihatan, perubahan tersebut tercermin dalam widget peta di sebelah kanan. Setelah pengguna mengubah tampilan peta untuk memuaskan mereka, dia dapat menyesuaikan dimensi peta maksimum dan menyimpan peta sebagai gambar di komputernya. Dalam menyimpan gambar, fail konfigurasi pengguna juga akan disimpan. Ini memastikan pengguna dapat mengingat dan menggunakan kembali konfigurasi yang digunakannya untuk menghasilkan gambar tertentu pada bila-bila masa.

Langkah 5: Kelemahan Pelaksanaan + Penyelesaian

Kelemahan Pelaksanaan + Penyelesaian
Kelemahan Pelaksanaan + Penyelesaian
Kelemahan Pelaksanaan + Penyelesaian
Kelemahan Pelaksanaan + Penyelesaian

Ketika mula-mula mula menyusun peta secara manual, saya belajar bahawa ini adalah proses yang agak membosankan. Menawarkan kawalan maksimum pengguna boleh menjadi luar biasa kerana sebilangan besar "tombol" yang ada. Namun, ada penyelesaian mudah, yang melibatkan skrip tambahan sedikit.

Saya bermula dengan mengenal pasti lapisan mana yang sangat saya minati. Untuk tujuan ini, katakan saya paling berminat dengan bangunan (semuanya), sungai, lebuh raya utama, dan jalan permukaan. Saya akan menulis skrip di mana saya membuat contoh Konfigurasi, menukar status lapisan dengan tepat menggunakan fungsi setItemState () dan pemalar yang ditentukan, dan menetapkan warna berdasarkan bagaimana saya mahu lapisan saya muncul menggunakan setValue (). Fail konfigurasi yang dihasilkan dapat disimpan dapat disalin ke folder konfigurasi dan dimuat oleh pengguna.

Skrip contoh terdapat dalam gambar di atas. Gambar kedua adalah contoh bagaimana fungsi pembantu, dan kerana pada dasarnya semuanya serupa, hanya dengan pemalar yang berbeza-beza, saya hanya menyertakan gambar satu contoh.

Langkah 6: Kawasan untuk Penambahbaikan

Kawasan untuk Penambahbaikan
Kawasan untuk Penambahbaikan

Setelah merenungkan pelaksanaan perisian saya, saya telah mengenal pasti beberapa bidang yang akan menjadi penambahbaikan yang berguna bagi pengguna tenaga.

  1. Pemaparan lapisan dinamik. Pada masa ini, saya mempunyai senarai lapisan yang telah ditentukan yang akan diberikan, itu saja. Sebahagian dari pembenaran adalah kesukaran dalam menentukan apakah lapisan harus berupa garis atau isian. Hasilnya, dengan hampir setiap fail OSM yang anda buka, anda akan disambut dengan banyak peringatan mengenai lapisan yang tidak akan diberikan. Selalunya ini sangat minimum, ia tidak menjadi masalah, tetapi ada lapisan kritikal yang hilang. Rendering lapisan dinamik akan menghilangkan kebimbangan ini.
  2. Penugasan lapisan dinamik. Ini sesuai dengan # 1; jika anda mahukan rendering lapisan dinamik, anda memerlukan penugasan lapisan dinamik (iaitu, mengenal pasti lapisan isi berbanding lapisan garis). Ini dapat dicapai dengan wajar, seperti yang saya pelajari, kerana Cara yang simpul pertama dan terakhirnya sama akan menjadi jalan tertutup dan oleh itu dipenuhi.
  3. Kumpulan Warna. Peta bergaya sering mempunyai beberapa lapisan yang memiliki gaya yang sama, dan memungkinkan pengguna untuk mengubah gaya kumpulan pada satu masa yang sama akan sangat mengurangkan masa pengguna menghabiskan masa mengedit lapisan satu demi satu.

Langkah 7: Menutup Pemikiran

Pemikiran Penutup
Pemikiran Penutup
Pemikiran Penutup
Pemikiran Penutup
Pemikiran Penutup
Pemikiran Penutup

Terima kasih semua kerana meluangkan masa untuk membaca Instructable saya. Projek ini mewakili puncak penyelidikan, reka bentuk, pengaturcaraan, dan penyahpepijatan selama berjam-jam. Saya harap saya dapat menyediakan pelancaran dari mana anda boleh membina projek anda sendiri atau membina apa yang telah saya tulis. Saya juga berharap kekurangan dan petua saya memberikan banyak perkara yang perlu dipertimbangkan dalam reka bentuk anda. Sekiranya anda kurang cenderung untuk memprogram dan lebih cenderung untuk membuat karya seni, saya ingin melihat apa yang anda buat dalam komen! Kemungkinan tidak berkesudahan!

Terima kasih khas kepada penyumbang OpenStreetMap! Projek seperti ini tidak akan dapat dilaksanakan tanpa usaha yang besar.

Beritahu saya jika anda mempunyai sebarang pertanyaan dalam komen!

Cabaran Peta
Cabaran Peta
Cabaran Peta
Cabaran Peta

Naib Johan dalam Cabaran Peta

Disyorkan: