diff --git a/sec-beidou/src/main/resources/templates/page/device_overview.html b/sec-beidou/src/main/resources/templates/page/device_overview.html index e8f03fe4..55098ce4 100644 --- a/sec-beidou/src/main/resources/templates/page/device_overview.html +++ b/sec-beidou/src/main/resources/templates/page/device_overview.html @@ -2320,7 +2320,7 @@ function showWeatherForecast(deviceInfo) { currentWeatherDevice = deviceInfo; - currentForecastIndex = 0; + // 不在这里设置currentForecastIndex,让fetchWeatherData自动选择最近的时间点 weatherData = null; var role = /*[[${role}]]*/ 'USER'; @@ -2330,7 +2330,7 @@ if (!weatherEnabled) { layer.msg( - '天气预测功能未启用,请在地图功能菜单中开启', + '天气预测功能未启用', {time: 2000} ); return; @@ -2400,10 +2400,11 @@ var requestBody = { "lat": parseFloat(lat.toFixed(2)), "lon": parseFloat(lon.toFixed(2)), - "model": "gfs", + "model": "gfs", // 使用全球预报系统模型 "parameters": ["temp", "wind", "precip", "pressure", "rh", "windGust"], "levels": ["surface"], - "key": weatherApiKey + "key": weatherApiKey, + "hours": 72 // 请求未来72小时的预报数据,确保有足够的未来预测 }; fetch('https://api.windy.com/api/point-forecast/v2', { @@ -2422,7 +2423,43 @@ }) .then(function(data) { weatherData = data; - currentForecastIndex = 0; + + // 找到最接近当前时间的预报索引,优先选择未来时间点 + var currentTime = new Date().getTime(); + var closestIndex = 0; + var futureIndex = -1; // 记录第一个未来时间点 + var smallestDiff = Number.MAX_VALUE; + + if (weatherData.ts && weatherData.ts.length > 0) { + // 首先尝试找到第一个未来时间点 + for (var i = 0; i < weatherData.ts.length; i++) { + if (weatherData.ts[i] > currentTime) { + futureIndex = i; + break; + } + } + + // 如果找到了未来时间点,直接使用 + if (futureIndex >= 0) { + closestIndex = futureIndex; + } else { + // 否则找最接近的时间点 + for (var i = 0; i < weatherData.ts.length; i++) { + var diff = Math.abs(weatherData.ts[i] - currentTime); + if (diff < smallestDiff) { + smallestDiff = diff; + closestIndex = i; + } + } + } + + // 打印调试信息 + console.log("当前时间:", new Date(currentTime).toLocaleString()); + console.log("选择的预报时间:", new Date(weatherData.ts[closestIndex]).toLocaleString()); + console.log("所有可用时间点:", weatherData.ts.map(ts => new Date(ts).toLocaleString())); + } + + currentForecastIndex = closestIndex; displayCurrentForecast(); updateForecastNavigation(); })