Mappa stazioni meteo Weather Underground

Schermata 2015-12-08 alle 16.22.00

Il sito Weather UnderGround offre delle API molto ben documentate

Ho preso l’elenco delle webcam utilizzando il comando /q/Italia.json (ho usato google drive con uno script che importa json per avere sempre il file aggiornato) e quindi tramite una funzione geocoding di nominatim ho trovato le coordinate di ogni città d’italia : https://goo.gl/KrT6b8

La funzione di geocoding (mutuata da un tips di Andrea Borruso) è:

=IF(E2=“”,“”,JOIN(“,”, ImportXML(CONCATENATE(“http://nominatim.openstreetmap.org/search?format=xml&q=”,E2), “//searchresults/place[1]/@lat | //searchresults/place[1]/@lon”)))

Cioè se la colonna E2 è non vuota (è la colonna con la città), allora importa i due valori lat e lon presi da file XML tramite una sintassi xpath. Infatti se analizzate ad esmepio il link http://nominatim.openstreetmap.org/search?format=xml&q=Lecce avete tanti nodi. quello che ci interessa il il searchresults –>place –>lat come primo risultato e idem lon. Poi questi valori li unisco da carattere , (ecco il Join della formula).

Schermata 2015-12-08 alle 16.32.50

Poi uso =SPLIT(L2,“,”) per dividere la cella in due celle con lat e lon. ovvio che avrei potuto direttamente mettere la funzione xpath per lon in una cell e lat nell’altra. Ma cosi facendo su 200 righe faccio 200 richieste a nominatim, mentre in due celle sarebbero stati 400. 

Ho corretto le colonne Results City e Results Name , rinominandole in “name” e “City” e inserendo %20 al posto degli spazi. Questo perchè cosi normalizzo i links di caricamento.

Apro Umap.openstreetmap.org e inserisco nel layer-> dati remoti il link CSV : https://goo.gl/unjRQ6

Ho messo un’icona presa da wikipedia.  Per personalizzare il popup ho usato uno script php che ho creato. Innanzitutto in umap ho messo queste impostazioni facendo eseguire nel side panel:

 

Schermata 2015-12-08 alle 16.15.43

 

cioè:

 

# {name}
{{{http://www.piersoft.it/osm2gtfs/stazionimeteo.php?city={City}|150}}}
{{{http://api.wunderground.com/api/b3f95b06a21229ff/animatedradar/animatedsatellite/q/IT/{City}.gif?num=6&delay=50&interval=10|200}}}

Cioè passo il valore della colonna City ad un mio file php che restituisce i valori presi dal json corrispondente alla città cliccata e poi sotto faccio apparire una Gif animata che passa wunderground anch’essa che segue il nome della città.

Lo script stazionimeteo.php è il seguente:

$api="LA TUA API RICHIESTA A WUNDERGR.";
$city=$_GET["city"];
$city=str_replace(" ","%20",$city);
$json_string = file_get_contents("http://api.wunderground.com/api/".$api."/lang:IT/conditions/q/".$city.".json");
$parsed_json = json_decode($json_string);
$location = $parsed_json->{'location'}->{'city'};
$temp_c = "Tempo: ".$parsed_json->{'current_observation'}->{'weather'};
$temp_c .= "{'current_observation'}->{'icon_url'}."\" \>";
$temp_c .= "Temperatura: ".$parsed_json->{'current_observation'}->{'temp_c'}."°C";
$temp_c .= "Vento direzione: ".$parsed_json->{'current_observation'}->{'wind_dir'};
$temp_c .= "Vento velocità: ".$parsed_json->{'current_observation'}->{'wind_mph'}."mph";
$temp_c .= "Umidità relativa: ".$parsed_json->{'current_observation'}->{'relative_humidity'};
echo $temp_c;

 

in pratica passando nell’url stazionimeteo.php?city=Lecce viene caricato questo url:

http://api.wunderground.com/api/”.$api.”/lang:IT/conditions/q/Lecce.json dove $api è il codice che ci passa wunderground dopo che ci siamo registrati sul sito come sviluppatori.

Ho usato la colonna “name” al posto di Results Name perchè cosi Umap può filtrare on the fly la stazioni:

il risultato è questo:

Schermata 2015-12-08 alle 16.25.31

Visualizza schermo intero

alla prossima

Potrebbero interessarti anche...

2 Risposte

  1. gipi ha detto:

    Salve. Premetto che non sono esperto informatico. Quotidianamente scarico un bollettino con le WeatherReport del giorno dopo, personalizzato con il nome dell’azienda turistica in cui lavoro.
    Mi chiedo i vantaggi di un’applicazione come la tua rispetto ad altre… al di là del valore sociale degli open data

Rispondi