Meteorologija - Prikazivanje trenutnih vremenskih uslova i kratkoročne vremenske prognoze


" Od svog nastanka, ljudsko biće prilagođava svoj život vremenskim prilikama ili 'neprilikama'.

Verovatno još od tada postoji želja, da se vremenske pojave stave pod kontrolu ili predvide.

Predpostavljam da je iz jedne takve želje u toku razvoja ove naše civilizacije i proistekla ideja

o stvaranju nauke danas poznate pod imenom Meteorologija, a kasnije i razvoju raznih tehnologija

za proučavanje, predviđanje, a možda i kontrolu vremenskih događaja. Bez obzira na dostignut razvoj

svih naučnih disciplina i tehnologija koje se koriste za proučavanje meteoroloških događaja,

još uvek nije napravljena stoprocentno tačna vremenska prognoza, najava meteorološkog događaja.

U skladu stime svaki oblik najave metereoloških događaja, prihvatam kao zabavu za široke narodne mase. "

Autor Perić Željko



Ukoliko vas interesuje naučna disciplina zvana Meteorologija, i sve ono što ona obuhvata,proučite tekstove na sledećim adresama.

Meteo Planeta ( http://meteoplaneta.rs/meteorologija )

Wikipedija Slobodna Enciklopedija ( http://sh.wikipedia.org/wiki/Meteorologija )

RHMZ Srbije ( http://www.hidmet.gov.rs/ciril/meteorologija/index.php )


Program 'Current Weather&Forecast Observations'

Namenjen je za preuzimanje i prikazivanje određenih metereoloških podataka, s udaljenog servera. Radi se o kratkom opisu trenutnih vremenskih uslova i izmerenoj temperaturi za lokaciju koja je određena svojom geografskom širinom i dužinom, kao i podaci o vremenskoj prognozi za narednih pet dana, kratak opis predviđenih vremenskih prilika i predviđena minimalna i maksimalna dnevna temperatura. Program je napravljen tako da daje podatke samo za jednu lokaciju, grad Smederevo u Republici Srbiji. Za nešto više od toga moraćete sami da se potrudite svojim programerskim umećem.

Podaci se nalaze na udaljenom Internet serveru, kome se pristupa hiper tekst transfer protokolom ( HTTP ). Pomoću ovog protokola, uspostavlja se veza sa serverom i postavlja se zahtev za određenim podacima. Adekvatna aplikacija na serveru, obrađuje zahtev i vraća željene podatke u okviru dokumenta, koji je standardnog, opšteprihvaćenog, formata ( CSV, XML, JSON ). Dobijene podatke program obrađuje i prikazuje u formatu koji je razumljiv korisniku.

Kako da napravite ovakav program ?

Prvo je neophodno da odaberemo kompaniju na Internetu koja nam omogućava pristup serveru, s relevantnim metereološkim podacima. Između mnogih, ovde su predstavljene samo četiri, koje se razlikuju po propisanim uslovima pristupa podacima, kao i kvalitetu samih podataka. Pod kvalitetom podataka se podrazumeva količina raznorodnih meteoroloških podataka, učestalost očitavanja i pristupa podacima, pokrivenost teritorije naše planete mrežom automatskih mernih stanica za prikupljanje podataka. Sve četiri kompanije omogućavaju besplatan pristup podacima, uz ograničenje broja upita na dnevnom nivou i korišćenje aplikacije za formiranje HTTP upita, sa zahtevom za određenim podacima. Kod pojedinih je obavezno otvaranje naloga i dobijanje ličnog korisničkog ključa, šifre za pristup podacima. HTTP upit sačinjavaju dva dela, adresa servera i skup parametara koji predstavljaju zahtev aplikaciji na serveru za određenim podacima. Adresa servera je jasna sama po sebi. Skup parametara koje aplikacija na serveru može da obradi, prepozna, je različit, od aplikacije do aplikacije i neophodno je proučiti uputstvo na navedenim adresama. Popularni termin za HTTP upit je 'server endpoint' ili 'endpoint'. Pojedine aplikacije omogućavaju formiranje HTTP upita jednostavnim popunjavanjem upitnika, u kome se čekiraju oni podaci koje hoćete da preuzmete (trenutna osmatranja, prognoze za određeni broj dana itd.) primer je World Weather Online, dok je kod drugih neophodno poznavati sintaksu jezika aplikacije, koji je uglavnom vrlo sličan SQL-u, kao recimo na YAHOO! Weather serveru. Učestalost očitavanja podataka sa automatskih meteo stanica i formiranja novih izveštaja, vremenskih prognoza, varira od servera do servera i u proseku je na svaka dva do četiri sata. Ovo je slučaj kada podatke hoćete da preuzimate besplatno. Ukoliko želite veći kvalitet usluge moraćete i da platite. Pogledajte cene usluga na dole navedenim sajtovima. Tačnost očitanih podataka za željenu lokaciju na planeti, zavisi od blizine automatske meteo stanice baš toj lokaciji za koju želimo podatke. U pojedinim, dole navedenim primerima, za lokaciju grada Smedereva, podaci pristižu sa Surčinskog aerodroma koji je udaljen skoro pedeset kilometara, pa se može reći da su podaci potpuno netačni, posebno kada je trenutna temperatura u pitanju, pravac i brzina vetra itd. Autora ovog teksta je interesovala prosečna procentualna tačnost najave određenih vremenskih događaja za kraći vremenski period. U pitanju je najava temperaturnog opsega i kraći opis vremenskih događaja, za naredna četiri dana. Rezultate praćenja vremenske prognoze možete videti u priloženim grafikonima, uz napomenu da je vremenski period kontrole tačnosti najavljenih meteoroloških događaja samo mesec dana.

YAHOO! Weather

Napomena: ovaj servis je promenio uslove korišćenja i ne radi od 03.01.2019 , više informacija na https://developer.yahoo.com/weather/

- Besplatan pristup podacima uz dnevni limit od 2000 upita dnevno

- Šifra za pristup podacima nije neophodna

- Link ka aplikaciji za formiranje HTML upita, sa zahtevom za određenim podacima

( https://developer.yahoo.com/weather )

Primer HTTP upita za trenutnim meteo podacima za grad Smederevo u metričkom sistemu, u formatu JSON

- Adresa servera http://query.yahooapis.com/

- parametri v1/public/yqlq=select%20item.yweather:condition%20from%20weather.forecast %20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1) %20where%20text%3D%22Smederevo%2C%20RS%22)%20and%20 u%20%3D%22c%22&format=json&env=store%3A%2F%2 Fdatatables.org%2Falltableswithkeys

Isprobajte HTTP upit

Wheather Underground

Napomena: ovaj servis je započeo promene uslove korišćenja u toku 2019 godine , više informacija na End of Service for the Weather Underground API

- Besplatan pristup podacima uz dnevni limit od 500 upita dnevno

- Šifra za pristup podacima je obavezna

- Link za otvaranje naloga i dobijanje korisničke šifre ili ključa

( https://www.wunderground.com/weather/api )

- Link ka aplikaciji za formiranje HTML upita, sa zahtevom za određenim podacima ( http://www.wunderground.com/weather/api/d/docs?d=data/index )

Primer HTTP upita za trenutnim meteo podacima i desetodnevnom vremenskom prognozom na srpskom jeziku sa meteo stanice koja se nalazi na lokaciji

long = 44.662778 i lat = 20.93 koja odgovara gradu Smederevu, ili je njoj najbliža, u formatu JSON

- Adresa servera http://api.wunderground.com/

- parametri

api/ Ključ_Servera + /conditions/forecast10day/lang:SR /q/44.662778,20.93.json

World weather Online

Napomena: WWO je ukinuo svoju besplatnu aplikaciju 2017.

- 60-to dnevni besplatan probni pristup podacima uz limit od 500 upita dnevno

- Šifra za pristup podacima je obavezna

- Link za otvaranje naloga i dobijanje korisničke šifre ili ključa

( http://developer.worldweatheronline.com/api/docs/ )

- Link ka aplikaciji za formiranje HTML upita, sa zahtevom za određenim podacima

( http://developer.worldweatheronline.com/premium-api-explorer.aspx )

Primer HTTP upita za trenutnim meteo podacima i petodnevnom vremenskom prognozom na srpskom jeziku za grad Smederevo, u formatu JSON

- Adresa servera http://api.worldweatheronline.com/

- Parametri

premium/v1/weather.ashx?=Smederevo&format=json&num_of_days=5&fx=yes& cc=yes&mca=no&fx24=yes&includelocation=yes&show_comments=yes& tp=24&showlocaltime=yes&lang=sr&key=Access_Key

HAM Weather ( sada AERIS weather )

- 60-to dnevni besplatan probni pristup podacima

- Šifra za pristup podacima je obavezna

- Link za otvaranje naloga i dobijanje korisničke šifre ili ključa (Client ID i Client Secret) http://www.aerisweather.com/signup/

- Link ka aplikaciji za formiranje HTML upita, sa zahtevom za određenim podacima http://www.aerisweather.com/support/docs/api/reference/endpoints/forecasts/

Primer HTTP upita za trenutnim meteo podacima sa meteo stanice koja se nalazi na lokaciji long = 44.662778, lat = 20.93 koja odgovara gradu Smederevu, ili je njoj najbliža, u formatu JSON, vreme poslednjeg očitavanja podataka, trenutna temperatura, kratak opis vremenskih prilika, naziv sličice vremena koja predstavlja slikoviti opis vremenskih uslova

- Adresa servera http://api.aerisapi.com/

- parametri

observations/closest?p=44.66,20.93fields=ob.dateTimeISO, ob.tempC,ob.weatherShort, ob.icon&client_id= + Ključ_ID + &client_secret= + Ključ_Tajna

Grafikon prosečne procentualne tačnosti najave meteoroloških događaja za vremenski period od četiri dana

* Period kontrole tačnosti četvorodnevnih vremenskih prognoza gore navedenih kompanija je samo mesec dana.

Kada ste se opredelili za neku od kompanija, i formirali HTTP upit, 'endpoint' , sa zahtevom za određenim podacima, pristupate pisanju programskog koda. Ovde je prikazan primer u programskom jeziku C# 4.0, uz neophodan .Net framework 4.0, a odnosi se na konekciju i preuzimanje podataka sa YAHOO! Weather servera. Osnovu za pristup udaljenom serveru pomoću HTTP upita čine klase HttpWebRequest za formiranje upita i HttpWebResponse za konekciju i prihvatanje odgovora sa servera, Namespace System.Net.

void Yahoo_Current_Weather()

{

string Adresa_Yahoo_Servera = "http://query.yahooapis.com/";

string YQL_Upit = "v1/public/yql?q=select%20item.yweather:condition%20" +

"from%20weather.forecast%20where%20woeid%20in%20" +

"(select%20woeid%20from%20geo.places(1)%20where%20" +

"text%3D%22Smederevo%2C%20RS%22)%20and%20u%20%3D%22c%22" +

"&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";

string Dokument = string.Empty;

// Formira HTTP upit

HttpWebRequest upit = (HttpWebRequest) WebRequest.Create(Adresa_Yahoo_Servera + YQL_Upit);

// Konektuje se sa serverom i zahteva podatke

// Deklaracija promenljive tipa HttpWebResponse

// Uvek mora biti izvedena iz HttpWebRequest.GetResponse() instance

HttpWebResponse odgovor = (HttpWebResponse) upit.GetResponse();

// Formira promenljivu tipa Stream i

// Dobijene podatke prebacuje iz instance promenljive 'odgovor' koja je tipa Stream

Stream podaci = odgovor.GetResponseStream();

// Formira promenljivu za pristup tekstualnim podacima

StreamReader čitač = new StreamReader(podaci,Encoding.UTF8);

// Pročita sve tekstualne podatke i prebaci ih u promenljivu 'Dokument'

Dokument = čitač.ReadToEnd();

// Snima podatke u tekstualni fajl

File.WriteAllText("YahooCurrentWeather.txt",Dokument,Encoding.UTF8);

// Zatvara i oslobađa resurse koj zauzima promenljiva 'čitač'

čitač.Close ();

čitač.Dispose();

// Zatvara i oslobađa resurse koj zauzima promenljiva 'podaci'

podaci.Close ();

podaci.Dispose();

// Zatvara i oslobađa resurse koj zauzima promenljiva 'odgovor'

// Oslobađa vezu ka Internetu za ponovnu upotrebu

odgovor.Close ();

}

Kada se metoda ili podprogram 'void Yahoo_Current_Weather()' izvrši svi podaci koje je YAHOO! Weather server prosledio vašem kompjuteru, prvo su smešteni u promenljivu 'Dokument' tipa string, a zatim su i snimljeni u datoteku "YahooCurrentWeather.txt" u UTF8 Formatu koji omogućava rad i sa ćiriličnim slovima. Ukoliko ne želite, snimanje podataka nije neophodno. Ovo bi ujedno bio šablon za konekciju i ostvarivanje HTTP zahteva na udaljenom serveru. Ono što nije urađeno jeste Try/Cach konstrukcija sa ciljem da se spreči nasilni prekid izvršenja programa ukoliko veza sa serverom nije u redu ili dođe do redirekcije sa zahtevane adrese servera na neku drugu, ili aplikacija na serveru ne može da obradi zahtev za podacima...

Sada treba pristupiti podacima koji izgledaju ovako, kada je JSON format dokumenta u pitanju:

{

"query":{

"count":1,

"created":"2014-11-22T19:33:24Z",

"lang":"en-US",

"results":{

"channel":{

"item":{

"condition":{

"code":"27",

"date":"Sat, 22 Nov 2014 7:00 pm CET",

"temp":"6",

"text":"Mostly Cloudy"

}

}

}

}

}

}

Na slici se vidi struktura teksta unutar tekstualnog dokumenta s nazivima promenljivih i njihovim vrednostima. Ovaj raspored je napravio autor radi bolje preglednosti. Kada bi se podaci posmatrali onako, kako su smešteni unutar promenljive Dokument, to bi izgledalo ovako, svi podaci su u jednoj liniji :

{"query":{"count":1,"created":"2014-11-22T21:20:51Z","lang":"en-US","results":{"channel":{"item":{"condition":{"code":"27","date":"Sat, 22 Nov 2014 7:00 pm CET","temp":"6","text":"Mostly Cloudy"}}}}}}


Datum i vreme kreiranja dokumenta string created = "2014-11-22T19:33:24Z"

Šifra slike koja predstavlja opis string code = "27"

Datum i vreme očitavanja podataka string date = "Sat, 22 Nov 2014 7:00 pm CET"

Trenutna temperatura string temp = "6"

Kratak opis vremenskih prilika string text = "Mostly Cloudy"

Pristup vrednostima promenljivih može da se uradi deserializacijom podataka u dokumentu, što se odrađuje na način prikazan na sledećoj adresi Microsoft MSDN ( http://msdn.microsoft.com/en-us/library/bb412179%28v=vs.110%29.aspx ), ili da se do neophodne vrednosti dođe prostom pretragom po ključnoj reči, nazivu promenljive i direktnim očitavanjem vrednosti što je i urađeno u programu, pomoću funkcije 'Rezultat_Pretrage Pronađi_Tekst(string Dokument, string Tekst, int Pozicija)' koja vraća vrednost tipa 'Rezultat_Pretrage' koja ima dve instance, vrednost i lokaciju.

class Rezultat_Pretrage

{

public string vrednost = string.Empty;

public int pozicija = 0;

}

Rezultat_Pretrage Pronađi_Tekst(string Dokument, string Tekst, int Pozicija)

{

Rezultat_Pretrage rezultat = new Rezultat_Pretrage();

int dužina_dokumenta = 0;

int dužina_teksta = 0;

int slovna_pozicija = 0;

dužina_dokumenta = Dokument.Length;

dužina_teksta = Tekst.Length;

slovna_pozicija = Pozicija;

while(slovna_pozicija<dužina_dokumenta-dužina_teksta)

{

if(Dokument.Substring(slovna_pozicija,dužina_teksta) == Tekst)

{

slovna_pozicija+=dužina_teksta;

break;

}

else

{

slovna_pozicija++;

}

}

while(Dokument[slovna_pozicija] != '"')

{

rezultat.vrednost += Dokument[slovna_pozicija];

slovna_pozicija++;

}

rezultat.pozicija = slovna_pozicija;

return rezultat;

}

Kada se pronađu i pročitaju vrednosti promenljivih, vrši se njihovo prikazivanje korisniku preko korisničkog interfejsa programa. Na kraju, vodite računa o 'Uslovima i Pravima' , 'Terms & Conditions' , korišćenja usluge koju vam pruža izabrana kompanija kako vam ne bi onemogućili pristup. Program koji možete preuzeti klikom na bilo koju sliku ili na link ispod, zahteva .Net framevork 4.0 ( ^ ), i kvalitetnu Internet konekciju. Sobzirom da je zabranjeno korišćenje tuđe šifre za pristup podacima, moraćete da pribavite vlastite šifre kako bi koristili program u potpunosti i pristupali podacima neometano.