From a715ada3d26ea09a444a0512b341c1f2e2844c6d Mon Sep 17 00:00:00 2001 From: Tor-Einar Skog <tor-einar.skog@bioforsk.no> Date: Mon, 14 Mar 2016 13:50:10 +0100 Subject: [PATCH] Added test page for model descriptions Minor display change in detail template --- forecasts/templates/models/detail.html | 2 +- forecasts/templates/models/detail_test.html | 180 ++++++++++++++++++ forecasts/urls.py | 1 + forecasts/views.py | 4 + .../observations/js/observationViewMap.js | 19 +- 5 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 forecasts/templates/models/detail_test.html diff --git a/forecasts/templates/models/detail.html b/forecasts/templates/models/detail.html index 90b085bf..064c9f07 100644 --- a/forecasts/templates/models/detail.html +++ b/forecasts/templates/models/detail.html @@ -32,7 +32,7 @@ </ul> <div class="tab-content"> <div id="modelDescription" class="tab-pane fade in active"> - {{model.description|safe| linebreaks}} + {{model.description|safe}} </div> <div id="warningStatusInterpretation" class="tab-pane fade"> {{model.warning_status_interpretation|safe| linebreaks}} diff --git a/forecasts/templates/models/detail_test.html b/forecasts/templates/models/detail_test.html new file mode 100644 index 00000000..f534b002 --- /dev/null +++ b/forecasts/templates/models/detail_test.html @@ -0,0 +1,180 @@ +{% extends "base.html" %} +{% comment %} +# +# Copyright (c) 2014 NIBIO <http://www.nibio.no/>. +# +# This file is part of VIPSWeb. +# VIPSWeb is free software: you can redistribute it and/or modify +# it under the terms of the NIBIO Open Source License as published by +# NIBIO, either version 1 of the License, or (at your option) any +# later version. +# +# VIPSWeb is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# NIBIO Open Source License for more details. +# +# You should have received a copy of the NIBIO Open Source License +# along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. +# +{% endcomment %} +{% load i18n %} +{% block title%}Model output test - {% trans "Models" %}{%endblock%} +{% block content %} +<div class="col-md-3"> </div> +<div class="col-md-9"> + <h1>Model output test</h1> + <ul class="nav nav-tabs"> + <li class="active"><a data-toggle="tab" href="#modelDescription">{% trans "Description" %}</a></li> + <li><a data-toggle="tab" href="#warningStatusInterpretation">{% trans "Interpretation of warning status" %}</a></li> + <li><a data-toggle="tab" href="#modelUsage">{% trans "Technical usage" %}</a></li> + <li><a data-toggle="tab" href="#modelSampleConfig">{% trans "Sample configuration" %}</a></li> + </ul> + <div class="tab-content"> + <div id="modelDescription" class="tab-pane fade in active"> + +<h2>Epleskurv <i>(Venturia inaequalis)</i></h2> +[BILDE] +<p>Foto: R. Langnes</p> + +<h3>Modellbeskrivelse</h3> +<p>Soppen som gir epleskurv overvintrar som askosporar i gamalt bladverk på bakken. + Han kan også overvintra som mycel og konidiesporar på årsskot og knoppar, men det + har som regel lite å seia i godt stelte frukthagar. Askosporane vert kasta i regn + og kan infisere nye blad, skot og frukter når tilhøva ligg til rette for det. + Epleskurvvarslinga er i hovudsak basert på to modellar, der den eine omfattar + tilhøve for å få infeksjon. Den andre omfattar modning og spreiing av askosporar + frå gamle blad på bakken og viser kor mykje sporar som vert spreidd til ulike + tider i sesongen og døgnet. Parametrane som vert brukt i epleskurvvarslinga er + timeverdiar av temperatur (Tm/Tmf), nedbør (RR) og bladfukt (Bt/Btf/Btff). </p> +<h3>Infeksjonsmodell</h3> +<p>Det må vera fuktige blad, skot eller frukter i eit visst tidsrom for at sporane + til skurvsoppen skal kunne infisere, og kor raskt infeksjonen skjer er avhengig + av temperaturen. Det er såkalla bladfuktsensorar som indikerer kor lenge bladverket + er fuktig. Infeksjonstabellen, ofte kalla Mills' tabell, viser kor lang tid det + tar før dei første sporane har infisert ved ulike temperaturar. Ved optimal temperatur, + 16 - 22 °C, tar det 6 timar.</p> +<p>Infeksjonsfaren vert uttrykt ved hjelp av ein akkumulert verdi i form av eit tal større + enn null. Talet aukar for kvar time med bladfukt. Når talet for infeksjonsfare passerer + 90, vert varselindikatoren gul (mogleg fare). Når talet passerer 100, vert varselindikatoren + raud - eit symbol på infeksjonsfare. Viss det har vore tørt i 8 timar, vert infeksjonsfaren + nullstilt. Men viss det er tørt i mindre enn 8 timar mellom to infeksjonsperiodar, vert + timane med bladfukt i dei to periodane lagt saman når infeksjonsfaren vert rekna ut.</p> + +<h3>Sporemodningsmodell</h3> +<p>I USA er det utarbeida ein modell for askosporemodning som er tilpassa norske tilhøve. + Modninga er ein funksjon av akkumulert varmesum (sum graddagar [døgngrader], basistemperaturen + er 0°C) frå ein bestemt startdato (= når dei første sporane er modne) og reknar ut kor + lenge det er fare for infeksjon av askosporar. Ved lange periodar utan nedbør eller langvarig + nattedogg (meir enn 7 dagar) vil akkumuleringa av døgngrader stansa. Døgngradeakkumuleringa vil + starta igjen så snart det vert registrert nedbør. Mange eller lange periodar utan nedbør vil + føre til ei forlenging av sesongen for infeksjon av askosporar.</p> +<h3>RIMpro</h3> +<p>I tillegg presenterer VIPS epleskurvvarsling frå RIMpro som er utvikla og vert levert av Marc + Trapman, Bio Fruit Advies, Nederland. Dette er ei ekstern teneste, men baserer seg på klimadata + frå stasjonane til Landbruksmeteorologisk teneste. </p> + + +<h3>Tolking av varsel</h3> +<ul> + <li>Grøne boksar vil seia at det ikkje har vore tilhøve for infeksjon av epleskurv gjeldande dag.</li> + <li>Gule boksar vil seia at ein kan forventa eit skurvvarsel i løpet av dei næraste timane viss vêrstasjonen fortset å registrere bladfukt.</li> + <li>Raude boksar vil seia at det har vore tilhøve for skurvinfeksjon inneverande dag.</li> +</ul> +[Figur 1. Skjermdump av varsel] + +<p>Den blå streken viser prosent sporemodning, og når denne når 100%, er sesongen over og det + vil ikkje bli gitt fleire varsel inneverande sesong. Den blå linja er akkumulert + infeksjonsrisiko, og når denne passerer 90 og 100 vil bakgrunnen verta tilsvarande gul eller raud.</p> + +<p>Tabell 1. Infeksjonsrisiko basert på smittepress og sort.</p> +<table class="table"> + <thead> + <tr> + <th> </th> + <th colspan="3" style="text-align: center;">Resistens hos sorten</th> + </tr> + <tr> + <th>Skurvangrep året før</th> + <th>Sterk</th> + <th>Middels</th> + <th>Svak</th> + </tr> + </thead> + <tbody> + <tr> + <td style="font-weight: bold;">Lite</td> + <td>Låg</td> + <td>Låg</td> + <td>Middels</td> + </tr> + <tr> + <td style="font-weight: bold;">Middels</td> + <td>Låg</td> + <td>Middels</td> + <td>Høg</td> + </tr> + <tr> + <td style="font-weight: bold;">Mykje</td> + <td>Middels</td> + <td>Høg</td> + <td>Svært høg</td> + </tr> + </tbody> +</table> + + +<h3>Varslingssesong – oppstart og avslutning av varsel»</h3> +<p>Starttidspunkt: Grøn spiss i tidlegblomstrande eplesortar (til dømes Gravenstein og Summerred). +Sluttidspunkt: Etter enda primærsesong (når modninga av askosporar har nådd 100%)</p> + +<h3>Utprøving og validering av modellen</h3> +<h4>Nasjonalt</h4> +<p>Nesten kvart år sidan 1989 har sporekasting av epleskurv gjennom sesongen blitt registrert av + sporefeller plassert i ein eplehage på Ås. Vi har hatt liknande registreringar for nokre andre + lokalitetar i Noreg også. Sporefellene har gitt data som viser når sporekastinga startar om + våren, under kva vêrtilhøve sporane vert kasta, og når primærsesongen er slutt. Ein modell + for sporemodning publisert i USA (Gadoury og MacHardy, 1982) er validert basert på data frå + denne sporefella, og ein justert versjon av modellen tilpassa norske tilhøve er publisert + (Stensvand et al. 2005). Seinare vart ulike modellar for modning og spreiing av askosporar + hos pæreskurvsoppen (Venturia pyrina) undersøkt med data frå Noreg, Belgia og Frankrike + (Eikemo et al. 2011), og den best tilpassa modellen var den som vi i dag brukar for epleskurv. + Utfordringa med pæreskurv er at såkalla greinskurv, der soppen overvintrar som mycel og + konidiesporar i årsskota, er langt viktigare enn for epleskurv. Spreiing av konidiar frå + greinskurv varer gjerne lengre utover i vekstsesongen enn spreiing av askosporar frå det gamle bladverket på bakken.</p> + +<h4>Internasjonalt</h4> +<p>RIMpro er det verktøyet som er mest nytta internasjonalt i varsling av epleskurv. RIMpro er + basert på den same litteraturen som nemnt over, og vert årleg validert og revidert basert på ny forsking. </p> + +<h3>Referanser</h3> +<ul class="literatureReference"> + <li>Eikemo, H., Gadoury, D.M., Spotts, R.A., Villalta, O., Creemers, P., Seem, R.C. & Stensvand, A. 2011. Evaluation of six models to estimate ascospore maturation in Venturia pyrina. Plant Disease 95:279-28</li> + <li>Gadoury, D. M., and MacHardy, W. E. 1982. A model to estimate the maturity of ascospores of Venturia inaequalis. Phytopathology 72:901-904.4.</li> + <li>Stensvand, A., Eikemo, H., Gadoury, D.M. & Seem, R.C. 2005. Use of a rainfall frequency threshold to adjust a degree-day model of ascospore maturity of Venturia inaequalis. Plant Disease 89):198-202.</li> +</ul> +<h3>Kontaktpersonar</h3> +<p>Håvard Eikemo - haavard.eikemo@nibio.no<br/> +Arne Stensvand - arne.stensvand@nibio.no </p> + +<h3>Lenker til mer informasjon</h3> +<ul> + <li><a href="http://leksikon.nibio.no/vieworganism.php?organismId=1_598" target="new">Epleskurv i plantevernleksikonet</a></li> + <li><a href="http://www.rimpro.eu/" target="new">RIMpro</a></li> +</ul> + + </div> + <div id="warningStatusInterpretation" class="tab-pane fade"> + TEST + </div> + <div id="modelUsage" class="tab-pane fade"> + TEST + </div> + <div id="modelSampleConfig" class="tab-pane fade"> + <pre> +TEST + </pre> + </div> + </div> +</div> +{% endblock %} \ No newline at end of file diff --git a/forecasts/urls.py b/forecasts/urls.py index 69d3c90f..4782eb6a 100644 --- a/forecasts/urls.py +++ b/forecasts/urls.py @@ -29,6 +29,7 @@ urlpatterns = patterns('forecasts.views', #url(r'^(?P<forecast_id>\d+)/$', cache_page(60 * 15)(views.detail), name='detail'), url(r'^(?P<forecast_id>\d+)/$', (views.detail), name='detail'), url(r'^(?P<forecast_id>\d+)/(?P<latest_days>\d+)/$', (views.detail_latest_days), name='detail_latest_days'), + url(r'^models/test/$', views.models_detail_test, name='models_detail_test'), url(r'^models/(?P<model_id>\w+)/$', views.models_detail, name='models_detail'), url(r'^models/js/modelLocalNames.js', cache_page(60 * 30)(views.model_local_names_js), name='model_local_names_js'), url(r'^models/$', views.models_index, name='models_index'), diff --git a/forecasts/views.py b/forecasts/views.py index 3a679890..30bcde9b 100644 --- a/forecasts/views.py +++ b/forecasts/views.py @@ -79,6 +79,10 @@ def models_detail(request, model_id): context = {'model': model} return render(request, 'models/detail.html', context) +def models_detail_test(request): + context = {} + return render(request, 'models/detail_test.html', context) + # Serving models' local names for the forecast Map def model_local_names_js(request): models_local_names = Model.get_models_local_names_as_json() diff --git a/observations/static/observations/js/observationViewMap.js b/observations/static/observations/js/observationViewMap.js index d6908ef9..43a88c5e 100644 --- a/observations/static/observations/js/observationViewMap.js +++ b/observations/static/observations/js/observationViewMap.js @@ -44,7 +44,7 @@ var initMap = function(geoJSON, container, mapAttribution) // center to correct map projection) var view = new ol.View({ center: ol.proj.transform([10,65], 'EPSG:4326', map.getView().getProjection().getCode()), - zoom: 1, + zoom: 8, maxZoom: 8 }); map.setView(view); @@ -60,7 +60,7 @@ var initMap = function(geoJSON, container, mapAttribution) }), stroke: new ol.style.Stroke({ color: '#ff00ff', - width: 8 + width: 2 }), image: new ol.style.Circle({ radius: 7, @@ -75,6 +75,21 @@ var initMap = function(geoJSON, container, mapAttribution) dataProjection: 'EPSG:4326', featureProjection: map.getView().getProjection().getCode() }); + + // TODO: Convert small areas to points on large scale views + /** + for(var i in drawnfeatures) + { + console.log(drawnfeatures[i].getGeometryName()); + var geome = drawnfeatures[i]; + if(geome.getGeometry() instanceof ol.geom.Polygon) + { + console.log(geome.getGeometry().getArea()); + } + + } + console.log(drawnfeatures); + */ //featureOverlay.clear(true); featureOverlay.getSource().addFeatures(drawnfeatures); featureOverlay.setMap(map); -- GitLab