LAJI.FI-portaalin havaintohaun hakuehtojen määrittelyssä on mahdollisuus rajata havaintoja vuodenajan mukaan (otsikon “Havainnon vuodenaika” alla). Koska kyseessä on teknisesti jonkin verran haastava hakulogiikka, ajattelin kokeilla, miten hyvin se toimii käytännössä.
Määrittelemällä vuodenajan päivämääräväliksi 1.6.-31.8. tavoitteena on saada hakutuloksiin vain kesäkuukausina tehdyt havainnot. Tämä rajaus näyttää toimivan niin kuin pitääkin: hakutuloksissa on vain kesä-, heinä- ja elokuun havaintoja.
Jos haluan tarkastella havaintoja talvikuukausilta joulukuusta helmikuuhun, vuodenaikahaku ei enää toimikaan. Määrittelemällä alkupäiväksi 1.12. ja loppupäiväksi 29.2. hakutuloksissa on havaintoja kaikilta vuoden kuukausilta.
Vuodenaikahaku toimii siis oikein vain silloin kun alkupäivämäärä on pienempi kuin loppupäivämäärä. Tarvetta on kuitenkin hakea havaintoja myös vuodenvaihteen yli meneviltä talvikausilta, mihin nykyinen toteutus ei anna oikeita tuloksia.
Kiitos - tämä on joskus toiminut oikein, mutta “siivotessa” rikkoutunut.
Vanhassakin versiossa oli tosin se vika, että se jätti kokonaan huomiotta havainnot, jotka on ilmoitettu kahden vuoden puolelle: Esim havainto 30.12.2000 - 2.1.2001 jäi pois vuodenaikarajauksella 1.12. - 31.1., vaikka ei olisi pitänyt.
Uusi logiikka on seuraava:
Lähtökohta:
Havainnon vuodenaikasarkkeet täytetään hakutaluun ainoastaan, jos havainnon alku- ja loppupäivän vuosi eroavat maksimissaan yhdellä (eli alku ja loppu samalta vuodelta tai loppu alkua seuraavana vuonna)
Havainnot joissa loppu < alku eivät kelpaa hakukoneeseen ollenkaan (havaintoaika jätetään tyhjäksi ja tietue merkitään virheelliseksi)
Haut:
jos haettava vuodenaikaväli on yksi päivä ( 4.4.-4.4.) niin hav alkuvuodenaika = 4.4. JA hav loppuvuodenaika = 4.4. JA hav alku ja loppu oltava samalta vuodelta
jos haettava vuodennaikaväli ei ylitä vuotta ( 1.4. - 1.8. ) niin hav alkuvuodenaika oltava >= 1.4. JA hav loppuvuodenaika oltava <= 1.8. JA hav alku ja loppu oltava samalta vuodelta
jos haettava vuodenaikaväli ylittää vuosirajan ( 1.11. - 1.2. ) niin
jos havainnon alku- ja loppu ovat samalta vuodelta
niin hav alkuvuodenajan oltava >= 1.11. TAI hav loppuvuodenajan oltava <= 1.2.
jos eri vuosilta
niin hav alkuvuodenajan oltava >= 1.11. JA hav loppuvuodenajan oltava <= 1.2.
(Ykkös- ja kakkoskohdat ovat käytännössä sama asia, mutta toteutettu erikseen mahdollisen mitättömän suorituskykyeron vuoksi)
Kolmoskohta SQL:nä:
(
year is not null
and (
dayOfYearBegin>=?
or dayOfYearEnd<=?
)
)
or (
year is null
and dayOfYearBegin>=?
and dayOfYearEnd<=?
)
Tämä näyttäisi testipalvelussa toimivan oikein yli vuoden menevien havaintojen osalta yli vuoden menevällä vuodenaikarajauksella, ja muutenkin.
Korjaus ei ole vielä tuotannossa… En osaa sanoa milloin sinne ehtii
Foorumi on osaksi toteutettu VieKas LIFE -hankkeen osana (Finvasive LIFE, LIFE17 NAT/FI/000528).
Viekas on haitallisten vieraslajien kartoitukseen, torjuntaan ja tietoisuuden kasvattamiseen
keskittyvä hanke, joka on osittain rahoitettu EU Life-ympäristöohjelman tuella. Life
on Euroopan unionin rahoitusjärjestelmä, jonka tarkoituksena on kehittää yhteistä
ympäristöpolitiikkaa ja lainsäädäntöä
tukemalla luonnonsuojelu- ja ympäristöhankkeita eri puolilla Eurooppaa.