FMI avoin data beta ja sen kokeilut

Aloittaja weatherc, torstai, 28.02.2013, 15:25

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

systeemi

Liikenne ja viestintäministerille pitäisi lähettää viestiä. Ilmaisesta ja avoimesta palvelusta josta veloitetaan 125€/h. Ihan että vaan tietää että tämmöistä tapahtuu.
Sääasema Nauska, Kemi

www.kemiweather.fi

weatherc

LainaaJos avointa dataa tarjotaan, käyttäjät sitä käyttää ja sille on asetettu (ainakin tietääkseni) jonkinlainen käyttölimiitti,

Siellä on limiitit datan käytölle olemassa ja ihan ymmärrettävästä syystä, YR:llä oli aiaksemmin ongelmia siinä että eräät Appsit pommittivat XML-hakuja kun päivittelivät paikannusta alvariinsa. 20K kyselyä/vrk tai 600 kyselyä/5 min. Meikäläisellä menee tyyliin 100 kyselyä tunnissa (tutkakuvat jotka ovat saatavilla vain per yksittäinen tutka kasvattaa tuota aika lailla).

Lainaa
Jos avointa dataa tarjotaan, käyttäjät sitä käyttää ja sille on asetettu (ainakin tietääkseni) jonkinlainen käyttölimiitti, ei datan käytön laajuudella pitäisi olla mitään merkitystä. Itselleni jäi sellainen tunne tuosta ainakin, että jos heidän järjestelmä bugaa niin ettei saatavilla olevaa, pyydettyä spesifistä dataa saa ulos, sellaisen tilanteen korjaaminen maksaa 120€/h ilmoituksen tehneelle käyttäjälle. Joku tuossa yhtälössä ei vain toimi.

Totta. Tuo juuri muakin ihmetytti. Olisin ymmärtänyt asian edes etäisesti siinä vaiheessa jos olisin kysellyt jotain todella nörttimäistä heiltä mutta tässä kohtaa sitä ei kyllä löydy tippaakaan koska viestini oli lähinnä virheen ilmoitus koska heitin serveri ei saanut ulos haluttua dataa vaikka kuinka pitäisi.

Lainaa
Liikenne ja viestintäministerille pitäisi lähettää viestiä. Ilmaisesta ja avoimesta palvelusta josta veloitetaan 125€/h. Ihan että vaan tietää että tämmöistä tapahtuu.

Tuon voisi muuten tehdä :)

weatherc

Kirjelmä lvm:än suuntaan lähti sunnuntaina. Sieltä tosin ei vastausta ole herunnut.
Mutta, FMI:n kaavakkeeseen tuli tänään jatkomailia, "oli jäänyt huomaamatta" tuo kysymys koskien vanhempia tutkakuvia...Anna mun epäillä edes hitusen...

Joka tapauksesa, tärkein on kuitenkin se itse vastaus, vastaus selitti täysin miksei vanhemmissa kuvissa ole dataa, niitä ei toistaiseksi ole kuin edelliset 5 päivää saatavilla. Tulossa on kyllä jossain vaiheessa että voisi hakea myös vanhempia kuvia...
Varsinainen ongelma tuli tosin ratkottua aika pitkälle jo muutama päivä sitten etelä-suomen yli pyyhkineen sade-alueen avulla....

Ok. Tämänkin olisi voinut välttää jos (a) olisi foorumin tapainen jonne kertyisi tehdyt kysymykset vastauksineen tai (b) tuo dokementaatiopuoli avoimesta datasta olisi parempi...

systeemi

Olen joskus aikonaan ollut suoraan ministeriöön yhteydessä sähköpostitse. Omalla nimellä, osoite ja yhteystiedoilla allekirjoitettuna.  Hämmästykseksesi yhtenä iltana huomasin että ministeri otti haastattelussa kantaa juuri kyseiseen asiaan. Kyllä ne lukevat kaikki asialliset viestit mitä sinne lähettää. Tai no anakin suhteellisen varma olen siitä että lukevat.
Sääasema Nauska, Kemi

www.kemiweather.fi

weatherc

Lainaus käyttäjältä: systeemi - perjantai, 12.09.2014, 12:27
Olen joskus aikonaan ollut suoraan ministeriöön yhteydessä sähköpostitse. Omalla nimellä, osoite ja yhteystiedoilla allekirjoitettuna.  Hämmästykseksesi yhtenä iltana huomasin että ministeri otti haastattelussa kantaa juuri kyseiseen asiaan. Kyllä ne lukevat kaikki asialliset viestit mitä sinne lähettää. Tai no anakin suhteellisen varma olen siitä että lukevat.

Juu, sama mielikuva täälläkin on enkä edes odottanut että sieltä vastausta tulisi heti maanantaina. En muista mistä joskus laitoin johonkin ministeriöön viestiä niin vastaus tuli jonkn ajan päästä itse ministeriltä  :)

ahpe

Minulta on kysytty että pystynkö selvittään kuinka kova oli max tuulenpuuska 9.7.2015, omalla asemalla se oli 7.2 m/s, (mittaus on 2 m:n korkeudella), eikä siten anna oikeaa kuvaa mitä se oli FMI: n asemalla n. 1 km päässä.

Olen yrittänyt sitä tulkita FMI: n avoimen datan kyselyn tuloksista, mutta en kyllä pysty siitä tulkitsemaan mikä arvo niissä on tuulilukema?

Onko kysely oikeasta paikasta, josta sen saisin selville?

Kyselyllä:

Lainaahttp://data.fmi.fi/fmi-apikey/xxx-xxx-xxx-xxx-xxx/wfs?request=getFeature&storedquery_id=fmi::observations::weather::timevaluepair&place=pello&timestep=30&starttime=2015-07-08T17:00:00Z&endtime=2015-07-09T18:30:00Z&;

tulee monta sivua seuraavanlaista: Mitähän sitten tarkoittavatkin?
Lainaa<gml:Point gml:id="point-1-1-t2m" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
<gml:name>Pello kk Museotie</gml:name>
<gml:pos>66.77278 23.96303</gml:pos>
<wml2:MeasurementTimeseries gml:id="obs-obs-1-1-t2m">
<wml2:point>
<wml2:MeasurementTVP>
<wml2:time>2015-07-08T17:00:00Z</wml2:time>
<wml2:value>14.7</wml2:value>
</wml2:MeasurementTVP>
</wml2:point>
<wml2:point>
<wml2:MeasurementTVP>
<wml2:time>2015-07-08T17:30:00Z</wml2:time>
<wml2:value>14.8</wml2:value>

weatherc

Ihan oikea paikka tuo on havainnoille :)
Tuollaista xml-sontaa tuo data on. Tosin xml2array PHP-funktio saa sen hitusen järkevämpään muotoon.

Tuulen nopeuden "id" on ws_10min ja puuskien "wg_10min":
<wml2:MeasurementTimeseries gml:id="obs-obs-1-1-wg_10min">

Pikainen selailu antoi max puuskaksi 11.8 m/s, mutta, oletuksena ainakin on tuo data 30 min jaksoissa joten sieltä uupuu 20 min joka puol tunti. Muuta timestep-kohta urlissa asentoon 10 niin saat datat 10 min jaksoissa.

xml2array.php
function xml2array($contents, $get_attributes=1, $priority = 'tag') {
    if(!$contents) return array();

    if(!function_exists('xml_parser_create')) {
        //print "'xml_parser_create()' function not found!";
        return array();
    }

    //Get the XML parser of PHP - PHP must have this module for the parser to work
    $parser = xml_parser_create('');
    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, trim($contents), $xml_values);
    xml_parser_free($parser);

    if(!$xml_values) return;//Hmm...

    //Initializations
    $xml_array = array();
    $parents = array();
    $opened_tags = array();
    $arr = array();

    $current = &$xml_array; //Refference

    //Go through the tags.
    $repeated_tag_index = array();//Multiple tags with same name will be turned into an array
    foreach($xml_values as $data) {
        unset($attributes,$value);//Remove existing values, or there will be trouble

        //This command will extract these variables into the foreach scope
        // tag(string), type(string), level(int), attributes(array).
        extract($data);//We could use the array by itself, but this cooler.

        $result = array();
        $attributes_data = array();
       
        if(isset($value)) {
            if($priority == 'tag') $result = $value;
            else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
        }

        //Set the attributes too.
        if(isset($attributes) and $get_attributes) {
            foreach($attributes as $attr => $val) {
                if($priority == 'tag') $attributes_data[$attr] = $val;
                else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
            }
        }

        //See tag status and do the needed.
        if($type == "open") {//The starting of the tag '<tag>'
            $parent[$level-1] = &$current;
            if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
                $current[$tag] = $result;
                if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
                $repeated_tag_index[$tag.'_'.$level] = 1;

                $current = &$current[$tag];

            } else { //There was another element with the same tag name

                if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
                    $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
                    $repeated_tag_index[$tag.'_'.$level]++;
                } else {//This section will make the value an array if multiple tags with the same name appear together
                    $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
                    $repeated_tag_index[$tag.'_'.$level] = 2;
                   
                    if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
                        $current[$tag]['0_attr'] = $current[$tag.'_attr'];
                        unset($current[$tag.'_attr']);
                    }

                }
                $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
                $current = &$current[$tag][$last_item_index];
            }

        } elseif($type == "complete") { //Tags that ends in 1 line '<tag />'
            //See if the key is already taken.
            if(!isset($current[$tag])) { //New Key
                $current[$tag] = $result;
                $repeated_tag_index[$tag.'_'.$level] = 1;
                if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;

            } else { //If taken, put all things inside a list(array)
                if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...

                    // ...push the new element into that array.
                    $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
                   
                    if($priority == 'tag' and $get_attributes and $attributes_data) {
                        $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
                    }
                    $repeated_tag_index[$tag.'_'.$level]++;

                } else { //If it is not an array...
                    $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
                    $repeated_tag_index[$tag.'_'.$level] = 1;
                    if($priority == 'tag' and $get_attributes) {
                        if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
                           
                            $current[$tag]['0_attr'] = $current[$tag.'_attr'];
                            unset($current[$tag.'_attr']);
                        }
                       
                        if($attributes_data) {
                            $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
                        }
                    }
                    $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
                }
            }

        } elseif($type == 'close') { //End of tag '</tag>'
            $current = &$parent[$level-1];
        }
    }
   
    return($xml_array);
}   

ahpe

Kiitos tiedoista, mielenkiintoista luettavaa. ???

Tein haun:

http://data.fmi.fi/fmi-apikey/xxx-xxx-xxx-xxx-xxx/wfs?request=getFeature&storedquery_id=fmi::observations::weather::timevaluepair&place=pello&timestep=10&starttime=2015-02-07T00:10:00Z&endtime=2015-02-08T23:30:00Z&

Lainaa<wml2:MeasurementTimeseries gml:id="obs-obs-1-1-wg_10min">

ja sain seuravaa:

[quotewml2:point>
<wml2:MeasurementTVP>
<wml2:time>2015-02-07T23:40:00Z</wml2:time>
<wml2:value>22.5</wml2:value>
</wml2:MeasurementTVP>
</wml2:point>
<wml2:point>
<wml2:MeasurementTVP>
<wml2:time>2015-02-07T23:50:00Z</wml2:time>
<wml2:value>18.1</wml2:value>
</wml2:MeasurementTVP>
</wml2:point>
<wml2:point>
<wml2:MeasurementTVP>
<wml2:time>2015-02-08T00:00:00Z</wml2:time>
<wml2:value>23.0</wml2:value>
</wml2:MeasurementTVP>
</wml2:point>][/quote]

tuon mukaan kovin puuska 10 min olisi ollut 23 m/s ?

Tulkitsenko tuon oikein?
Jostain vielä löytyisi myös tuulen suunta?

weatherc

#88
Juup. Tuon mukaan se olisi ollut 23 m/s.

Tuulen suunta on wd_10min.

Tuossa koko lista jota itse käytän jossa id:n alusta siivottu pois "point-point-1-" tai "obs-obs-1-" tai mikä se alku onkaan. Tuosta uupuu muutama parametri jota löytyy xml-filusta.

wd_10min = tuulen suunta
wawa = säätila
ws_10min = tuulen nopeus
wg_10min = puuskatuuli
p_sea = ilmanpaine
rh = ilmankosteus
t2m = lämpötila
r_1h = 1h sademäärä
ri_10min = sateen rankkuus
snow_aws = lumen syvyys niiltä asemilta jossa se on

sm3

Sähköpostiin tuli tämmöstä:

Ilmatieteen laitos julkaisee ohjelmistojaan avoimena lähdekoodina
http://ilmatieteenlaitos.fi/tiedote/269599753

Itse en aio hyödyntää, mutta ajattelin että jotakuta täällä voisi kiinnostaa.