Cuprins:

Cum să creați hărți stilizate personalizate utilizând OpenStreetMap: 7 pași (cu imagini)
Cum să creați hărți stilizate personalizate utilizând OpenStreetMap: 7 pași (cu imagini)

Video: Cum să creați hărți stilizate personalizate utilizând OpenStreetMap: 7 pași (cu imagini)

Video: Cum să creați hărți stilizate personalizate utilizând OpenStreetMap: 7 pași (cu imagini)
Video: CREAZA UN AVATAR ANIMAT IN CATEVA MINUTE CU AJUTORUL INTELIGENTEI ARTIFICIALE. TUTORIAL COMPLET 2024, Noiembrie
Anonim
Cum să creați hărți stilizate personalizate utilizând OpenStreetMap
Cum să creați hărți stilizate personalizate utilizând OpenStreetMap

În acest instructable, voi descrie un proces prin care puteți genera propriile hărți stilizate personalizate. O hartă stilizată este o hartă în care utilizatorul poate specifica ce straturi de date sunt vizualizate, precum și defini stilul cu care este vizualizat fiecare strat. Mai întâi voi descrie procesul prin care puteți scrie software pentru stilizarea hărților, urmat de un exemplu de software Python pe care l-am scris pentru a efectua această sarcină.

Următorul videoclip evidențiază modul în care personal generez hărți stilizate, dar citesc în continuare pentru detalii intime. Sunt foarte încântat să văd ce creează comunitatea!

Care este motivația mea din spatele acestui proiect?

Sincer vorbind, am început acest proiect pentru că m-am gândit că ar fi distractiv să fac. Această idee mi-a zguduit în minte în ultimul an și, în sfârșit, mi-am luat timpul necesar pentru ao aduce la bun sfârșit. După o zi de prototipuri cu câteva scripturi de bază, am reușit să generez rezultate extrem de promițătoare - atât de promițătoare, încât știam că trebuie să-mi formalizez scripturile astfel încât alții să poată crea cu ușurință creațiile lor.

Motivația mea în a scrie acest instructable se datorează faptului că am găsit informații foarte minime despre cum să vă creați propriile hărți stilizate de la zero. Sper să împărtășesc comunității ceea ce am învățat.

Resurse / Link-uri:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Depozit Github

Provizii

  • O distribuție Python (am folosit Anaconda și Python 3.6)
  • PyQt5 (pentru dependențele GUI)

Pasul 1: Definirea procesului I: Descărcarea fișierului OSM

Definirea procesului I: descărcarea fișierului OSM
Definirea procesului I: descărcarea fișierului OSM

Când am început acest proiect, cea mai evidentă întrebare a fost „de unde pot obține date de pe hartă”. Bineînțeles, așa cum vă așteptați, m-am gândit imediat la Google Maps. După cercetări semnificative, am descoperit că Google chiar nu vrea ca oamenii să se joace cu datele lor, în sens creativ sau altfel. De fapt, ele interzic în mod explicit web-scraping din Google Maps.

Din fericire, disperarea mea a fost de scurtă durată la descoperirea OpenStreetMap (OSM). OSM este un proiect de colaborare care implică date din întreaga lume care contribuie. OSM permite în mod explicit utilizarea deschisă a datelor lor în numele software-ului Open Source. Ca atare, vizitarea paginii web OSM începe locul în care călătoria de stilizare a hărții.

După ce ați ajuns pe site-ul OSM, faceți clic pe fila „Export” pentru a afișa instrumentele de export al hărții. Acum, măriți pentru a vizualiza regiunea cu care sunteți interesat în colectarea datelor de pe hartă. Selectați linkul „Selectați manual o zonă diferită”, care va afișa o casetă pe ecran. Formați și plasați această casetă deasupra regiunii de interes. Odată satisfăcut, faceți clic pe butonul „Export” pentru a descărca fișierul de date OSM.

Notă # 1: Dacă regiunea selectată conține prea multe date, veți primi o eroare că ați selectat prea multe noduri. Dacă vi se întâmplă acest lucru, faceți clic pe butonul „Overpass API” pentru a descărca fișierul mai mare.

Notă # 2: Dacă fișierul descărcat OSM este mai mare de 30 MB, programul Python pe care l-am scris va încetini vizibil. Dacă sunteți hotărât să utilizați o regiune extinsă, luați în considerare scrierea unui script pentru a arunca date inutile pe care nu intenționați să le desenați.

Pasul 2: Definirea procesului II: Înțelegerea datelor

Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor
Definirea procesului II: Înțelegerea datelor

"Am datele … acum ce?"

Începeți prin deschiderea fișierului descărcat OSM în software-ul dvs. preferat de editare a textului. Mai întâi veți observa că acesta este un fișier XML, ceea ce este minunat! XML este suficient de ușor de analizat. Începutul fișierului dvs. ar trebui să arate aproape identic cu prima imagine a acestui pas - vor fi listate câteva metadate de bază și limite geografice.

Pe măsură ce derulați fișierul, veți observa trei elemente de date utilizate pe tot parcursul:

  1. Noduri
  2. Moduri
  3. Relaţii

Cel mai elementar element de date, un nod are pur și simplu un identificator unic, latitudine și longitudine asociate cu acesta. Desigur, există metadate suplimentare, dar le putem arunca în siguranță.

Căile sunt colecții de noduri. Un mod poate fi redat ca o formă închisă sau ca o linie deschisă. Modalitățile constau dintr-o colecție de noduri identificate prin identificatorul lor unic. Acestea sunt etichetate cu chei care definesc grupul de date din care aparțin. De exemplu, modul ilustrat în a treia imagine de mai sus aparține grupului de date „loc” și subgrupului său, „insulă”. Cu alte cuvinte, acest mod special aparține stratului „insulă” de sub grupul „loc”. Modurile au, de asemenea, identificatori unici.

În cele din urmă, relațiile sunt colecții de căi. O relație poate reprezenta o formă complexă cu găuri sau cu regiuni multiple. Relațiile vor avea, de asemenea, un identificator unic și vor fi etichetate similar modurilor.

Puteți citi mai multe despre aceste elemente de date din wiki OSM:

  • Noduri
  • Moduri
  • Relaţii

Pasul 3: Definirea procesului III: Digerarea datelor

Definirea procesului III: Digerarea datelor
Definirea procesului III: Digerarea datelor

Acum ar trebui să aveți cel puțin o înțelegere superficială a elementelor de date care alcătuiesc un fișier OSM. În acest moment, suntem interesați să citim datele OSM folosind limba dorită. În timp ce acest pas este centrat pe Python, dacă nu doriți să utilizați Python, ar trebui să citiți în continuare această parte deoarece conține câteva sfaturi și trucuri.

Pachetul XML este inclus în mod implicit în majoritatea distribuțiilor Python standard. Vom folosi acest pachet pentru a analiza foarte ușor fișierul OSM așa cum se arată în prima imagine. Într-o singură buclă for, puteți procesa tratarea datelor OSM pentru fiecare element de date particular.

Pe linia finală a imaginii, veți observa că verific eticheta „limite”. Acest pas este de o importanță vitală în traducerea valorilor de latitudine și longitudine în pixeli pe ecran. Vă recomand cu drag să rulați această conversie în momentul încărcării fișierului OSM, deoarece conversia în masă a datelor este intensă în proces.

Apropo de conversia latitudinilor și longitudinilor în coordonate de ecran, iată un link către funcția de calcul pe care am scris-o. Probabil că veți observa ceva puțin ciudat în conversia latitudinii în coordonatele ecranului. Există un pas suplimentar implicat în comparație cu longitudinea! După cum se dovedește, datele OSM sunt modelate folosind metoda de proiecție Pseudo-Mercator. Din fericire, OSM are aici o documentație fantastică despre acest subiect și oferă funcții de conversie a latitudinii pentru un număr semnificativ de limbi. Minunat!

Notă: În codul meu, coordonatele ecranului (0, 0) sunt colțul din stânga sus al ecranului.

Pasul 4: Implementarea Python Map Stylizer

Implementare Python Map Stylizer
Implementare Python Map Stylizer
Implementare Python Map Stylizer
Implementare Python Map Stylizer
Implementare Python Map Stylizer
Implementare Python Map Stylizer

Până în acest moment, am discutat despre fișierul de date OSM - ce este, cum să-l citesc și ce să fac cu el. Acum voi discuta despre software-ul pe care l-am scris pentru a aborda vizualizarea stilistică a hărților (repo GitHub furnizat în introducere).

Implementarea mea specifică se concentrează pe controlul de către utilizator a conductei de redare. Mai exact, permit utilizatorului să selecteze straturile pe care le doresc vizibile și cum doresc să fie vizualizat stratul respectiv. După cum am menționat pe scurt mai devreme, există două clase de elemente redate: elemente de completare și elemente rând. Completările sunt definite numai printr-o culoare, în timp ce liniile sunt definite prin culoare, lățimea liniei, stilul liniei, stilul capacului liniei și stilul de îmbinare a liniei.

Pe măsură ce utilizatorul aduce modificări stilurilor de strat și vizibilității, modificările se reflectă în widgetul de hartă din dreapta. Odată ce un utilizator a modificat aspectul hărții pentru satisfacția sa, el poate ajusta dimensiunea maximă a hărții și poate salva harta ca imagine pe computerul său. La salvarea unei imagini, va fi salvat și un fișier de configurare a utilizatorului. Acest lucru asigură un utilizator că poate reaminti și reutiliza configurația pe care a folosit-o pentru a genera o anumită imagine în orice moment.

Pasul 5: Implementare drawback + soluție

Implementare drawback + soluție
Implementare drawback + soluție
Implementare drawback + soluție
Implementare drawback + soluție

Când am început să stilizez manual o hartă, am aflat că acesta a fost un proces destul de plictisitor. Oferirea unui control maxim utilizatorului poate fi pur și simplu copleșitoare datorită numărului mare de „butoane” disponibile. Cu toate acestea, există o soluție simplă, care implică un pic de scriptare suplimentară.

Am început prin identificarea straturilor care mă interesează în mod deosebit. În scopul acestui instructiv, să presupunem că mă interesează cel mai mult clădirile (toate), râurile, autostrăzile principale și străzile de suprafață. Aș scrie un script în care creez o instanță de configurare, comut stările stratului folosind funcția setItemState () și constantele definite și aș seta culorile pe baza modului în care aș dori să apar straturile mele folosind setValue (). Fișierul de configurare rezultat care se salvează poate fi copiat în folderul configs și încărcat de utilizator.

Un exemplu de script este în imaginea de mai sus. A doua imagine este un eșantion de cum ar arăta funcțiile de asistență și, din moment ce sunt practic identice, doar cu constante diferite, am inclus doar o imagine a unui singur exemplu.

Pasul 6: Domenii de îmbunătățire

Domenii de îmbunătățire
Domenii de îmbunătățire

După ce am reflectat asupra implementării software-ului meu, am identificat mai multe domenii care ar fi îmbunătățiri utile pentru utilizatorii cu putere.

  1. Redare dinamică a stratului. În prezent, am o listă predefinită de straturi care vor fi redate, gata. O parte din justificare a fost dificultatea de a determina dacă un strat ar trebui să fie o linie sau o umplutură. Ca urmare, cu aproape fiecare fișier OSM pe care îl deschideți, veți fi întâmpinat cu o serie de avertismente despre straturi care nu vor fi redate. De multe ori acestea sunt atât de minime, încât nu este o problemă, dar este necesar să lipsească straturile critice. Redarea dinamică a stratului ar elimina aceste preocupări.
  2. Alocarea stratului dinamic. Acest lucru merge mână în mână cu numărul 1; dacă doriți redarea dinamică a stratului, aveți nevoie de atribuire dinamică a stratului (de exemplu, identificarea unui strat de umplere față de un strat de linie). Acest lucru ar putea fi realizat în mod rezonabil, după cum am aflat, deoarece căile al căror prim și ultim nod sunt aceleași vor fi căi închise și, prin urmare, completate.
  3. Grupuri de culori. O hartă stilizată are adesea mai multe straturi care au același stil, iar permiterea utilizatorului să modifice stilul unui grup în același timp ar reduce considerabil timpul petrecut de utilizator modificând straturile unul câte unul.

Pasul 7: Închiderea gândurilor

Gânduri de închidere
Gânduri de închidere
Gânduri de închidere
Gânduri de închidere
Gânduri de închidere
Gânduri de închidere

Vă mulțumesc tuturor pentru că ați avut timp să citiți instructabilul meu. Acest proiect reprezintă punctul culminant al multor ore de cercetare, proiectare, programare și depanare. Sper că am reușit să ofer o platformă de lansare din care să vă puteți construi propriul proiect sau să construiți pe ceea ce am scris deja. De asemenea, sper ca neajunsurile și sfaturile mele să ofere o mulțime de puncte de luat în considerare în proiectarea dvs. Dacă sunteți mai puțin înclinați spre programare și mai înclinați să creați opere de artă, mi-ar plăcea să văd ce faceți în comentarii! Posibilitățile sunt nelimitate!

Mulțumiri speciale colaboratorilor OpenStreetMap! Proiecte de acest gen nu ar fi posibile fără eforturile lor semnificative.

Vă rog să-mi spuneți dacă aveți întrebări în comentarii!

Hărți provocare
Hărți provocare
Hărți provocare
Hărți provocare

Locul doi în Challenge Maps

Recomandat: