Karttapisteitä ja riistaa

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Karttapisteitä ja riistaa

Juha Valtonen

Ohessa minunkin puolestani otteita esityksestäni laivaseminaarissa 2018.
Esittelin siellä pariakin avointa dataa. Toinen niistä koski sellaisia tieliikenneonnnettomuuksia (ja rautatieliikenneonnettomuuksia), joihin on virka-apupyyntönä kutsuttu riistakeskusten
henkilöitä hoitelemaan "eläinuhreja" - käytännössä siis hirvi- ja peurakolaritapauksia.

Aineisto on saatavana avoimena datana esimerkiksi vuodelta 2017 seuraavasta linkistä:

https://oma.riista.fi/api/v1/anon/srva?calendarYear=2017

Jostain syystä survo GET komento ei tuohon linkkiin pure, vaan aineisto pitää hakea selaimen
avulla, josta sen sitten voi tallentaa tekstitiedostoksi. Tiedoston rakenne on vain sikäli hankala,
että se ei näy esim SHOW-komennolla, vaan edellyttää vähän TXTCONVia ennen kuin siitä saa
Survo-kelpoista:

*
*TXTCONV koe.txt tmp2.txt
*show tmp2.txt
*
*
*CONVERSIONS:
*D "
*
*
*TXTCONV tmp2.txt tmp3.txt

- vasta edellisen txtconvin jälkeen näkyy SHOWlla
- oleellista siinä tuo rivinvaihtojen (char(13)char(10))  tuottaminen tiedostoon

*SHOW TMP3.txt
*
*CONVERSIONS:
*t "},{id" "char(13)char(10)id"
*D [
*D ]
*D {
*D }
*END
*
*....................
*
*TXTCONV tmp3.txt tmp4.txt
*SHOW tmp4.txt
*CONVERSIONS:
*t "id:"                          ""
*t "rev:"                         ""
*t "pointOfTime:"                 ""
*t "eventName:"                   ""
*t "eventType:"                   ""
*t "gameSpeciesCode:"             ""
*t "geoLocation:latitude:"        ""
*t "longitude:"                   ""
*t "totalSpecimenAmount:"         ""
*t "specimens:gender:"            ""
*t "age:"                         ""
*t "gender:"                      ""
*t "age:"                         ""
*END
*
*
*..................

Sitten aineiston voikin siirtää survo-tiedostoksi

*
*FILE SAVE tmp4.txt TO new tmp   /       DELIMITER=, REMOVE_QUOTES=1  SKIP_ERRORS=2  NAMES=-
*file show tmp
*............................................................................................................
*

Aineistoa kannattaa muokkailla kuvaavammaksi nimeämällä muuttujia
ja antamalla muutamille muuttujien arvoille selkokielisempiä arvoja classifyilla


*
*FILE UPDATE TMP
* Copied from text file tmp4.txt
*FIELDS: (active)
*   1 NA_   8 ID       X1 (#####)
*   2 NA_   1 REV      X2 (##)
*   3 SA_  29 T        X3
*   4 SA_   8 ENAME    X4
*   5 SA_  16 ETYPE    X5
*   6 NA_   8 LAJI     X6 (######)
*   7 NA_   8 Y        X7 (#######)
*   8 NA_   8 X        X8 (######)
*   9 NA_   1 LKM      X9 (##)
*  10 SA_   7 KN1      X10
*  11 SA_   7 IK1      X11
*  12 SA_   7 KN2      X12
*  13 SA_   7 IK2      X13
*END
*
*
*
*
*VAR ELAJI:S15=MISSING TO TMP
*
*
*CLASSIFY TMP ELUKAT LAJI ELAJI
*
*CLASSIFICATION ELUKAT
* 47484:    kuusipeura
* 47503:    hirvi
* 47507:    metsäkauris
* 47629:    valkohäntäpeura
* 47926:    villisika
*200556:    metsäpeura
*OTHERS:     mikämikä
*


Saaliina on sitten aineisto, jossa n. 10 000 riviä, ja oleellisempana tietona karttasijainti
onnettomuuspaikasta. Kartalle pisteet saa R:n paketin plotGoogleMapsin avulla.

  install.packages("plotGoogleMaps")


R>library(plotGoogleMaps)


*
*VARS=ELAJI,T,ETYPE,X,Y,LKM
*
*FILE COPY TMP     TO R>tmp     /
*
*
*R  cur+1,x-1
*tm35fin <- CRS("+init=epsg:3067  +proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
*coordinates(tmp) <- ~X+Y
*proj4string(tmp) <- tm35fin
*m <- plotGoogleMaps(tmp,filename="elut17.htm", mapTypeId='ROADMAP',  streetViewControl= 'TRUE', control.width="0%")
x
*GOTO x
*/OPEN elut17.htm


GoogleMapsi avautuminen kestää jonnin aikaa, onhan n 10 tuhannessa pisteessä plottaamista.


Edellä oleva on toki kiva ominaisuus - mutta haluaisin tästä paljon enemmän.
Tiedän, että R:ssa on rutkasti SpatialDatan käsittelyyn ominaisuuksia, mutta omat
R-taitoni eivät toistaiseksi ole riittäneet seuraavaan:
Eli tavoitteena olisi luokitella karttapisteet esimerkiksi kunnittain / tai maakunnittain.
Eli esimerkiksi MML avoimen taustakartta-aineiston (jonka olen kyllä onnistunut siirtämään
Survoon), tai muun vastaavan tiedon avulla, tutkimaan kunkin pisteen sijainti, minkä
kunnan/maakunnan rajapisteiden polygonin sisällä piste sijaitsee - ja antamaan pisteelle
vastaavan arvon, jolloin datan voi sitten aggrekoida kunnittain/maakunnittain.

Jos joku tietää apuja tähän, niin otan tietoa mielelläni vastaan.

:JVa