Mündəricat:

OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır: 7 addım (şəkillərlə)
OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır: 7 addım (şəkillərlə)

Video: OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır: 7 addım (şəkillərlə)

Video: OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır: 7 addım (şəkillərlə)
Video: Zero to Hero ControlNet Tutorial: Stable Diffusion Web UI Extension | Complete Feature Guide 2024, Iyul
Anonim
OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır
OpenStreetMap istifadə edərək xüsusi stilizə edilmiş xəritələr necə yaradılır

Bu təlimatda, öz xüsusi stilize edilmiş xəritələrinizi yarada biləcəyiniz bir prosesi təsvir edəcəyəm. Stilize edilmiş bir xəritə, istifadəçinin hansı məlumat qatlarının görselleştirildiğini təyin edə biləcəyi və hər bir təbəqənin görselleştirildiği üslubu təyin edə biləcəyi bir xəritədir. Əvvəlcə xəritələri üslublaşdırmaq üçün proqram yaza biləcəyiniz prosesi, sonra bu vəzifəni yerinə yetirmək üçün yazdığım Python proqramının nümunəsini izah edəcəyəm.

Aşağıdakı video, şəxsən stilize edilmiş xəritələr necə yaratdığımı vurğulayır, ancaq intim detallar üçün oxumağa davam edin. Cəmiyyətin nə yaratdığını görmək çox həyəcanlıyam!

Bu layihənin arxasında mənim motivasiyam nədir?

Açığını deyim ki, bu işin əyləncəli olacağını düşündüyüm üçün bu layihəyə başladım. Bu fikir son bir ildir beynimdə çalxalanır və nəhayət onu həyata keçirmək üçün vaxt ayırdım. Bəzi əsas ssenarilərlə bir gün prototip hazırladıqdan sonra son dərəcə perspektivli nəticələr əldə edə bildim - o qədər perspektivli ki, başqalarının asanlıqla öz əsərlərini yarada bilməsi üçün ssenarilərimi rəsmiləşdirməli olduğumu bilirdim.

Bu təlimatı yazmaqda motivasiyam, öz stilize edilmiş xəritələrinizi sıfırdan necə quracağınız haqqında çox az məlumat tapmağımdır. Öyrəndiklərimi cəmiyyətlə bölüşməyi ümid edirəm.

Resurslar/Bağlantılar:

  • OpenStreetMap
  • OpenStreetMap qanuni
  • Github Deposu

Təchizat

  • Python paylanması (Anaconda və Python 3.6 istifadə etdim)
  • PyQt5 (GUI asılılıqları üçün)

Addım 1: Prosesin Müəyyən edilməsi I: OSM Faylının Yüklənməsi

Prosesin Müəyyən edilməsi I: OSM Faylının Yüklənməsi
Prosesin Müəyyən edilməsi I: OSM Faylının Yüklənməsi

Bu layihəyə ilk başladığımda ən çox maraq doğuran sual "xəritə məlumatlarını haradan əldə edə bilərəm" idi. Təbii ki, gözlədiyiniz kimi dərhal Google Xəritələri düşündüm. Əhəmiyyətli araşdırmalardan sonra, Google -un həqiqətən yaradıcı mənada və ya başqa bir şəkildə insanların məlumatları ilə oynamasını istəmədiyini kəşf etdim. Əslində, Google Xəritələrdən veb silməyi açıq şəkildə qadağan edirlər.

Xoşbəxtlikdən, OpenStreetMap (OSM) kəşfindən sonra ümidsizliyim uzun sürmədi. OSM, dünyanın hər yerindən məlumat verən insanların iştirak etdiyi bir layihədir. OSM, açıq mənbə proqramı adı ilə məlumatlarının açıq istifadəsinə icazə verir. Beləliklə, OSM veb səhifəsini ziyarət etmək, xəritəni stilizə etmək səyahətinin başladığı yerdir.

OSM veb saytına gəldikdən sonra xəritənin ixrac alətlərini göstərmək üçün "İxrac et" sekmesini vurun. İndi xəritə məlumatlarını toplamaqla maraqlandığınız bölgəni görmək üçün yaxınlaşdırın. Ekranınızda bir qutu görünəcək "Əl ilə fərqli bir sahə seçin" bağlantısını seçin. Bu qutunu maraqlandığınız bölgəyə düzəldin və qoyun. Razı qaldıqdan sonra OSM məlumat faylınızı yükləmək üçün "İxrac et" düyməsini basın.

Qeyd #1: Seçdiyiniz bölgədə çox məlumat varsa, çox sayda qovşaq seçdiyiniz bir səhv alacaqsınız. Bu sizinlə baş verərsə, daha böyük faylınızı yükləmək üçün "Overpass API" düyməsini basın.

Qeyd #2: Yüklənmiş OSM faylınız 30MB -dən böyükdürsə, yazdığım Python proqramı nəzərəçarpacaq dərəcədə yavaşlayacaq. Böyük bir bölgədən istifadə etmək qərarına gəlsəniz, çəkməyi planlaşdırmadığınız artıq məlumatları atmaq üçün bir skript yazmağı düşünün.

Addım 2: Prosesin Müəyyən edilməsi II: Məlumatları Anlamaq

Proses II -nin müəyyən edilməsi: Məlumatları anlamaq
Proses II -nin müəyyən edilməsi: Məlumatları anlamaq
II Prosesin Müəyyən edilməsi: Məlumatların Anlanması
II Prosesin Müəyyən edilməsi: Məlumatların Anlanması
Proses II -nin müəyyən edilməsi: Məlumatları anlamaq
Proses II -nin müəyyən edilməsi: Məlumatları anlamaq
Proses II -nin müəyyən edilməsi: Məlumatları anlamaq
Proses II -nin müəyyən edilməsi: Məlumatları anlamaq

"Məlumatlarım var … indi nə var?"

Endirdiyiniz OSM faylını sevdiyiniz mətn redaktə proqramına açaraq başlayın. Əvvəlcə bunun əla bir XML faylı olduğunu görəcəksiniz. XML təhlil etmək üçün kifayət qədər asandır. Dosyanızın başlanğıcı, bu addımın ilk şəkli ilə təxminən eyni görünməlidir - bəzi əsas metadata və coğrafi sərhədlər siyahıya alınacaq.

Faylı sürüşdürərkən, istifadə olunan üç məlumat elementini görəcəksiniz:

  1. Qovşaqlar
  2. Yollar
  3. Əlaqələr

Ən əsas məlumat elementi olan bir qovşaq, bənzərsiz bir identifikatora, enliyə və boylama malikdir. Əlbəttə ki, əlavə metadata var, amma təhlükəsiz şəkildə ata bilərik.

Yollar qovşaqların toplusudur. Bir yol qapalı bir forma və ya açıq bir xətt kimi göstərilə bilər. Yollar, özünəməxsus identifikatoru ilə müəyyən edilmiş qovşaqların toplusundan ibarətdir. Mənsub olduqları məlumat qrupunu təyin edən açarlarla etiketlənir. Məsələn, yuxarıdakı üçüncü görüntüdə təsvir olunan yol "yer" məlumat qrupuna və "ada" alt qrupuna aiddir. Başqa sözlə, bu xüsusi yol "yer" qrupunun altındakı "ada" qatına aiddir. Yolların da özünəməxsus identifikatorları var.

Nəhayət, münasibətlər yollar toplusudur. Bir əlaqə, çuxurlu və ya birdən çox bölgəli kompleks bir forma təmsil edə bilər. Əlaqələrin də özünəməxsus bir identifikatoru olacaq və bənzər şəkildə etiketlənəcək.

Bu məlumat elementləri haqqında daha çox məlumatı OSM vikisindən oxuya bilərsiniz:

  • Qovşaqlar
  • Yollar
  • Əlaqələr

Addım 3: Prosesin Müəyyən edilməsi III: Məlumatların Həzm Edilməsi

Prosesin Müəyyən edilməsi III: Məlumatların Həzm Edilməsi
Prosesin Müəyyən edilməsi III: Məlumatların Həzm Edilməsi

İndi bir OSM faylını təşkil edən məlumat elementləri haqqında ən azı səthi bir anlayışa sahib olmalısınız. Bu nöqtədə OSM məlumatlarını seçdiyiniz dildən istifadə edərək oxumaqla maraqlanırıq. Bu addım Python mərkəzli olsa da, Python-dan istifadə etmək istəmirsinizsə, bir neçə ipucu və fəndlərdən ibarət olduğu üçün hələ də bu hissəni oxumalısınız.

Xml paketi standart Python paylamalarının çoxu ilə standart olaraq verilir. Bu paketi OSM faylımızı ilk şəkildə göstərildiyi kimi çox asanlıqla təhlil etmək üçün istifadə edəcəyik. Vahid döngədə, hər bir xüsusi məlumat elementi üçün OSM məlumatlarının işlənməsini emal edə bilərsiniz.

Şəklin son sətrində 'sərhədlər' etiketini yoxladığımı görəcəksiniz. Enlem və uzunluq dəyərlərinin ekrandakı piksellərə çevrilməsində bu addım çox vacibdir. Məlumatların kütləvi çevrilməsi proses intensiv olduğu üçün OSM faylını yükləyərkən bu çevrilməni işə salmağı çox tövsiyə edirəm.

Enlem və boylamların ekran koordinatlarına çevrilməsindən danışarkən, burada yazdığım hesablama funksiyasına bir keçid var. Enlemi ekran koordinatlarına çevirərkən bir az qəribə bir şey görəcəksiniz. Boylamla müqayisədə əlavə bir addım var! Göründüyü kimi, OSM məlumatları Pseudo-Mercator proyeksiya üsulu ilə modelləşdirilir. Xoşbəxtlikdən, OSM burada bu mövzu ilə bağlı fantastik sənədlərə malikdir və xeyli sayda dil üçün enlem dönüşüm funksiyalarını təmin edir. Əla!

Qeyd: Kodumda ekran koordinatı (0, 0) ekranın sol üst küncündədir.

Addım 4: Python Xəritə Stylizer Tətbiqi

Python Xəritə Stylizer Tətbiqi
Python Xəritə Stylizer Tətbiqi
Python Xəritə Stylizer Tətbiqi
Python Xəritə Stylizer Tətbiqi
Python Xəritə Stylizer Tətbiqi
Python Xəritə Stylizer Tətbiqi

Bu vaxta qədər OSM məlumat faylını - bunun nə olduğunu, necə oxunacağını və bununla nə edəcəyimi müzakirə etdim. İndi stilistik xəritə görüntüsünü həll etmək üçün yazdığım proqramı müzakirə edəcəyəm (girişdə GitHub repo verilir).

Mənim xüsusi tətbiqim, göstərmə boru kəmərinin istifadəçi nəzarətinə yönəlib. Xüsusilə, istifadəçiyə görünməsini istədiyi qatları və bu təbəqənin necə görüntülənməsini istədiyini seçməsinə icazə verirəm. Qısaca qeyd etdiyim kimi, iki sinif elementi göstərilir: doldurma elementləri və sətir elementləri. Doldurmalar yalnız rənglə, xətlər isə rəng, xətt eni, xətt üslubu, sətir qapağı tərzi və sətir birləşmə tərzi ilə müəyyən edilir.

İstifadəçi təbəqə üslublarında və görünmə qabiliyyətində dəyişikliklər edərkən dəyişikliklər sağdakı xəritə vidjetində əks olunur. İstifadəçi xəritənin görünüşünü məmnunluqla dəyişdirdikdən sonra maksimum xəritə ölçüsünü tənzimləyə və xəritəni kompüterində şəkil kimi saxlaya bilər. Şəkli saxlayarkən istifadəçi konfiqurasiya faylı da saxlanılacaq. Bu, istifadəçinin istənilən vaxt müəyyən bir görüntü yaratmaq üçün istifadə etdiyi konfiqurasiyanı geri çağırıb yenidən istifadə etməsini təmin edir.

Addım 5: Tətbiq çatışmazlığı + Həll

İcra çatışmazlığı + həlli
İcra çatışmazlığı + həlli
İcra çatışmazlığı + həlli
İcra çatışmazlığı + həlli

Xəritəni əl ilə üslublaşdırmağa başlayanda bunun olduqca yorucu bir proses olduğunu öyrəndim. İstifadəçiyə maksimum nəzarəti təklif etmək, çox sayda mövcud "düymə" səbəbiylə çox çətin ola bilər. Bununla birlikdə, bir az əlavə skript tələb edən sadə bir həll var.

Hansı təbəqələri xüsusilə maraqlandırdığımı təyin etməklə başladım. Bu təlimatlandırıcı məqsəd üçün deyək ki, məni ən çox binalar (hamısı), çaylar, əsas magistral yollar və yerüstü küçələr maraqlandırır. SetItemState () funksiyasından və müəyyən edilmiş sabitlərdən istifadə edərək, uyğun bir şəkildə Konfiqurasiya nümunəsi yaratdığım bir skript yazardım və qatlarımın setValue () istifadə edərək necə görünməsini istəyimə əsaslanaraq rənglər təyin edərdim. Yadda saxlanılan əldə edilən konfiqurasiya faylı, configs qovluğuna kopyalana və istifadəçi tərəfindən yüklənə bilər.

Bir nümunə skript yuxarıdakı şəkildədir. İkinci şəkil, köməkçi funksiyaların nəyə bənzəyəcəyinə dair bir nümunədir və əsasən hamısı eyni olduğundan, dəyişkən sabitlərlə, yalnız bir nümunənin şəklini daxil etdim.

Addım 6: Təkmilləşdirmə sahələri

Təkmilləşdirmə sahələri
Təkmilləşdirmə sahələri

Proqram tətbiqimi düşündükdən sonra, güc istifadəçiləri üçün faydalı ola biləcək bir neçə sahəni təyin etdim.

  1. Dinamik təbəqənin göstərilməsi. Hal -hazırda göstəriləcək qatların əvvəlcədən təyin edilmiş bir siyahısına sahibəm. Əsaslandırmanın bir hissəsi, bir təbəqənin bir xətt və ya bir doldurma olması lazım olduğunu təyin etməkdə çətinlik çəkdi. Nəticədə, açdığınız demək olar ki, hər bir OSM faylında, göstərilməyəcək təbəqələr haqqında bir çox xəbərdarlıq alacaqsınız. Çox vaxt bunlar o qədər minimaldır ki, bu bir problem deyil, amma kritik təbəqələrin çatışmazlığı var. Dinamik qat göstərmə bu narahatlıqları aradan qaldıracaq.
  2. Dinamik qat təyinatı. Bu #1 ilə əl-ələ gedir; dinamik qatın işlənməsini istəyirsinizsə, dinamik qat təyinatına ehtiyacınız var (yəni, bir qat qatına qarşı bir doldurma qatının müəyyən edilməsi). Öyrəndiyim kimi, bu məqsədəuyğun şəkildə edilə bilər, çünki ilk və son qovşağı eyni olan Yollar qapalı yollar olacaq və buna görə də dolacaq.
  3. Rəng Qrupları. Stilizə edilmiş bir xəritədə eyni üsluba malik bir neçə təbəqə olur və istifadəçinin eyni zamanda bir qrupun üslubunu dəyişdirməsinə imkan verməsi istifadəçinin təbəqələri tək-tək redaktə etmə müddətini xeyli azaldır.

Addım 7: Düşüncələri bağlayın

Bağlayan Fikirlər
Bağlayan Fikirlər
Bağlayan Fikirlər
Bağlayan Fikirlər
Bağlayan Fikirlər
Bağlayan Fikirlər

Təlimatımı oxumaq üçün vaxt ayırdığınız üçün hər kəsə təşəkkür edirəm. Bu layihə bir çox saatlıq tədqiqat, dizayn, proqramlaşdırma və ayıklamanın zirvəsini təmsil edir. Ümid edirəm ki, öz layihənizi qura biləcəyiniz və ya yazdıqlarım üzərində qura biləcəyiniz bir başlanğıc yastığı təmin edə bildim. Ümid edirəm ki, çatışmazlıqlarım və göstərişlərim dizaynınızda nəzərə alınacaq çoxlu məqamlar verir. Proqrama daha az meylli və sənət əsərləri yaratmağa daha çox meylli olsanız, şərhlərdə nə etdiyinizi görmək istərdim! İmkanlar sonsuzdur!

OpenStreetMap iştirakçılarına xüsusi təşəkkürlər! Bu cür layihələr əhəmiyyətli səylər olmadan mümkün olmayacaq.

Zəhmət olmasa şərhlərdə hər hansı bir sualınız varsa mənə bildirin!

Maps Challenge
Maps Challenge
Maps Challenge
Maps Challenge

Xəritələr Yarışmasında 2 -ci yeri tutdu

Tövsiyə: