Skip to content
Snippets Groups Projects

Update rognebærmøll

Merged Brita Linnestad requested to merge UpdateRognebærmøll into develop
2 files
+ 510
156
Compare changes
  • Side-by-side
  • Inline
Files
2
document.addEventListener('DOMContentLoaded', setBasis);
document.title="Rognebærmøllvarsling";
var stations = new Array();
var serverUri = "https://" + settings.vipsCoremanagerServerName;
var runUri= serverUri + "/models/DAYDEGREES/run";
class ApplefruitMoth
{
serverUri = "https://" + settings.vipsCoremanagerServerName;
runUri= this.serverUri + "/models/DAYDEGREES/run";
weatherStationDataURL = "https://lmt.nibio.no/services/rest/vips/getdata/forecastfallback";
gridDataURL = "https://weather.vips.nibio.no/rest/grid/openmeteo/";
TIMEZONE_OSLO = "Europe/Oslo";
DATE_FORMAT = "YYYY-MM-DD";
WEATHER_DATASOURCE_TYPE_COORDINATES = "coordinates";
WEATHER_DATASOURCE_TYPE_WEATHERSTATION = "weatherstation";
basisTemp = "0";
constructor() {
this.weatherStationIds = [];
this.weatherStations = [];
}
var emptyChart;
renderWeatherstations = async function () {
console.info("Load weatherstations - start")
try {
const weatherStations = await window.lmtPoiMap();
this.weatherStations = weatherStations;
this.weatherStationIds = weatherStations.map(ws => ws.id);
const select = document.getElementById('weatherStationId');
// Add an option for each weather station
this.weatherStations.forEach(station => {
const option = document.createElement('option');
option.value = station.id;
option.textContent = station.name;
select.appendChild(option);
});
console.info("Load weatherstations - finished")
} catch (error) {
console.error('Error:', error);
}
}
getSelectedWeatherstation()
{
let wsSelect = document.getElementById("weatherStationId");
return wsSelect.options[wsSelect.selectedIndex].value != "-1" ? wsSelect.options[wsSelect.selectedIndex].value : undefined;
}
getSelectedCoordinate()
{
let longitude = parseFloat(document.getElementById("longitude").value);
let latitude = parseFloat(document.getElementById("latitude").value);
return (Number.isNaN(longitude) || Number.isNaN(latitude) ? undefined : [longitude, latitude]);
}
function setBasis () {
let path = "https://lmt.nibio.no/services/rest/weatherstation/mapweatherstations";
$.getJSON(path, function( mapStations ) {
allStations = mapStations;
getSelectedDates()
{
let startDate = document.getElementById("startdate").value;
let endDate = document.getElementById("enddate").value;
allStations.sort(function(a,b) {
return a.name.toString().localeCompare(b.name.toString());
});
for(var i=0;i<allStations.length;i++){
stations[i]=([mapStations[i].weatherstationId, mapStations[i].name]);
if(!startDate)
{
let date = new Date();
date.setDate(date.getDate() - 7);
date.setDate(date.getDate());
startDate = date.toISOString().split('T')[0];
document.getElementById("startdate").value = startDate;
}
for (let i = 0; i < stations.length; i++ ) {
let option = document.createElement("option");
option.text = stations[i][1];
option.value = stations[i][0];
document.getElementById("weatherstation").appendChild(option);
if(!endDate){
let date = new Date();
date.setDate(date.getDate() + 9);
endDate = date.toISOString().split('T')[0];
document.getElementById("enddate").value = endDate;
}
emptyChart = true;
return [startDate, endDate];
setStartText();
displayResults(emptyChart);
});
}
}
getSelectedWeatherdataSourceType()
{
return document.getElementById("coordinates").checked ? this.WEATHER_DATASOURCE_TYPE_COORDINATES : document.getElementById("weatherstation").checked ? this.WEATHER_DATASOURCE_TYPE_WEATHERSTATION : undefined;
}
/**
* Calls the dayDegreemodel in the VIPS forecasting system
* Displays data when results are returned
*/
runModel () {
let selectedDates = this.getSelectedDates();
let selectedWeatherStationId = this.getSelectedWeatherstation();
let selectedCoordinate = this.getSelectedCoordinate();
if(selectedWeatherStationId == undefined && selectedCoordinate == undefined)
{
return;
}
let stationName;
let startDate = selectedDates[0];
let endDate = selectedDates[1];
function getBasis () {
try
{
let dailyDataResponse = undefined;
if(selectedWeatherStationId != undefined && this.getSelectedWeatherdataSourceType() == this.WEATHER_DATASOURCE_TYPE_WEATHERSTATION)
{
stationName = this.weatherStations.find(ws => ws.id === Number(selectedWeatherStationId)).name;
// Get the hourly data for the past X days
dailyDataResponse = fetch(
this.weatherStationDataURL + "?weatherStationId=" + selectedWeatherStationId
+ "&elementMeasurementTypes[]=TM"
+ "&timeZone=" + this.TIMEZONE_OSLO
+ "&startDate=" + startDate
+ "&endDate=" + endDate
+ "&logIntervalId=2"
);
}
else if(this.getSelectedWeatherdataSourceType() == this.WEATHER_DATASOURCE_TYPE_COORDINATES && selectedCoordinate != undefined)
{
stationName = 'valgte koordinater';
dailyDataResponse = fetch(
this.gridDataURL + "?longitude=" + selectedCoordinate[0] + "&latitude=" + selectedCoordinate[1]
+ "&elementMeasurementTypes[]=TM"
+ "&timeZone=" + document.getElementById("timezone").value
+ "&startDate=" + startDate
+ "&endDate=" + endDate
+ "&logIntervalId=2"
);
}
else
{
console.error("Location not set. Aborting.")
return;
}
dailyDataResponse
.then(response => {
if (!response.ok) {
throw new Error("Response status: " + response.status);
}
return response.json();
})
.then(dailyData => {
this.getDaydegrees(dailyData, startDate, endDate, stationName);
})
.catch(error => console.error('Error:', error));
}
catch(error)
{
console.error(error.message);
}
}
var basisTemp = "0";
var startTime = document.getElementById('startdate').value;
var endTime = document.getElementById('enddate').value;
var weatherStation = document.getElementById('weatherstation').value;
getDaydegrees (data, start, end, name) {
let modelConfig = {
"loginInfo":{
"username":"testuser",
"password":"testpass"
},
"modelId":"DAYDEGREES",
"configParameters":{
"basisTemp": this.basisTemp,
"observations": data
}
};
var temperature = [];
let request = $.ajax({
type:"POST",
url: this.runUri,
data: JSON.stringify(modelConfig),
dataType: "json",
contentType: "application/json; charset=utf-8",
})
.done((data, textStatus, jqXHR) => {
this.displayResults(data, start, end, name);
})
.fail((jqXHR, textStatus,errorThrown ) => {
alert( "Request failed: " + errorThrown );
})
;
}
weatherstationId = weatherStation;
if (startTime > endTime) {
alert("Datoen er ikke gyldig");
return false;
}
emptyChart = false;
$.getJSON("https://lmt.nibio.no/services/rest/vips/getdata/forecastfallback?weatherStationId="+weatherStation+"&elementMeasurementTypes[]=TM&logInterval=1d&startDate="+startTime+"&startTime=00&endDate="+endTime+"&endTime=23&timeZone=Europe/Oslo", function( observations ) {
$.getJSON("https://lmt.nibio.no/services/rest/weatherstation/getstation?weatherStationId="+weatherStation, function( weatherstation ) {
allObservations = weatherstation;
var name = String(weatherstation.name);
console.info(observations);
runModel(basisTemp, observations, name, startTime, endTime);
});
});
}
/**
* Calls the dayDegreemodel in the VIPS forecasting system
* Displays data when results are returned
*/
function runModel (basisTemp, data, name, start, end) {
var modelConfig = {
"loginInfo":{
"username":"testuser",
"password":"testpass"
},
"modelId":"DAYDEGREES",
"configParameters":{
"basisTemp": basisTemp,
"observations": data
}
};
setStartText () {
document.getElementById("textInfo").innerText = "";
let infotext = document.createElement("p");
infotext = "<p>Varmesum, med basistemperatur 0 °C, vert rekna ut frå middeltemperaturen 2 m over bakken for den valde vêrstasjonen. </p>";
document.getElementById("textInfo").innerHTML=infotext;
}
var request = $.ajax({
type:"POST",
url: runUri,
data: JSON.stringify(modelConfig),
dataType: "json",
contentType: "application/json; charset=utf-8",
})
.done(function(data, textStatus, jqXHR) {
displayResults(data, basisTemp, name, start, end);
})
.fail(function( jqXHR, textStatus,errorThrown ) {
alert( "Request failed: " + errorThrown );
})
;
}
function displayResults(data, basisTemp, name, start, end) {
displayResults (data, start, end, name) {
let date = new Array();
let series = [];
@@ -117,11 +213,12 @@ function displayResults(data, basisTemp, name, start, end) {
let temperature = new Array();
let forecast = new Array();
let emptyChart = false;
if(!emptyChart) {
for (var i = 0; i < data.length; i++){
for (let i = 0; i < data.length; i++){
var localTime = new Date(data[i].validTimeStart);
let localTime = new Date(data[i].validTimeStart);
const offset = localTime.getTimezoneOffset()
localTime= new Date(localTime.getTime() - (offset*60*1000))
@@ -135,6 +232,7 @@ function displayResults(data, basisTemp, name, start, end) {
localTime = localTime.toISOString().split('T')[0];
time.push(localTime);
}
// Fill the gap between temperature and forecast
let index = temperature.length-1;
forecast[index]=temperature[index];
@@ -152,8 +250,8 @@ function displayResults(data, basisTemp, name, start, end) {
document.getElementById("textInfo").innerText = "";
let infotext = document.createElement("p");
var text1 = "<p>Varmesum, med basistemperatur 0 °C, rekna ut frå middeltemperaturen 2 m over bakken for den valde vêrstasjonen. </p>";
var text2 = "<p><b>" + lastValue + "</b> døgngrader\n\n</p>";
let text1 = "<p>Varmesum, med basistemperatur 0 °C, rekna ut frå middeltemperaturen 2 m over bakken for den valde vêrstasjonen. </p>";
let text2 = "<p><b>" + lastValue + "</b> døgngrader\n\n</p>";
infotext = text1 + text2;
@@ -163,24 +261,20 @@ function displayResults(data, basisTemp, name, start, end) {
for (var i = 0; i < 10; i++){
time.push(null);
forecast.push(null);
name = 'Alvdal';
name = '-';
start = '-';
end = '-';
}
}
var chartExist = Chart.getChart("daydegreesum");
let chartExist = Chart.getChart("daydegreesum");
if(chartExist != undefined){
chartExist.destroy();
}
var ctx = document.getElementById("daydegreesum").getContext('2d');
let ctx = document.getElementById("daydegreesum").getContext('2d');
series[0] = {
label: "Døgngrader",
data: temperature,
@@ -203,16 +297,16 @@ function displayResults(data, basisTemp, name, start, end) {
spanGaps: true
};
var data = {
let dataset = {
labels: time,
datasets: series
};
var text = String("Varmesum for " + name + " i perioden " + start + " til " + end );
let text = String("Varmesum for " + name + " i perioden " + start + " til " + end );
new Chart(ctx, {
type: 'line',
data: data,
data: dataset,
options: {
scales: {
x: {
@@ -328,19 +422,9 @@ function displayResults(data, basisTemp, name, start, end) {
}
}
});
}
function setStartText (){
document.getElementById("textInfo").innerText = "";
let infotext = document.createElement("p");
infotext = "<p>Varmesum, med basistemperatur 0 °C, vert rekna ut frå middeltemperaturen 2 m over bakken for den valde vêrstasjonen. </p>";
document.getElementById("textInfo").innerHTML=infotext;
}
}
export default ApplefruitMoth;
Loading