Skip to content

Commit

Permalink
Kuopion veden harjoitukisen päivitystä
Browse files Browse the repository at this point in the history
  • Loading branch information
Joona Rissanen committed Dec 5, 2024
1 parent 2387f4d commit 6711a49
Show file tree
Hide file tree
Showing 14 changed files with 29 additions and 55 deletions.
34 changes: 4 additions & 30 deletions src/GR005/02_harjoitus_2.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -57,41 +57,23 @@ WFS-palvelujen yhdistäminen toimii samalla logiikalla kuin edellä määritelly

Lisää Maanmittauslaitoksen WFS-OGC -API- palvelu: <https://sopimus-paikkatieto.maanmittauslaitos.fi/kiinteisto-avoin/simple-features/v3/>

Lisää käyttäjätunnus ja salasana palveluyhteyden luomisen aikana. Käyttäjätunnuksia kysytään automaattisesti, jos valitut karttatasot niin on määritetty

Lisää taas muutama muukin WFS-palvelu ja nimeä ne haluamallasi tavalla. Jos et vielä avannut mainittua Gispon ylläpitämää WMS- ja WFS-rajapintojen listaa verkosta, avaa se nyt. Hae sieltä haluamasi WFS-palvelun URL tai lisää seuraavasta listasta WFS-palveluita:

- <https://avoinapi.vaylapilvi.fi/vaylatiedot/ows?service=wfs&request=getCapabilities>
- <https://avoinapi.vaylapilvi.fi/vaylatiedot/digiroad/ows?service=wfs&request=getCapabilities>
- <https://kartta.hel.fi/ws/geoserver/avoindata/wfs>
- <http://geo.stat.fi/geoserver/tilastointialueet/wfs?version=1.0.0>

Jos haluat käyttää tiedossasi olevaa suljettua (salasanaa vaativaa) palvelua, niin lisää käyttäjätunnus ja salasana palveluyhteyden luomisen aikana. Käyttäjätunnuksia kysytään automaattisesti, jos valitut karttatasot niin on määritetty. Kun olet luonut muutaman WFS-palveluyhteyden, voit ottaa niihin yhteyden samalla tavalla kuin WMS-palveluiden yhteydessä. Valitse taas oman kiinnostuksesi mukaan aineistoja lisättäväksi QGISiin. Kuten sanottu, huomataan, että tällä kertaa aineistot ovat vektoriaineistomuodossa. Tutki niiden geometrioita ja ominaisuustietoja QGISissa. Kokeile valita muutamia kohteita ja tallentaa ne paikallisesti kurssihakemistoosi.
Kun olet luonut muutaman WFS-palveluyhteyden, voit ottaa niihin yhteyden samalla tavalla kuin WMS-palveluiden yhteydessä. Valitse taas oman kiinnostuksesi mukaan aineistoja lisättäväksi QGISiin. Kuten sanottu, huomataan, että tällä kertaa aineistot ovat vektoriaineistomuodossa. Tutki niiden geometrioita ja ominaisuustietoja QGISissa. Kokeile valita muutamia kohteita ja tallentaa ne paikallisesti kurssihakemistoosi.

Kun olet luonut muutaman WFS-palveluyhteyden, voit ottaa niihin yhteyden samalla tavalla kuin WMS-palveluiden yhteydessä. Valitse taas oman kiinnostuksen mukaan aineistoja lisättäväksi QGISiin. Nyt kun sinulla on enemmän tasoja tasoluettelossa, voit ryhmittää tasoja, jotta sinun on helpompi hallita tasoja yhdessä. Hyödynnä myös muita tasoluettelon pikanäppäimiä tasoluettelon yläpuolelta:
Kun sinulla on enemmän tasoja tasoluettelossa, voit ryhmittää tasoja, jotta sinun on helpompi hallita tasoja yhdessä. Hyödynnä myös muita tasoluettelon pikanäppäimiä tasoluettelon yläpuolelta:

![](img/harjoitus_2/image6.png)

Yllä olevassa kuvassa näkyy vain yksi taso, mutta sinulla on varmasti jo useampi taso luettelossasi. Tee esimerkiksi omat ryhmät WFS- ja WMS-tasoille.

## Aineistojen lisääminen MML rajapinnoilta

Maanmittauslaitoksen WMS ja WFS rajapintojen käyttämiseen tarvitsee API-avaimen. Voit luoda oman API-avaimen MML:n OmaTili-palvelussa.

1. Rekisteröidy OmaTili-palveluun täällä <https://omatili.maanmittauslaitos.fi/user/new/avoimet-rajapintapalvelut?lang=fi>. Tarvitset rekisteröitymiseen oman sähköpostisi, Maanmittauslaitos lähettää sinulle sähköpostiisi tilisi salasanan.

2. Rekisteröitymisen jälkeen voi kirjautua MML:n OmaTili-palveluun sähköpostiosoitteellasi ja saamallasi salasanalla.

3. Sisäänkirjautumisen jälkeen näet käyttäjätietosi ja voit luoda uuden API-avaimen. Voit nyt muuttaa tietojasi, jos haluat. Mutta tärkeintä on nyt tehdä itsellesi API-avain painamalla "Luo API-avain" -painiketta. API-avaimesi ilmestyy nyt sivulle ja voit kopioida sen talteen. **Jätä tämä sivu auki API-avaimen kopioimista varten.**

Muita huomioita: OmaTili-sivun kautta voit myös poistaa API-avaimesi tai käyttäjätunnuksesi. Mutta: "jos poistat API-avaimen käytöstä, et saa enää käyttöösi rajapintoja, jotka hyödyntävät API-avaintasi toimiakseen. API-avaimen poistamista ei voi peruuttaa, mutta voit milloin vain luoda uuden API-avaimen OmaTili-palvelussa. Uusi API-avain on otettava käyttöön niissä rajapinnoissa, joissa vanha API-avain on ollut käytössä."

Mikäli unohdit salasanasi MML:n OmaTili-palveluun, voit pyytää uuden salasanan täältä: <https://omatili.maanmittauslaitos.fi/user/password/avoimet-rajapintapalvelut>

Nyt voit tehdä yhteyden Maanmittauslaitoksen WMS ja WFS palvelimiin. Valitse yksinkertainen todennus välilehti ja kopioi API-avaimesi käyttäjätunnukseksi. API-avain tallentuu palvelinyhteyteen eikä poistu sieltä ellet poista yhteyttä.

![](img/harjoitus_2/image7.png)

API-avaimen voi myös tallentaa QGISiin, jolloin sinun ei tarvitse hakea ja kopioida API-avainta uudestaan kun teet uusia tietokantayhteyksiä. Tämän harjoituksen lopussa lisätehtävässä on ohjeet API-avaimen tallentamiseen ja käyttöön.

## WFS-rajapintapalvelun kysely ja suodatus SQL-lausekkeella

Voit myös kysellä ja filtteröidä rajapintapalveluita QGISin SQL-lauseke-toiminnolla. Toiminto löytyy samasta ikkunasta, josta WFS-tasoja voidaan lisätä kunkin palveluyhteyden osalta. Seuraavassa animaatiossa ladataan Tilastokeskuksen ylläpitämästä paikkatietopalvelusta vain vakavuuden "2" liikenneonnettomuudet vuodelta 2015 QGISiin.
Expand All @@ -108,14 +90,6 @@ Sitten lisäämme tason QGISiin ja varmistamme, että SQL-kyselymme tuotti toivo

![](img/harjoitus_2/image10.gif)

## Lisätehtävä: API-avaimen lisääminen QGISiin

Mene ylävalikosta **Asetukset \> Valinnat** ja avaa Autentikointi-välilehti. QGIS saattaa ensin kysyä pääkäyttäjäsalasanaa, jos et ole luonut sellaista aiemmin. Valitse salasanaksi joku, jonka muistat hyvin, sitä ei voi palauttaa myöhemmin. Kun olet luonut salasanan, pääset jatkamaan API-avaimen lisäämistä.

![](img/harjoitus_2/image11.png) Paina aluksi **+**-symbolia välilehden oikeasta ylänurkasta. Vaihda pudotusvalikosta autentikoinniksi **Basic authentication** valinta. Syötä aukeavaan ikkunaan salasanan nimi (esim. "MML") ja lisää API-avaimesi **Käyttäjänimi**-kenttään. Muut kentät voit jättää tyhjiksi. Paina lopuksi **Tallenna** ja asetukset ikkunasta **OK**. API avain on nyt tallennettu ja voit käyttää sitä tehdessäsi WMS tai WFS yhteyttä.

![](img/harjoitus_2/image12.png)

::: hint-box
**Psst! Muista tallentaa QGIS-projekti harjoituksen lopuksi.**
:::
50 changes: 25 additions & 25 deletions src/GR005/04_harjoitus_4.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@ Koulutettava oppii muodostamaan eri tyyppisille paikkatietokohteille tekstitykse

Käynnistä QGIS-ohjelmisto. Avaa edellisen harjoituksen QGIS-projekti ja tallenna se nimellä (**Projekti → Tallenna nimellä...**) "**QGIS_harjoitus_4**". Avaa projektiin seuraavat aineistot:

- **.../kurssihakemisto/Harjoitus 4/NaturaKohde_ma.shp**
- **.../kurssihakemisto/Harjoitus 4/TieViiva.shp**
- **.../kurssihakemisto/Harjoitus 4/Vaestotietoruudukko.gpkg**
- Lisää projektiin seuraavat aineistot:
- **.../Harjoitus 8/jv-johdot.TAB**

Aseta aluksi **NaturaKohde_ma** -taso näkyviin ja muut näkymättömäksi
- **.../Harjoitus 3/jv-varusteet.TAB**

- **.../Harjoitus 3/viemäripiirit.TAB**

Aseta aluksi **jv-johdot.TAB**-taso näkyviin ja muut näkymättömäksi

## Nimiöt

QGIS käyttöliittymässä paikkatietokohteiden tekstitykseen viitataan termillä **Nimiöt** (englanninkielinen termi on "**Labeling**"). Avaa **NaturaKohde-tason Ominaisuudet-ikkuna** ja valitse **Nimiöt-välilehti**. Valitse **Yksinkertainen nimiöinti** ja **Nimiöiden perustana -alasvetovalikosta** nimiöinnissä käytettävän sarakkeen nimi, esim. "Nimi". Paina **Käytä**, niin kohteille syntyy nimiöt. Tämä nähdään nyt karttaikkunasta, johon nimiöt ovat jo päivittyneet:
QGIS käyttöliittymässä paikkatietokohteiden tekstitykseen viitataan termillä **Nimiöt** (englanninkielinen termi on "**Labeling**"). Avaa **jv-johdot.TAB-tason Ominaisuudet-ikkuna** ja valitse **Nimiöt-välilehti**. Valitse **Yksinkertainen nimiöinti** ja **Nimiöiden perustana -alasvetovalikosta** nimiöinnissä käytettävän sarakkeen nimi, esim. "HALK". Paina **Käytä**, niin kohteille syntyy nimiöt. Tämä nähdään nyt karttaikkunasta, johon nimiöt ovat jo päivittyneet:

![](img/harjoitus_4/image1.png)

Expand All @@ -29,7 +32,7 @@ QGIS käyttöliittymässä paikkatietokohteiden tekstitykseen viitataan termill
Nimiöiden tekstien näkymistä kartalla voi määrittää monella eri tavalla. Alla kuvaukset QGISin nimiöiden muokkaamisen alateemoista:

| | |
|:--------------:|:-------------------------------------------------------|
|:------------------------:|:---------------------------------------------|
| Teksti | Määritellään tekstin tyyli, väri ja muita yleisiä ominaisuuksia |
| Muotoilu | Voit muodostaa useampirivisiä tekstejä, keskittää tekstiä ja määritellä lukujen muotoa |
| Vyöhyke | Luodaan tekstiä korostavat puskurit (tekstin reunukset) |
Expand Down Expand Up @@ -80,23 +83,21 @@ Nyt nimiöt seuraavat viivoja paremmin. Huomaa myös, että kaikki nimiöt eivä

## Vektoriaineiston luokittelut

**Väestötietoruudukko.gpkg** on vektoriaineisto, tällä kertaa kuitenkin geopackage-formaatissa. Voit lisätä sen projektiin **Tietolähteiden hallinta -työkalulla**. Tutustu ensin aineistoon. Avaa **Attribuuttitaulu** painamalla aineistotason nimen päällä hiiren oikealla näppäimellä. Ominaisuustietojen ymmärtämiseksi on hyvä tarkastella taulun sisältöä sekä tutustua samalla aineiston metatietoihin (tietoa aineistosta). Metatiedot löytyvät usein aineistontuottajan nettisivuilta tai paikkatietojen löytämiseen tarkoitetuista hakemistoista. Metatiedot kertovat mm. kuka aineiston on tuottanut, mihin tarkoitukseen se on tehty, millä mittakaavalla ja missä koordinaattijärjestelmässä. Harjoituksessa käytettävän aineiston on tuottanut Helsingin seudun ympäristöpalvelut. Sen metatiedot löytyvät samasta kansiosta, **Vaestoruudukko.pdf**-tiedostosta. Avaa Vaestoruudukko.pdf-tiedosto ja tutustu eri kenttien (sarakkeiden) kuvauksiin. Sivun lopussa asiaa on hieman avattu.

![](img/harjoitus_4/image10.png){width="60%"}
**jv-johdot.TAB** on vektoriaineisto. Tutustu ensin aineistoon. Avaa **Attribuuttitaulu** painamalla aineistotason nimen päällä hiiren oikealla näppäimellä.

Ominaisuustietotauluissa sarakkeiden nimet ovat usein lyhennetyssä muodossa. Sarakkeiden merkitystä on tyypillisesti hiukan vaikea päätellä lyhenteistä. Tässä tapauksessa silmiinpistävää on lisäksi, että taulukossa luku 99 toistuu useaan otteeseen. Metatietojen avulla voimme kuitenkin selvittää muun muassa, miten ASUKKAITA sarakkeen tiedot on laskettu sekä millä tavalla tiedot on poistettu ruuduissa, joissa asuu 0-4 asukasta. IKA-sarakkeet sisältävät asukkaiden määrät ikäluokittain, mutta niille on annettu arvo 99 aina kun ruudukon asukasmäärä on ollut alle 100.
![](img/harjoitus_4/image10.png){width="96%"}

Tarkastele aineistoa myös kartalla. Huomaatko yhden ruudun, joka näyttää sijaitsevan kaukana kaakossa keskellä merta?
Ominaisuustietotauluissa sarakkeiden nimet ovat usein lyhennetyssä muodossa.

![](img/harjoitus_4/image11.png){width="60%"}
Suodatetaan aineistosta pois esimerkiksi kohteet joiden rakennus vuodeksi on merkitty "0": klikkaa tason nimeä hiiren oikealla ja valitse **Suodata...** Kirjoita (tai valitse tietokentistä ja operaattoreista klikkaamalla) suodatuslausekkeeksi "RAK_VUOSI" != 0. Voit testata suodatuksen toimivuutta klikkaamalla **Testaa**.

Irralliseen ruutuun on tässä aineistossa sijoitettu kaikki ne pk-seudun asukkaat, joilla ei ole vakituista kotiosoitetta. Info-työkalulla nähdään, että tämän ruudun asukasmäärä on kymmenkertaisesti suurempi kuin minkään muun aineiston ruudun. Se siis vääristää luokittelua ja aineistosta laskettuja tilastoja (mm. keskimääräinen asukastiheys ruutua kohti).
![](img/harjoitus_4/image12.png){width="70%"}

Suodatetaan tämä ruutu pois aineistosta: laita editointi päälle ja klikkaa tason nimeä hiiren oikealla ja valitse **Suodata...** Kirjoita (tai valitse tietokentistä ja operaattoreista klikkaamalla) suodatuslausekkeeksi **ASUKKAITA \< 5000**. Voit testata suodatuksen toimivuutta klikkaamalla **Testaa**.
Nyt QGIS näyttää aineistostasi vain ne ruudut, jotka täyttävät annetun ehdon. Voit poistaa suodatuksen klikkaamalla tason vieressä olevaa "suppiloa" ![](img/harjoitus_4/image12_1.png)

![](img/harjoitus_4/image12.png){width="70%"}
ja poistamalla suodatuslauseen ja klikkaamalla lopuksi OK.

Nyt QGIS näyttää aineistostasi vain ne ruudut, jotka täyttävät annetun ehdon eli joiden kokonaisasukasmäärä on alle 5000. Paikkatietoineiston ymmärtäminen ennen sen käsittelyä on välttämätöntä. Voimme nyt esimerkiksi päättää, että haluamme tuottaa teemakartan ASUKKAITA-sarakkeen tietojen pohjalta. Näin pystymme myös paremmin tulkitsemaan karttaa ja valitsemaan visualisointia varten sopivat asetukset. Avaa tason ominaisuudet ja valitse tason kuvaustekniikaksi **Porrastettu**. Aseta vielä oheisen kuvan mukaiset **Sarake-, Liukuväri-, Tila- ja Luokat-määrittelyt**.
Paikkatietoineiston ymmärtäminen ennen sen käsittelyä on välttämätöntä. Voimme nyt esimerkiksi päättää, että haluamme tuottaa teemakartan RAK_VUOSI-sarakkeen tietojen pohjalta. Näin pystymme myös paremmin tulkitsemaan karttaa ja valitsemaan visualisointia varten sopivat asetukset. Avaa tason ominaisuudet ja valitse tason kuvaustekniikaksi **Porrastettu**. Aseta vielä oheisen kuvan mukaiset **Sarake-, Liukuväri-, Tila- ja Luokat-määrittelyt**.

![](img/harjoitus_4/image13.png){width="60%"}

Expand All @@ -108,33 +109,32 @@ Jos **Tasot-paneelissasi** ei näy selitettä, paina tason nimen vasemmalla olev

![](img/harjoitus_4/image15.png)

Voit vertailla eri luokittelumenetelmiä ja tutkia aineiston jakaumaa histogrammin avulla. Histogrammi löytyy omalta välilehdeltään. Paina **Load values** saadaksesi histogrammin ja luokkien rajat näkyviin.
Voit vertailla eri luokittelumenetelmiä ja tutkia aineiston jakaumaa histogrammin avulla. Histogrammi löytyy omalta välilehdeltään. Paina **Lataa arvot** saadaksesi histogrammin ja luokkien rajat näkyviin.

![](img/harjoitus_4/image16.png){width="60%"}

![](img/harjoitus_4/image17.png)

Muuta vielä **Symbolityyliä**. Avaa uudelleen tason ominaisuustiedot ja paina **Muuta...** **Symbolin valitsija -ikkuna** aukene. Valitse soveltuva kuviointi monikulmioille. Valitse sitten **Yksinkertainen täyttö** symbolitasolle ja aseta **Piirron tyyliksi Ei viivaa**. Paina **OK** ja **OK**. Zoomaa karttaan tutkimaan tulosta ja palaa tyyliasetuksiin, jos haluat tehdä vielä muutoksia.

## Lisätehtävä: nimiöiden piirtäminen

Loitonna karttanäkymää siten, että kaikki tasojesi kohteet tulevat näkyville. Voit tehdä tämän seuraavan työkalun avulla:

![](img/harjoitus_4/image18.jpg)

Joissakin tapauksissa olisi hyödyllistä määrittää nimiöt eri mittakaavoille erikseen. Avaa taas **NaturaKohde_ma-tason ominaisuudet** ja valitse **Nimiöt-sivupalkista** ja **Piirtäminen-alateema**. Rastita **Show all labels for this layer (including colliding labels)**, varmista, ettei mittakaavaperusteinen näkyvyys ole valittuna ja paina **Käytä**. Nimiöiden piirtämiseen menee hetki, koska kaikki kartalla näkyvät monikulmiot nimetään. Kun kartta on piirtynyt huomaat, ettei kannata nimiöidä kaikkia monikulmioita kyseisellä mittakaavalla. Rastita tämä asetus pois päältä ja paina **Käytä**. Huomaa, että oletuksena QGIS jättää piirtämättä toisiinsa törmäävät nimiöt. Rastita päälle **Mittakaavaperusteinen näkyvyys** ja laita **Maksimi-kentän arvoksi** 500 000:
Joissakin tapauksissa olisi hyödyllistä määrittää nimiöt eri mittakaavoille erikseen. Avaa **jv-varusteet tason ominaisuudet** ja valitse **Nimiöt-sivupalkista** ja Valitse alasvetovalikosta "Yksinkertainen nimiöinti" ja arvoksi "VARUSTE".

![](img/harjoitus_4/image19_1.png)

Mene sen jälkeen **Karttanäyttö-alateemaan**. Rastita päälle **Mittakaavaperusteinen näkyvyys** ja laita **Minimi-kentän arvoksi** 5000:

![](img/harjoitus_4/image19.png)

Paina **OK**. Natura-kohteiden nimiöt eivät enää näy 1:500 000 mittakaavan ulkopuolella. Lähennä karttaan, kunnes nimiöt näkyvät uudelleen. Voit myös testata muita tekstittämiseen liittyviä edistyneempiä toimia. Voit muun muassa ohjata nimiöiden tekstejä lausekepohjaisesti käyttämällä merkkijonoja QGISin lauseke-työkalulla:
Paina **OK**. jv-varusteet-kohteiden nimiöt eivät enää näy 1:5000 mittakaavan ulkopuolella. Lähennä karttaan, kunnes nimiöt näkyvät uudelleen. Voit myös testata muita tekstittämiseen liittyviä edistyneempiä toimia. Voit muun muassa ohjata nimiöiden tekstejä lausekepohjaisesti käyttämällä merkkijonoja QGISin lauseke-työkalulla:

![](img/harjoitus_4/image20.png)

Kokeile yhdistää kaksi saraketta samaan nimiöön **\|\| -merkin** avulla esimerkiksi seuraavalla tavalla: "**sarake1 \|\| sarake2**". Uuden rivin saat komennolla **`‘\n’`** . Huomaa, miten **Tuloksen esikatselu -kohtaan** tulee esille nimiöinnin oletettu tulos (aineistosta otetuilla esimerkkiarvoilla).
Kokeile yhdistää kaksi saraketta samaan nimiöön **\|\| -merkin** avulla esimerkiksi seuraavalla tavalla: "**sarake1 \|\| sarake2**". Uuden rivin saat komennolla **`'\n'`** . Huomaa, miten **Tuloksen esikatselu -kohtaan** tulee esille nimiöinnin oletettu tulos (aineistosta otetuilla esimerkkiarvoilla).

![](img/harjoitus_4/image21.png)


::: hint-box
**Psst!** Muista tallentaa QGIS-projekti harjoituksen lopuksi.
:::
Binary file modified src/GR005/img/harjoitus_4/image1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/GR005/img/harjoitus_4/image12_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image19.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/GR005/img/harjoitus_4/image19_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image20.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/GR005/img/harjoitus_4/image21.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6711a49

Please sign in to comment.