Kuvaajan arkisto

Ensiksi taustatietona se että olen tallentanut tähän asti kuvani ja siihen liittyvät lajitiedot päiväkohtaisesti html tauluun. Tuonne nuo havainnot on jääneetkin eli ei ole montaa tullut ilmoitettua mihinkään havaintopalveluun. Tämän foorumin perusteella perehdyin aiheeseen JSON kun heräsi epäilys että tuon avulla voin automatisoida havaintojen ilmoittamisen. Nyt on talvi opiskeltu javascriptiä ja json tekniikkaa. Tällainen on JSON tiedostoni:

{
“eventDate”:“23.7.2016”,
“leg”:“Puranen, Harri”,
“coordinateSystem”:“coordinateSystemEtrs-tm35fin”,“coordinateSources”:“coordinateSourceKarttapaikka”,
“recordBases”:“recordBasisHumanObservationPhoto”,
“unit” : [
{
“image”:[
{“thumbnailURL”:“tK160723_001.jpg”,“largeURL”:“K160723_001.jpg”,“captureDateTime”:“2016-07-23,12.11.49”},
{“thumbnailURL”:“tK160723_005.jpg”,“largeURL”:“K160723_005.jpg”,“captureDateTime”:“2016-07-23,12.13.22”}
],
“locality”:“ES:Kouvola”,“latitude”:“6756794”,“longitude”:“8490761”,
“taxon”:{
“class”:{“vernacularName”:{“fi”:“Perhoset”},“scientificName”:“Lepidoptera”},
“omaTunnus”:“52.24”,
“species”:{“vernacularName”:{“fi”:“Keisarinviitta”},“scientificName”:“Argynnis paphia”},
“taxonConfidenceEnum”:“taxonConfidenceSure”
},
“MY_count”:“1”,“lifeStage”:“aikuinen”,
“det”:“Puranen, Harri”,
“notes”:“-”
},

{
"image":[   Seuraavan kuvan tiedot tähän....

Kuvat ja json tiedosto löytyy päiväkohtaisesti kansioista, esim. 2016/201607/20160723/160723.json
Tarve olisi työkalulle millä tuollaisen paketin (json + kuvat) voi Linux käyttäjä automaattisesti tallentaa. Toisista ketjuista olen ymmärtänyt että joku tällainen tulossa mutta ei tälle kaudelle?

Sitten kysymyksiä:

  1. Puuttuuko joku pakollinen tieto?
  2. Pitääkö jotain muuta muuttaa?
  3. Ilmeisesti käyttämäni euref koodi +8 i-koordinaatin eteen ei ole paras vaihtoehto. Mitä käytän jatkossa?
  4. “locality”:“ES:Kouvola” → tätä en hahmottanut, olisko tuolle maakunnale joku oma määritys vai meneekö noin?
  5. “taxonConfidenceEnum”:“varma” Mitä tähän pitäisi laittaa? varma, epävarma, puuttuu (=ei osannut määrittää), kelvoton (= kuvista ei aina pysty lajia sanomaan)
    Tätä minulla ei ole nykyisessä html-taulukossa. Laitoin tämän sillä ajatuksella että tällaisen amatöörin paketteja ei talleteta suoraan havaintokantaan vaan kulkee asiantuntijan kautta. Tätähän pohdittiin ketjussa Määritysten talentaminen.

Tässä alkajaisiksi tärkeimmät mitä nyt tuli mieleen.

En ole aivan varma viittaatko Vihkoon vai @mattiv:n tekemään sovellukseen. Voin vastata Lajitietokeskuksen ja Vihkon näkökulmasta.

Vihko on selainkäyttöinen sovellus havaintojen ja kuvienkin kirjaamiseen. Vihkoon voi toistaiseksi tallentaa tietoja vain selainlomakkeella, mutta suunnitteilla on toiminto havaintojen tallentamiseen Excel- tms. taulukkotiedostosta (riviformaatti ja matriisi/rysäformaatti). Siihen ei kuitenkaan ole suunnitteilla työkaluja, joissa voisi hallita havaintoja ja kuvia omalla tietokoneellaan.

Vihkon lisäksi Lajitietokeskuksella on ohjelmointirajapinta (https://api.laji.fi), jonka varaan kolmannet osapuolet voivat tulevaisuudessa rakentaa sovelluksia havaintojen tallentamiseen. Tallennus vaatii että havainnot lähetetään Lajitietokeskuksen tukemassa tietomallissa JSON-formaatissa (http://schema.laji.fi) rajapinnalle. Tällaista sovellusta on muutamakin henkilö ilmeisesti tekemässä.

Dokumentaatio havaintojen lähettämisestä rajapinnan kautta on kuitenkin vielä keskeneräinen. Tietomalli käyttää usempia samoja kenttiä, joita JSON-mallissasi on. Rakenne on kuitenkin erilainen (esim. paikannimiä ei tallenneta jokaiseen havaintoon erikseen, vaan ylemmäksi Gathering-luokkaan). Rakennetta on kuvailtu dokumentaatiossa, mutta kuitenkin enemmän datan hakemisen näkökulmasta. Tallennusdokumentaatiota parannellaan ja laajennetaan vaiheittain.

Yhteenvetona: Jos haluat pitää kirjaa havainnoistasi ja kuvistasi omalla tietokoneellasi niin että niiden siirto Vihkoon olisi myöhemmin helppoa, kirjaa tieto jossain koneluettavassa muodossa (tekstitaulukko lienee helpoin) käyttäen mahdollisuuksien mukaan kenttänimiä ja niiden arvoja, jotka on kuvattu Lajitietokeskuksen tietomallissa. Uusia tallennusvälineitä on tulossa Lajitietokeskukselta ja kolmansilta osapuolilta, mutta oman tiedon konvertointi niiden käyttämään muotoon vaatinee silti jonkin verran tekemistä. Omankin tallennussovelluksen voi tehdä, mutta tähän tulee tarkempia ohjeita vasta myöhemmin.

Mukava nähdä että asia kiinnostaa!

Vähän taisi olla juu sekava kysymys mutta kyllä Vihkoa tarkoitin. Tuota schema sivua olen tutkaillut ja sieltä vinkkejä omaan JSON tiedostoon hakenut. Tietomalli sivu oli minulle uusi tieto. Löytyi sieltä myös valmis JSON tiedoston malli :slight_smile:

Olin kuvitellut että yhden päivän havainnot voisivat olla yhdessä Gathering luokassa mutta kyseessä siis aina uusi Gathering kun paikka muuttuu?

Minun tapani harrastaa on siirtyminen jatkuvasti paikasta toiseen kävellen tai pyöräillen, harvemmin autolla. Eli paikka muuttu kokoajan. Usein paikkakunta pysyy samana mutta perinteinen kymppiruutu vaihtuu päivän aikana. Laitoin esimerkkipäiväni taulukon 20160723.htm sivulleni niin että selviää helpommin mistä kyse. (myös 20160723.json on siellä). Tuota sivua käytin koska kuvia oli vähän. Poistin sivulta toimimattomat linkit. Edellisen päivän (20160722.htm) laitoin siksi että on helpompi ymmärtää miksi haluan pitää kirjaa omalla koneella: Yleensä kuvia tulee niin paljon että ei ehdi kuin valita ja käsitellä kuvat ja katsoa kartasta paikat kohdalleen. Lajien nimeäminen jää myöhemmin tehtäväksi. Taisin testatakkin vihkossa että onnistuuko vain kuvan ja paikan tallentaminen niin että jatkaisi nimeämistä myöhemmin mutta ei toiminut noin.

Kiitoksia kuitenkin hyvästä vastauksesta. Muutankin kysymykseni pyynnöksi että jos joku osaaja on minulle sopivaa työkalua tekemässä niin saa kertoa koska voi testata :wink:

Gathering on keruutapahtuma, eli jos paikka muuttuu, kannattaa yleensä luoda uusi gathering. Yksittäisiin havaintoihin voi kyllä liittää koordinaateja ja päivämäärän/ajan, mutta kuitenkin suppeammin kuin keruutapahtumaan. Paikannimiä ei voi yksittäisiin havaintoihin kirjata.

Koordinaateista tuettuina ovat wgs84-asteet sekä yhtenäiskoordinaatit 1 m - 10 km tarkkuudella.

Havaintolomakkeella intuitiivisin tapa liittää paikkatieto havaintoon on luoda aina uusi gathering (siis käyttää kartan vierestä löytyviä ikoneja havainnon sijainnin ilmoittamiseen). Koska intuitiivisesti näin, tästä tekisi mieleni ohjeistuksessakin lähteä (ohjeistusta kun tällaista vastaavaa tilannetta varten olen fundeerannut).

Toisaalta olen miettinyt, miten ottaisi huomioon sen, että havainnot pikkuhiljaa kerryttävät tietoa samoilta paikoilta/alueilta. Esim. “Kotimetsän” lajiston havainnointi ja kartoitus saattaa olla tavoitekin, ei niinkään kokoelma yksittäisiä sattumahavaintoja. “Kotimetsään” siis pitäisi tulevaisuudessa päästä hauissa käsiksi.

Tai isompi porukka saattaa kartoittaa noin suunnilleen samaa aluetta.

Onko fiksua ohjeistaa niin, että esim. paikannimikenttään kirjaisi omien tagejaan? Tämä nyt on keino, joka on tullut mieleeni.

Tuo wgs84 näyttäisikin olevan minun tarpeisiini sopivampi koska siinä voi valita keskipisteen ja tarkkuuden sen mukaan miten hyvin löytää kartalta paikan missä kuvan otti. Pitänee alkaa käyttämään uusissa otoksissa.

Tänään minulta kysyttiin että montako päiväperhosta olet kuvannut kotipihaltasi. Nykyisellä html menetelmällä tuota tietoa on turhan vaikea kaivaa. Mutta jos minulla olisi paikkatiedoissa tagi “piha” ja tiedot tietokannassa niin voisi onnistua. Mutta taitaa onnistua saman tiedon etsinä jos on paikan ilmoittanut riittävän tarkasti koordinaatteina? Eli jos tutkija haluaa selvittää esim jonkun suon lajiston niin saanee tiedot ilman tagia?

Muutin JSON tiedoston sellaiseksi että se sisältää yhden havainnon yhdestä paikasta . Käytin löytämääni mallia apuna. Näyttää tältä:

{
"gatherings" : [
	{
	"municipality":"Kouvola","locality":"Valkeala",
	"coordinateSystem":"MY.coordinateSystemEtrs-tm35fin","coordinateSources":"MY.coordinateSourceKarttapaikka",
	"latitude":"6756794","longitude":"8490761",
	"units" : [ 
		{
			"recordBases":"MY.recordBasisHumanObservationPhoto",
			"image":[
				{"thumbnailURL":"tK160723_001.jpg","largeURL":"K160723_001.jpg","captureDateTime":"2016:07:23 12:11:49"},
				{"thumbnailURL":"tK160723_005.jpg","largeURL":"K160723_005.jpg","captureDateTime":"2016:07:23 12:13:22"}
			],
			"taxon":{
				"class":{"vernacularName":{"fi":"Perhoset"},"scientificName":"Lepidoptera"},
				"species":{"vernacularName":{"fi":"Keisarinviitta"},"scientificName":"Argynnis paphia"},
				"omaTunnus":"52.24",
				"taxonConfidenceEnum":"MY.taxonConfidenceSure"
			},
			"count":"1","lifeStage":"aikuinen",
			"det":"Puranen, Harri",
			"notes":"",
		}
	],
	}
],
"gatheringEvent": {
	"leg":["Puranen, Harri"],
	"eventDate":"2016-07-23",
}
}

Vihkoon on rakenteilla “Nimetyt paikat” -ominaisuus, jolla voi luoda valmiita ja uudelleenkäytettäviä havaintopaikkoja.

Havaintojen haku kartalla rajaamalla lienee paras tapa saada tietyn paikan havainnot ulos. Tämä laajenee tulevaisuudessa mm. polygonihaulla. Omien havaintojen hakukin on tulossa.

Paikannimikenttään ei kannata laittaa omia tagejaa. Kenttää voidaan tulevaisuudessa käyttää esim. paikan ja koordinaattien ristiintarkistukseen, ja tagit yms. ei-paikannimet haittaisivat tätä. Paikannimikentän avulla ei voi myöskään hakea havaintoja, ainakaan toistaiseksi.

Ohessa on tallettamani havainto, joka näkyy myös Vihkon Retkilomakkeella. Sitä vain ei löydy minkäänlaisella hakutoiminnolla. Olisi hyödyllistä tietää, miksi ei?

{
  "id": "JX.6867",
  "collectionID": "HR.1747",
  "creator": "MA.241",
  "dateCreated": "2017-03-16T21:31:55+00:00",
  "dateEdited": "2017-03-22T10:10:51+00:00",
  "editor": "MA.241",
  "gatherings": [
    {
      "id": "JX.6867#2",
      "biologicalProvince": "Obb",
      "coordinatesVerbatim": "7297:3391",
      "dateBegin": "1972-06-12",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              24.618541185904,
              65.748520279242
            ],
            [
              24.640332159353,
              65.748858502015
            ],
            [
              24.639513076958,
              65.757819177671
            ],
            [
              24.617714557294,
              65.757480814135
            ],
            [
              24.618541185904,
              65.748520279242
            ]
          ]
        ]
      },
      "locality": "Pertajärvi",
      "municipality": "Kemi",
      "units": [
        {
          "id": "JX.6867#4",
          "count": "1",
          "identifications": [
            {
              "id": "JX.6867#5",
              "det": "M. Virtala",
              "detDate": "1972",
              "taxon": "Cicindela campestris",
              "taxonID": "MX.188496",
              "@type": "MY.identification",
              "identificationBasis": [
                "MY.identificationBasisPreservedSpecimen"
              ]
            }
          ],
          "lifeStage": "MY.lifeStageAdult",
          "@type": "MY.unit",
          "taxonConfidence": "MY.taxonConfidenceSure",
          "unitType": [
            "MVL.33",
            "MVL.232"
          ],
          "unitGathering": {
            "@type": "MZ.unitGathering",
            "id": "JX.6867#3"
          }
        }
      ],
      "@type": "MY.gathering"
    }
  ],
  "publicityRestrictions": "MZ.publicityRestrictionsPublic",
  "secureLevel": "MX.secureLevelNone",
  "gatheringEvent": {
    "leg": [
      "MA.241"
    ],
    "legPublic": true,
    "dateBegin": "1972-06-12",
    "@type": "MZ.gatheringEvent",
    "id": "JX.6867#1"
  },
  "@type": "MY.document",
  "@context": "http://schema.laji.fi/context/document.jsonld",
  "formID": "JX.519"
}

Kiitos. Tuleeko olemaan niin, että voi nimetä vain paikkoja, jotka perustetaan “Nimetyt paikat” -ominaisuuden lanseeraamisen jälkeen vai kannattaako jo nyt rajata havainnoille paikkoja tätä ominaisuutta silmällä pitäen?

No nyt on hyvä malli :slight_smile:
Koitan tässä vaiheessa saada perusasiat kuntoon ja jätin Document osiossa olevat tiedot pois. Tarkoitus myös lisätä gtheringiin tietoja (ainakin maakunta) kunhan saan nykyisillä tiedoilla scriptini korjattua.
Muutoksia mitä tämä aiheutti:

  • “lifeStage”: “MY.lifeStageAdult”, eli ei enään “aikuinen”
  • “taxon” minua eniten mietitytti miten sitä käyttää. Lyhyesti voisi ilmaista käyttämälläsi tavalla mutta haluan edelleen tehdä tästä myös itselleni selkokielisen. Eli scriptillä näytän edelleen itselleni havainnot html-talukkona. Siksi käytän luokkaa ja lajia.
  • “taxonconfidense” ja “omaTunnus” on nyt suoraan unitin alla, ei taxonin. (omaTunnus ei varmaan häiritse kun vastaanottopäässä tuo vaan jätetään huomiotta?)

MIkä tarkoitus noilla “@type” nimillä on?

Tällainen on testaamaton koodi nyt

{
"gatherings" : [
	{
	"municipality":"Kouvola","locality":"Valkeala",
	"coordinateSystem":"MY.coordinateSystemEtrs-tm35fin","coordinateSources":"MY.coordinateSourceKarttapaikka",
	"latitude":"6756794","longitude":"8490761",
	"units" : [ 
		{
			"recordBases":"MY.recordBasisHumanObservationPhoto",
			"image":[
				{"thumbnailURL":"tK160723_001.jpg","largeURL":"K160723_001.jpg","captureDateTime":"2016:07:23 12:11:49"},
				{"thumbnailURL":"tK160723_005.jpg","largeURL":"K160723_005.jpg","captureDateTime":"2016:07:23 12:13:22"}
			],
			"taxon":{
				"class":{"vernacularName":{"fi":"Perhoset"},"scientificName":"Lepidoptera"},
				"species":{"vernacularName":{"fi":"Keisarinviitta"},"scientificName":"Argynnis paphia"}
			},
			"omaTunnus":"52.24",
			"count":"1","lifeStage":"MY.lifeStageAdult",
			"det":"Puranen, Harri",
			"taxonConfidenceEnum":"MY.taxonConfidenceSure",
			"notes":"",
		}
	],
	}
],
"gatheringEvent": {
	"leg":["Puranen, Harri"],
	"eventDate":"2016-07-23",
}
}

Nuo liittynevät dokumentin validointiin. Dokumentin schema sallii kullekin elementille vain tietyt mahdolliset child-elementit. ‘taxon’ on kai lähinnä tarkoitettu tieteellistä nimeä varten. Jos haluaa käyttää esim. suomenkielisiä nimiä, muunnoksen voi tehdä dokumentin ulkopuolella, siis omassa ohjelmassa. Kehitysasteen ym. suhteen tämä täytyykin ehdottomasti tehdä, koska havaintoon voi tallettaa vain koodattuja arvoja. Muita vastaavia kenttiä ovat keruumenetelmä ja määritysperuste.

Jos havaintodokumenttia on tarkoitus myöhemmin tarkastella esim. Retkilomakkeen avulla, niin pelkkä scheman mukainen validointi ei riitä, vaan dokumentin täytyy lisäksi olla sellainen, että se on yhteensopiva Retkilomakkeen käyttämän UI-lomakkeen kanssa (“formID”: “JX.519”).

Eli @type rivit on sellaisia mitä minun ei tarvi huomioida.

Sivulla Tietovaraston kentät on kohdan Unit alapuolella maininta taxonVerbatim kohdassa että tieteellinen ja kansallinen nimi ok. Kohdassa reportedTaxonId kerrotaan “joko tämä tai taxonVerbatim ilmoitetaan”.

Alkaa tuntua siltä että teen ensin omaan käyttöön sopivan json tiedoston ja erikseen tietojen siirtoon tarkoitetun kun ohjeet tarkentuu. Voi huoletta lisäillä noita omia kenttiä.

Kiitoksia tiedoista.

Itse olen mielestäni jo suurinpiirtein kaikki ongelmat ratkaissut, kunhan tuo yllä mainittu hakutulosprobleemi vielä selviää… Tekemäni uuden MyInsects-ohjelman koodi on julkista, joten siitäkin voi olla apua. Ohjelma tulee piakkoin saataville. JavaScriptiä käytettäessä remote API-kutsut ovat yleensä asynkronisia, joten se pitää ohjelmoinnissa huomioida. Nykyään asynkronisuus käsitellään paljolti Promise-tekniikalla, itse olen käyttänyt Bluebird-kirjastoa (http://bluebirdjs.com/docs/getting-started.html).

Nimettyjä paikkoja voi luoda vain tulevalla nimetyt paikat -toiminnolla. Havaintoerien paikkoja ei voi sellaisiksi siirtää (ainakaan nykyisten suunnitelmien mukaan).

Itseäni hieman vieroksuttaa nimettyjen paikkojen käyttö muulloin kuin vakioitua havainnointia (esim. linjalaskennat, kartoitusruutut ja pysyven hyönteisrysien sijainnit) tehtäessä. Vaikka käyn säännöllisesti esim. Espoon Fiskarsinmäellä, liikun siellä yleensä eri reiteillä ja osa-alueilla. Yhden nimetyn paikan käyttäminen kadottaisi tämän tiedon. (Vähän samaan tapaan kuin lintuharrastajien Tiira-järjestelmässä suurin osa lintukosteikkojen havainnoista on sijoitettu yhteen pisteeseen kosteikon keskelle - siellä kun on nimetty pistemäinen paikka.)

@mattiv Unitista puuttuu recordBasis-kenttä, jonka takia sen purkaminen tietovarastoon epäonnistuu.

Tarkistetaan onko dokumentaatio tältä osin kunnossa.

Edit: On esitetty ajatus että tietovarastoon purettaisiin myös virheellisiä ja puutteellisia havaintoja nykyistä höllemmillä tarkistuksilla, mutta virheelliseksi merkittyinä. Tämä auttaisi virheiden huomaamista, nyt ne jäävät kokonaan piiloon. Esim. Hyönteistietokannassa on havaintoja virheellisillä päivämäärillä ja koordinaateilla, jotka eivät ole siksi päivittyneet tietovarastoon.

1 tykkäys

Tuo on hyvä tietää, RecordBasis-kentän olemassaolon voisi ehkä tarkistaa jo PUT/POST-toiminnossa, ja palauttaa tieto kutsuvalle ohjelmalle virheilmoituksen muodossa.