Lxf126 python

Material din Linuxformat.

Python Utilizați informațiile din Flickr pentru a crea hărți cu localizare geografică

Python. Locul pe hartă

Python pentru profesioniști

Nick Veich a subliniat din nou, dar de data aceasta ideea este bună: pentru a găsi cele mai fotogenice părți din localitatea dvs. cu hărți cu geodate ...







Credeți sau nu, am o iubită. De Dumnezeu. Aceasta este o persoană reală. Numele ei este Pam, iar ea locuieste in Tampa, Florida. Anul trecut, ea a fost de a merge la Barcelona și a cerut să nu ar trebui să fie fotografiate. Dar depinde de gust, nu? Cineva vrea să trage de obicei site-uri turistice, ca toți ceilalți, și, uneori, preferă să exploreze mai puțin „blocat“ parte a orașului. Puteți cutreiera site-uri cu imagini, dar, de fapt, ai nevoie de o hartă.

O mulțime de camere și telefoane mobile cu camere sunt acum încorporate în imaginile lor geotags - indicând latitudinea și longitudinea - împreună cu adăugarea altor date Exif. Site-urile cu fotografii, cum ar fi Flickr, înregistrează aceste informații și le pun la dispoziție. Deci, nu poți crea o hartă cum ar fi "unde în orașul ăsta fac oamenii poze?"

Wow este eu

API Flickr include și alte tehnici utile cu un nume lung places.getChildrenWithPhotosPublic (). Se returnează o listă de date structurate, reprezentând descendenți ai zonei pe care le-ați specificat. În cazul orașului, sunt descendenții zonelor și / sau, în unele cazuri, coduri poștale din regiune. Fiecare dintre ele este echipat cu longitudine și latitudine a centrului terenului și numărul de fotografii publice în ea.

După ce ați obținut aceste componente, puteți vedea cum funcționează colectorul dvs. de imagini WOLEID.

Am numit metoda getChildrenWithPublicPhotos. care au returnat rezultatul. Când se testează pe site-ul Flickr, am văzut că returnează un obiect cu un singur element, locuri numite. care conține o listă de locații care corespund interogării. Pentru a obține lista în sine, dezvăluie un obiect cu metoda .getChildren și verificați din lista de mai jos, ceea ce înseamnă că vecinătatea place_type de date, tipul de 22. Motivul este că unele zone au obiecte care se suprapun - de exemplu, o zonă cu un cod poștal sau zone iar unele imagini pot fi numărate de două ori, denaturând rezultatul.

Metoda .attrib () returnează valorile numite (după cheie) din obiectele din locurile individuale și descrierea textului stocată în proprietatea .text. Printre alte valori - zona photo_count și WOEID. Dacă avem valorile punctelor cunoscute, le putem afișa pe diagrame și pot arăta zonele cele mai fotografiate, nu-i așa? Acum rămâne să găsim o modalitate de a crea grafică atractivă din datele disponibile.

Construim diagrama

Lxf126 python
OpenStreetMap este cea mai bună sursă de informații cu privire la hărți curată legal care pot fi afișate și publicate.

Dacă doriți să construiască circuite, o histogramă sau un grafic de puncte, fiecare auto-respectând Pythonistas în primul rând se referă la modul Mathplotlib. Ca și vărul său proprietar Matlab. Mathplotlib - este o bibliotecă de funcții pentru a converti datele în ceva plăcut ochiului. Din nou, acest modul Python este de obicei disponibil în distribuția dvs. De asemenea, puteți instala modulul Numpy. el adaugă în Python mai multe caracteristici convenabile și funcții pentru vizualizare a datelor, inclusiv matrici multidimensionale.







Matplotlib conține o funcție utilă numită contur. care pur și simplu ia o listă de valori ale lui x, y și z și se bazează pe suprafețele colorate ale conturului de bază din jurul punctelor cu valoarea maximă - de fapt, este o hartă a temperaturii. Dar înainte de a transfera datele, trebuie să remediați problema: funcția contourf funcționează numai cu date sub forma unei grile uniforme, iar punctele și valorile noastre sunt distribuite aleator. Soluția este de a crea o grilă de date goală și apoi de a suprapune valorile noastre pe aceasta folosind o metodă de interpolare. De aceea modulul Numpy este foarte util pentru tine.

Metoda numpy.linspace () returnează o listă plină cu un set de valori numerice dintr-un interval dat - ceea ce este ceea ce avem nevoie pentru a crea grila x-y. Apoi putem folosi funcția griddata de la Matplotlib pentru a interpola punctele noastre într-o rețea normală. Apoi codul nostru va arata astfel:

Aici ne-am ocupat de celelalte două puncte. Obținerea valorilor maxime și minime pentru x și y ne dă limitele regiunii dreptunghiulare. Putem adăuga aceste puncte (și valori zero) la matricea noastră de date pentru a ne asigura că contururile construite merg la marginea hărții. În plus, putem folosi aceste date pentru a calcula pasul rețelei noastre. Nu toate orașele sunt pătrate, așa că schimbați dimensiunea pasului în funcție de zona pe care o ocupă.

Rămâne doar să utilizați funcția de contur pentru a construi un gradient în jurul regiunilor și a le afișa (și salvați ca un fișier):

Aici am construit mai întâi o linie de contur negru ('k') de 0,5 grosime, apoi am aplicat metoda de culoare de umplere a contururilor. Parametrul cmap este unul dintre hărțile colorate predefinite Matplotlib. oferind o gamă bună de la albastru până la galben până la roșu.

Rămâne să aplicați imaginea creată pe hartă. Puteți merge la Hărți Google, dar hărțile lor, desigur, nu sunt ale dvs., ci proprietatea lor, așadar este mai bine să luați date cartografice din OpenStreetMap.

O metodă simplă de a elimina PNG-ul din locația specificată nu este disponibilă, dar o puteți descărca manual făcând clic pe fila Export pe pagina principală a hărții și introducând latitudinea și longitudinea terenului pe care doriți să îl descărcați. Selectați desenul OSM cât mai aproape posibil.

Harta imaginilor și harta de temperatură creată pot fi combinate în GIMP, Scribus sau Inkscape. În opinia mea, în Inkscape acest lucru este cel mai simplu, pentru că puteți descărca versiunea SVG a hărții de contur, setați transparența la 50% și întindeți-o peste harta stradală. Raportul de aspect nu va fi același, deoarece în harta conturului se presupune că etapa în x și y este aceeași, iar pe suprafața sferică a Pământului nu este așa, dar pentru zonele mici distorsiunile sunt minime.

Cu toate acestea, pentru a obține informații corespunzătoare realității, este necesar să întindem conturul la dimensiunea hărții.

Stai, nu e tot

Lxf126 python
Acest desen suprapus arată în mod clar locul în care oamenii fac fotografii în Bath - un bun indicator al atracțiilor.

Această abordare funcționează numai pentru un teren mare, care are suficiente date despre vecinii pentru a obține informații semnificative ca rezultat. Pentru a obține o imagine mai precisă sau pentru a desena zone cu un număr mic de vecini sau fără ele, trebuie să acționați diferit. Metoda frontală este de a încărca informații despre toate fotografiile realizate în zona dorită. Pentru un oraș mare acest lucru nu este foarte puternic, dar, de exemplu, pentru orașul Bath [stațiunea stațiunii unde se află turnurile LXF] este destul de accesibilă.

Metoda principală Flickr photos.search () oferă un mecanism de preluare a datelor numai din anumite WOEID-uri. Apoi, informațiile despre imagini sunt returnate sub forma unei liste de pagini de pagină și, la cerere, informații despre poziția geografică vor fi incluse în aceste date.

Acest script rulează prin toate paginile rezultatelor de preluare a datelor și salvează latitudinea și longitudinea într-un format CSV simplu. Putem folosi acest fișier pentru a crea o hartă mai precisă. Dar tot trebuie să generați o rețea de date; Cazul nostru se distinge prin absența axei z. Noi avem doar puncte, iar valorile din ele sunt aceleași. Prin urmare, folosind aceeași abordare ca înainte, obținem o imagine plat. Pentru a cuantifica datele, acestea ar trebui grupate.

Putem face acest lucru creând o grilă goală ca mai înainte, apoi treceți prin toate punctele și stabilim la care "pătrat" ​​noua grilă din care fac parte. Creșterea fiecărei valori individuale a matricei z în cazul unui punct care aparține unui pătrat ne va da plinătatea fiecăruia și pe baza acesteia putem construi o diagramă.

Comanda matplotlibplt.show () deschide o fereastră și oprește execuția script-ului în timp ce imaginea este afișată - sunați la sfârșitul aplicației.







Articole similare

Trimiteți-le prietenilor: