users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · web viewiot-pohjainen...

12
TSJL avoin data, yleistä Fölin avoin data Turun seudun joukkoliikenteen (TSJL) avoimen datan lähteet löytyvät osoitteesta http://data.foli.fi/doc/index SIvulla on kolme tietolähdettä: Rajapinnan kautta on pääsy kolmeen tietolähteeseen: GTFS , SIRI ja CITYBIKE

Upload: others

Post on 05-Apr-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

TSJL avoin data, yleistäFölin avoin dataTurun seudun joukkoliikenteen (TSJL) avoimen datan lähteet löytyvät osoitteestahttp://data.foli.fi/doc/index  SIvulla on kolme tietolähdettä:

Rajapinnan kautta on pääsy kolmeen tietolähteeseen: GTFS , SIRI ja CITYBIKE

Ensimmäiset tehtävät liittyvät näihin tietolähteisiin. GTFS sisältää pysyvää tietoa ja SIRI sekä CITYBIKE ajantasaista dataa. Miten IoT liittyy näihin? Esimerkiksi paikallisliikenteen

Page 2: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

bussissa on IoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää, miten päästään käsiksi tähän reaaliaikaiseen tietoon.

Pysyvän datan käsittely: pysäkin numeroSelvitä avointa dataa hyödyntäen, mitkä ovat Köydenpunojankadun koulun läheisyydessä olevien pysäkkien numerot. Logomon puoleinen pysäkki + Kukkulan puoleinen pysäkki. Köydenpunojankatu.

Pysäkkitiedot JSON-muodossa löytyvät osoitteesta http://data.foli.fi/gtfs/v0/20191114-135003/stops ja ensimmäinen tehtävä liittyy tähän dataan.

Page 3: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

Yhden pysäkin tiedot

yksi.html

<!DOCTYPE html><html><body><p id="demo"></p><script>

var myJSON = '{"stop_code": "1","stop_name": "Turun satama (Silja)", "stop_lat": 60.43497, "stop_lon": 22.21966, "zone_id": "F\u00d6LI", "stop_timezone": "Europe\/Helsinki"}';var myObj = JSON.parse(myJSON);document.getElementById("demo").innerHTML = myObj.stop_code + ", " + myObj.stop_name;</script></body></html>

Kolmen pysäkin tiedotAlla on stop-tiedostosta kolme ensimmäistä pysäkkitietoa. Tässäkin data on kopioitu koodiin leikepöydän avulla. Datan tilalle voidaan kopioida kaikkien pysäkkien tiedot. kolme.html<!DOCTYPE html><html><body>

<p id="demo"></p><script>var myObj, x;myObj = {    "1": {        "stop_code": "1",        "stop_name": "Turun satama (Silja)",        "stop_lat": 60.43497,        "stop_lon": 22.21966,        "zone_id": "F\u00d6LI",        "stop_timezone": "Europe\/Helsinki"    },    "10": {        "stop_code": "10",        "stop_name": "Sairashuoneenpuisto",        "stop_lat": 60.44419,        "stop_lon": 22.25233,        "zone_id": "F\u00d6LI",        "stop_timezone": "Europe\/Helsinki"    },

Page 4: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

    "100": {        "stop_code": "100",        "stop_name": "W\u00e4rtsil\u00e4npolku",        "stop_lat": 60.43482,        "stop_lon": 22.24424,        "zone_id": "F\u00d6LI",        "stop_timezone": "Europe\/Helsinki"    }};

var koodi, nimi;for (x in myObj) { koodi = myObj[x].stop_code; nimi = myObj[x].stop_name; document.getElementById("demo").innerHTML += "Pysakin koodi: " + koodi;  document.getElementById("demo").innerHTML += ", nimi: " + nimi + "<br>";   }</script></body></html>

Kaikkien pysäkkien tiedot tiedostostaPysäkkien tiedot (pysyvä eli staattinen data). Löytyy osoitteesta http://data.foli.fi/gtfs/v0/20191114-135003/stops muodossa jota en kirjoitushetkellä tunne. Kierrän toistaiseksi ongelman seuraavalla tavalla.1) Avaan linkin selaimeen:

Page 5: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

2) Kopioin kuvassa näkyvän sivun sisällön stop2.json-tiedostoon omalle www-alueelleni (http://users.edu.turku.fi/jkoivuka/bussit/stop2.json)3) Kirjoitan koodin stop2.php, joka lukee JSON-muodossa olevan stop2.json-tiedoston ja printtaa sen sisällön siististi HTML:n taulukkomuodossa. Tämä versio tulostaa sivulle vain pysäkin koodin (stop_code) ja nimen (stop_name). 

<html><head><meta charset="UTF-8"><style>table, th, td {  border: 1px solid black;}th {  text-align: left;}</style></head></html><?php@ini_set("display_errors", 1);@ini_set("error_reporting", E_ALL);$string = file_get_contents("http://users.edu.turku.fi/jkoivuka/bussit/stop2.json");$json_a=json_decode($string,true);$koko = sizeof($json_a);echo "<br>Rivien lkm: $koko <br><br>";echo "<table width=30%>";echo "<th>Numero</th><th>Nimi</th>";foreach($json_a as $obj){ echo "<tr><td>"; echo $obj['stop_code'] ; echo "</td>"; echo "<td>"; echo $obj['stop_name'];  echo "</td></tr>";}echo "</table>";?>

Page 6: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

Harjoitus edellisen pohjalta: stop3.phpTee stop3.php käyttäen edellä esitettyä stop2.php-koodia hyväksi, niin että yhdelle riville ilmestyy pysäkin koodin ja nimen lisäksi sijainnin latitude- ja longitude-arvot.Malli: http://users.edu.turku.fi/jkoivuka/bussit/stop3.php

Korona-tilasto

Avoin data json-muodossa

https://www.hs.fi/kotimaa/art-2000006433221.html

Page 7: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

Harjoitus edellisen pohjalta: stop4.phpa) Tee stop4.php, joka listaa niiden pysäkkien tiedot, joiden nimi alkaa P-kirjaimella. Tämä onkin helppo tehtävä, sillä koodi löytyy alta. Olen lisännyt koodiin sisaltaa-funktion, joka tarkastaa löytyykö tekstistä sanaa.b) Tee stop5.html ja stop5.php. Nyt listataan ne, jotka alkavat stop5.html-lomakkeelle syötetyllä sanalla. Malli: http://users.edu.turku.fi/jkoivuka/bussit/stop5.html stop4.php

<html><head><meta charset="UTF-8"><style>table, th, td {   border: 1px solid black; }th {   text-align: left; }</style></head></html><?php@ini_set("display_errors", 1);@ini_set("error_reporting", E_ALL);// Lisäsin sisaltaa-funktionfunction sisaltaa($mystring, $word){ if (strncasecmp($mystring, $word, strlen($word)) == 0 ) return true; else return false; }$string = file_get_contents("http://users.edu.turku.fi/jkoivuka/bussit/stop2.json");$json_a=json_decode($string,true);echo "<table width=30%>";echo "<th>Numero</th><th>Nimi</th><th>Latitude</th><th>Longitude</th>";foreach($json_a as $obj){ if(sisaltaa($obj['stop_name'], 'P')) {  echo "<tr>";  echo "<td>".$obj['stop_code']."</td>";  echo "<td>".$obj['stop_name']."</td>";  echo "<td>" . $obj['stop_lat']  . "</td>";  echo "<td>" . $obj['stop_lon']  . "</td>";  echo "</tr>"; }}echo "</table>";?>

Page 8: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

Pysäkin 1051 dataData Juhannuskukkulan pysäkki 1051 Köydenpunojankadulla: 

Page 9: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

Saapumisajat ovat datassa result-nimisessä taulukossa. Kahden ensimmäisen bussin (taulukon indeksit 0 ja 1) linjanumerot:

<?php$string = file_get_contents("http://data.foli.fi/siri/sm/1051");$json_a = json_decode($string, true);echo $json_a['result'][0]['lineref'];

Page 10: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

echo $json_a['result'][1]['lineref'];?>

Attribuutti lineref ja muut:

Esimerkkikoodi<html><head><meta charset="UTF-8"><style>table, th, td {  border: 1px solid black;}th {  text-align: left;}</style></head></html>

<?php

Page 11: users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · Web viewIoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää,

function esitaHMS($aika){ $h = date('H', $aika); $h = $h+2; // Kesäaika: lisää 1 (ei 2) $m = date('i', $aika); $s = date('s', $aika); echo $h . ":" . $m . ":" . $s;}

$string = file_get_contents("http://data.foli.fi/siri/sm/1051");$json_a = json_decode($string, true);echo "Pysakki 1051 <br>";$i=0;$koko = sizeof($json_a['result']);echo "<br>Taulukon koko eli saapuvia busseja: $koko <br><br>";echo "<br>";echo "<table border='1'>";echo "<th>Bussinro</th><th>PVM</th><th>Saapumisaika</th>"; while ($i<$koko){  $k = $i+1;  echo "<tr>";     echo "<td>";     echo $json_a['result'][$i]['lineref'];  echo "</td>";    $aika = $json_a['result'][$i]['expectedarrivaltime'];    echo "<td>";     echo date("d.m.Y", $aika);  echo "</td>";  echo "<td>";  esitaHMS($aika);  echo "</td>";     echo "</tr>";       $i++;}echo "</table>";  ?>

Testaa: http://users.edu.turku.fi/jkoivuka/bussit/1051.php