LAJI.FI-vuodenaikahaku toimii väärin

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.

1 tykkäys

Toiminee, jos talven jakaa kahteen osaan: 1.–31.12. ja 1.1.–29.2.

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

Esko / Lajitietokeskus

1 tykkäys

Päivitin ylle korjatun logiikan – siinä oli jonkin aikaa edelleen pielessä oleva logiikka. Nyt pitäisi olla kunnossa?

1 tykkäys