Mundarija:

OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin: 7 qadam (rasmlar bilan)
OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin: 7 qadam (rasmlar bilan)

Video: OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin: 7 qadam (rasmlar bilan)

Video: OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin: 7 qadam (rasmlar bilan)
Video: Представляем Five SeveN - Gun Club Armory Геймплей 60fps 🇷🇺 2024, Iyul
Anonim
OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin
OpenStreetMap yordamida maxsus stilize qilingan xaritalarni qanday yaratish mumkin

Ushbu qo'llanmada men sizga o'zingizning xohishingizga ko'ra stilize qilingan xaritalar yaratish jarayonini tasvirlab beraman. Stilize qilingan xarita - bu xaridor qaysi ma'lumotlar qatlamlari vizualizatsiya qilinishini belgilashi, shuningdek har bir qavat vizualizatsiya qilinadigan uslubni belgilashi mumkin bo'lgan xarita. Men avval siz xaritalarni stilize qilish uchun dasturiy ta'minot yozishingiz mumkin bo'lgan jarayonni tasvirlab beraman, keyin bu vazifani bajarish uchun men yozgan Python dasturiga misol keltiraman.

Quyidagi videoda men stilize qilingan xaritalarni shaxsan qanday yaratganimni ko'rsatib beradi, lekin yaqin tafsilotlar uchun o'qishni davom ettiring. Jamiyat yaratgan narsalarni ko'rib juda xursand bo'ldim!

Bu loyiha ortida mening motivatsiyam nima?

Ochig'ini aytganda, men bu loyihani boshladim, chunki bu qiziqarli bo'ladi deb o'yladim. O'tgan bir yil mobaynida bu fikr xayolimda aylanib yurdi va men nihoyat uni amalga oshirish uchun vaqt ajratdim. Bir kunlik oddiy skriptlar yordamida prototip yozganimdan so'ng, men juda istiqbolli natijalarga erisha oldim, shuning uchun men o'z skriptlarimni rasmiylashtirishim kerakligini bilardim, boshqalar osonlikcha o'zlari yaratishi mumkin edi.

Bu ko'rsatmalarni yozishga mening motivatsiyam, o'zimning stilize qilingan xaritalarimni noldan qanday yaratish haqida juda kam ma'lumot topganligim bilan bog'liq. O'rganganlarimni jamoatchilik bilan bo'lishishga umid qilaman.

Manbalar/havolalar:

  • OpenStreetMap
  • OpenStreetMap qonuniy
  • Github ombori

Ta'minotlar

  • Python taqsimoti (men Anaconda va Python 3.6 dan foydalanganman)
  • PyQt5 (GUI qaramligi uchun)

1 -qadam: I jarayonini aniqlash: OSM faylini yuklash

I jarayonni aniqlash: OSM faylini yuklash
I jarayonni aniqlash: OSM faylini yuklash

Men bu loyihani birinchi marta boshlaganimda, "xarita ma'lumotlarini qayerdan olsam bo'ladi?" Degan savol eng yorqin edi. Tabiiyki, siz kutganingizdek, men darhol Google Xaritalar haqida o'yladim. Muhim tadqiqotlardan so'ng, men Google haqiqatan ham odamlarning o'z ma'lumotlari bilan ijodiy ma'noda o'ynashini xohlamasligini aniqladim. Aslida, ular Google xaritalaridan veb-qirib tashlashga aniq ruxsat bermaydilar.

Yaxshiyamki, umidsizligim OpenStreetMap (OSM) ni kashf qilishim bilan qisqa muddatli bo'ldi. OSM - bu butun dunyo bo'ylab ma'lumotlarni qo'shadigan odamlar ishtirokidagi hamkorlikdagi loyiha. OSM ochiq manbali dasturiy ta'minot nomidan o'z ma'lumotlarini ochiq ishlatishga ruxsat beradi. Shunday qilib, OSM veb -sahifasiga tashrif buyurish xaritani uslublash sayohati boshlanadi.

OSM veb -saytiga kelganingizdan so'ng, xaritani eksport qilish vositalarini ko'rsatish uchun "Eksport" yorlig'ini bosing. Endi siz xarita ma'lumotlarini to'plashga qiziqqan mintaqani ko'rish uchun kattalashtiring. "Qo'lda boshqa maydonni tanlash" havolasini tanlang, bu sizning ekraningizda qutini ko'rsatadi. Bu qutini shakllantiring va qiziqish doirasiga qo'ying. Xohlaganingizdan so'ng, OSM ma'lumot faylini yuklab olish uchun "Eksport" tugmasini bosing.

Eslatma #1: Agar siz tanlagan hududda juda ko'p ma'lumotlar bo'lsa, siz juda ko'p tugunni tanlaganingiz haqida xato bo'ladi. Agar sizda shunday bo'lsa, kattaroq faylni yuklab olish uchun "Overpass API" tugmasini bosing.

Eslatma #2: Agar yuklab olingan OSM faylingiz 30 MB dan katta bo'lsa, men yozgan Python dasturi sezilarli darajada sekinlashadi. Agar siz katta hududdan foydalanishga qaror qilsangiz, chizishni rejalashtirmagan ortiqcha ma'lumotlarni tashlab yuborish uchun skript yozishni o'ylab ko'ring.

2 -qadam: II jarayonni aniqlash: Ma'lumotlarni tushunish

II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish
II jarayonni aniqlash: ma'lumotlarni tushunish

"Menda ma'lumotlar bor … endi nima?"

Yuklab olingan OSM faylini sevimli matn tahrirlash dasturiga ochishdan boshlang. Siz birinchi navbatda bu XML fayli ekanligini sezasiz, bu juda zo'r! XMLni tahlil qilish oson. Faylning boshi ushbu qadamning birinchi rasmiga deyarli o'xshash bo'lishi kerak - ba'zi asosiy metadata va geografik chegaralar ro'yxatga olinadi.

Faylni aylantirganda, siz uchta ma'lumot elementini ko'rasiz:

  1. Tugunlar
  2. Yo'llar
  3. Munosabatlar

Ma'lumotlarning eng asosiy elementi bo'lgan tugun shunchaki o'ziga xos identifikator, kenglik va uzunlikka ega. Albatta, qo'shimcha metadata bor, lekin biz uni xavfsiz tashlab yuborishimiz mumkin.

Yo'llar - bu tugunlar to'plami. Yo'l yopiq shakl yoki ochiq-oydin chiziq shaklida ko'rsatilishi mumkin. Yo'llar o'ziga xos identifikatori bilan aniqlangan tugunlar to'plamidan iborat. Ular tegishli bo'lgan ma'lumotlar guruhini belgilaydigan kalitlar bilan belgilanadi. Masalan, yuqoridagi uchinchi rasmda tasvirlangan usul "joy" ma'lumotlar guruhiga va uning "orol" guruhiga tegishli. Boshqacha aytganda, bu o'ziga xos usul "joy" guruhi ostidagi "orol" qatlamiga tegishli. Yo'llar ham o'ziga xos identifikatorlarga ega.

Nihoyat, munosabatlar - bu yo'llar to'plami. Aloqalar teshikli yoki bir nechta mintaqali murakkab shaklni anglatishi mumkin. Aloqalar, shuningdek, o'ziga xos identifikatorga ega bo'ladi va shunga o'xshash tarzda etiketlanadi.

Ushbu ma'lumotlar elementlari haqida ko'proq ma'lumotni OSM vikidan o'qishingiz mumkin:

  • Tugunlar
  • Yo'llar
  • Munosabatlar

3 -qadam: III jarayonni aniqlash: ma'lumotlarni hazm qilish

III jarayonni aniqlash: ma'lumotlarni hazm qilish
III jarayonni aniqlash: ma'lumotlarni hazm qilish

Endi siz OSM faylini tashkil etuvchi ma'lumotlar elementlari haqida hech bo'lmaganda yuzaki tushunishingiz kerak. Bu vaqtda biz tanlagan til yordamida OSM ma'lumotlarini o'qishga qiziqamiz. Bu qadam Python-markazli bo'lsa-da, agar siz Python-dan foydalanishni xohlamasangiz ham, bu qismni o'qishingiz kerak, chunki unda bir nechta maslahat va fokuslar mavjud.

Xml to'plami standart Python tarqatishlarining ko'pchiligi bilan sukut bo'yicha kiritilgan. Biz ushbu paketni OSM faylini birinchi rasmda ko'rsatilgandek osonlik bilan tahlil qilish uchun ishlatamiz. Bitta tsiklda siz har bir ma'lumot elementi uchun OSM ma'lumotlarini qayta ishlashingiz mumkin.

Rasmning oxirgi satrida men "chegaralar" yorlig'ini tekshirganimni ko'rasiz. Kenglik va uzunlik qiymatlarini ekrandagi piksellarga aylantirishda bu qadam juda muhim. Men ushbu konvertatsiyani OSM faylini yuklash paytida ishga tushirishni tavsiya qilaman, chunki ma'lumotlarni ommaviy konvertatsiya qilish jarayoni intensiv.

Kenglik va uzunliklarni ekran koordinatalariga aylantirish haqida gapirganda, bu erda men yozgan hisoblash funktsiyasiga havola. Kenglikni ekran koordinatalariga aylantirishda siz biroz g'alati narsani sezasiz. Uzunlik bilan solishtirganda qo'shimcha qadam bor! Ma'lum bo'lishicha, OSM ma'lumotlari Pseudo-Mercator proektsion usuli yordamida modellashtirilgan. Yaxshiyamki, OSM bu erda bu mavzu bo'yicha ajoyib hujjatlarga ega va ular ko'p sonli tillar uchun kengliklarni o'zgartirish funktsiyalari bilan ta'minlangan. Ajoyib!

Eslatma: Mening kodimda ekran koordinatasi (0, 0)-ekranning yuqori chap burchagi.

4 -qadam: Python xaritasini stilizatorni amalga oshirish

Python xaritasi stilizatorini amalga oshirish
Python xaritasi stilizatorini amalga oshirish
Python xaritasi stilizatorini amalga oshirish
Python xaritasi stilizatorini amalga oshirish
Python xaritasi stilizatorini amalga oshirish
Python xaritasi stilizatorini amalga oshirish

Shu paytgacha men OSM ma'lumotlar fayli - bu nima, uni qanday o'qish va u bilan nima qilish kerakligini muhokama qildim. Endi men stilistik xaritalarni vizualizatsiya qilish uchun yozgan dasturiy ta'minotni muhokama qilaman (kirish qismida GitHub repo berilgan).

Mening aniq dasturim renderlash quvurini foydalanuvchilarni boshqarishga qaratilgan. Xususan, men foydalanuvchiga ko'rinadigan qatlamlarni tanlashini va bu qatlam qanday ko'rinishini xohlashini ruxsat beraman. Yuqorida aytib o'tganimdek, elementlarning ikkita klassi ko'rsatiladi: elementlarni to'ldirish va satr elementlari. To'ldirishlar faqat rang bilan belgilanadi, chiziqlar rang, chiziq kengligi, chiziq uslubi, satr qopqog'i uslubi va chiziq qo'shilish uslubi bilan belgilanadi.

Foydalanuvchi qatlamlar uslubi va ko'rinishini o'zgartirganda, o'zgarishlar o'ngdagi xarita vidjetida aks etadi. Foydalanuvchi xaritaning ko'rinishini o'z xohishiga ko'ra o'zgartirib bo'lgach, xaritaning maksimal hajmini moslashtirishi va xaritani kompyuterda tasvir sifatida saqlashi mumkin. Rasmni saqlashda foydalanuvchi konfiguratsiya fayli ham saqlanadi. Bu foydalanuvchining istalgan vaqtda ma'lum bir tasvirni yaratish uchun ishlatgan konfiguratsiyasini eslab qolishi va qayta ishlatishini ta'minlaydi.

5 -qadam: Amalga oshirishning kamchiliklari + Qarori

Amalga oshirishning kamchiliklari + echimi
Amalga oshirishning kamchiliklari + echimi
Amalga oshirishning kamchiliklari + echimi
Amalga oshirishning kamchiliklari + echimi

Men birinchi marta xaritani qo'lda uslublashni boshlaganimda, bu juda zerikarli jarayon ekanligini bilib oldim. Foydalanuvchiga maksimal boshqaruvni taklif qilish, mavjud "tugmachalarning" ko'pligi tufayli juda katta bo'lishi mumkin. Biroq, oddiy echim bor, bu biroz qo'shimcha skriptni o'z ichiga oladi.

Men o'zimni qaysi qatlamlar qiziqtirayotganini aniqlashdan boshladim. Bu ko'rsatmali maqsad uchun aytaylik, meni binolar (hammasi), daryolar, magistral magistral yo'llar va sirt ko'chalar qiziqtiradi. Men konfiguratsiya misolini yaratadigan, setItemState () funktsiyasidan va belgilangan konstantalardan foydalanib, qatlam holatini mos ravishda o'zgartiradigan va ranglarimni setValue () yordamida qanday ko'rinishini xohlaganimga qarab ranglarni belgilaydigan skript yozardim. Olingan konfiguratsiya fayli saqlanadi, u configs papkasiga ko'chirilishi va foydalanuvchi tomonidan yuklanishi mumkin.

Misol skripti yuqoridagi rasmda. Ikkinchi rasm - bu yordamchi funktsiyalari nimaga o'xshashligi namunasidir va ular asosan bir xil, chunki har xil konstantalarda, men faqat bitta misolning rasmini qo'shganman.

6 -qadam: Yaxshilash uchun joylar

Yaxshilash uchun joylar
Yaxshilash uchun joylar

Men dasturiy ta'minotni amalga oshirishni o'ylab topganimdan so'ng, men energiya iste'molchilari uchun foydali bo'lgan bir qancha sohalarni aniqladim.

  1. Dinamik qatlamlarni ko'rsatish. Hozirda menda ko'rsatiladigan qatlamlarning oldindan belgilangan ro'yxati bor. Qatlamni chiziq yoki to'ldirish kerakligini aniqlashda qiyinchiliklar asoslanishning bir qismi edi. Natijada, deyarli har bir OSM faylini ochganingizda, siz ko'rsatilmaydigan qatlamlar haqida bir nechta ogohlantirishlarga duch kelasiz. Ko'pincha bu juda kam, bu muammo emas, lekin muhim qatlamlar etishmasligi aniq. Dinamik qatlamni ko'rsatish bu xavotirlarni yo'q qiladi.
  2. Dinamik qatlamni tayinlash. Bu #1 bilan qo'lma-qo'l ketadi; Agar siz dinamik qatlamni ko'rsatishni xohlasangiz, sizga dinamik qatlam tayinlanishi kerak bo'ladi (ya'ni, to'ldirish qatlamini satr qatlamiga nisbatan aniqlash). Men buni bilib olganimdek, bu maqsadga muvofiq bo'lishi mumkin edi, chunki birinchi va oxirgi tugunlari bir xil bo'lgan yo'llar yopiq yo'llar bilan to'ldiriladi va shuning uchun to'ldiriladi.
  3. Rang guruhlari. Stilize qilingan xarita ko'pincha bir xil uslubga ega bo'lgan bir necha qatlamlardan iborat bo'lib, foydalanuvchiga bir vaqtning o'zida guruhning uslubini o'zgartirishga imkon berish, foydalanuvchining qatlamlarni birma-bir tahrirlash vaqtini ancha kamaytiradi.

7 -qadam: Yakuniy fikrlar

Yakunlovchi fikrlar
Yakunlovchi fikrlar
Yakunlovchi fikrlar
Yakunlovchi fikrlar
Yakunlovchi fikrlar
Yakunlovchi fikrlar

Mening yo'riqnomamni o'qishga vaqt ajratganingiz uchun barchangizga rahmat. Bu loyiha ko'p soatlik tadqiqot, dizayn, dasturlash va disk raskadrovka ishlarining cho'qqisidir. Umid qilamanki, men o'z loyihamni qura oladigan yoki men yozganlarimga asoslanadigan ishga tushirish panelini bera oldim. Umid qilamanki, mening kamchiliklarim va maslahatlarim sizning dizayningizda e'tiborga olish kerak bo'lgan ko'p narsalarni beradi. Agar siz dasturga kamroq moyil bo'lsangiz va san'at asarlarini yaratishga moyil bo'lsangiz, izohlarda nima qilganingizni ko'rishni istardim! Imkoniyatlar cheksiz!

OpenStreetMap ishtirokchilariga alohida rahmat! Bunday loyihalarni ularning jiddiy sa'y -harakatisiz amalga oshirish mumkin emas edi.

Iltimos, izohlarda savollaringiz bo'lsa, menga xabar bering!

Xaritalar tanlovi
Xaritalar tanlovi
Xaritalar tanlovi
Xaritalar tanlovi

"Xaritalar" tanlovida ikkinchi o'rinni egalladi

Tavsiya: