| | |
| | | |
| | | // 如果需要触发某些更新函数,也可以保留 |
| | | updateWaterColorByTime(); |
| | | updateWeatherByProgress(); |
| | | // updateWeatherByProgress(); |
| | | // 修改为固定阶段,缓慢下雨的状态 |
| | | const rainParams = { |
| | | rainSize: 0.5, |
| | | rainSpeed: 20, |
| | | rainDensity: 15, |
| | | rainColor: "#ADD8E6", |
| | | }; |
| | | console.log("实时模拟开始下雨"); |
| | | // 调用工具方法更新雨效 |
| | | mapUtils.toggleRain(rainParams, true); |
| | | }, 5000); // 每 5 秒执行一次 |
| | | } else { |
| | | // 这里面还是你的播放代码,上面的if中是五秒钟跳动一次的实时模拟 |
| | |
| | | console.warn("selectedScheme 或 data 不存在"); |
| | | return; |
| | | } |
| | | // 注意:有时 data 可能是一个字符串(例如 JSON 字符串) |
| | | |
| | | let data = selectedScheme.value.data; |
| | | // 如果是字符串,则尝试解析成对象 |
| | | |
| | | // 如果是字符串,则尝试解析为对象 |
| | | if (typeof data === "string") { |
| | | try { |
| | | data = JSON.parse(data); |
| | |
| | | return; |
| | | } |
| | | } |
| | | // 打印降雨强度的单位 |
| | | |
| | | console.log("降雨强度的单位是:", data.intensityUnit); |
| | | // 根据 intensityUnit 调整 rainfalls 中的 intensity 值 |
| | | // if (data.intensityUnit === "mm/min") { |
| | | // data.rainfalls.forEach((r) => (r.intensity *= 60)); |
| | | // console.log("将 mm/min 转换为 mm/h 后的 rainfalls:", data.rainfalls); |
| | | // } else if (data.intensityUnit === "mm/5min") { |
| | | // data.rainfalls.forEach((r) => (r.intensity *= 12)); |
| | | // console.log("将 mm/5min 转换为 mm/h 后的 rainfalls:", data.rainfalls); |
| | | // } else if (data.intensityUnit !== "mm/h") { |
| | | // console.warn("未知的 intensity 单位,无法进行转换"); |
| | | // } |
| | | const rainfallList = data.rainfalls; |
| | | console.log("最终的 rainfallList:", rainfallList); |
| | | rainTotalInfo.value = rainfallList; |
| | | calculateTimeStep(rainTotalInfo.value); |
| | | // 使用示例 |
| | | |
| | | // 判断 rainfalls 是否为对象,如果是则转成数组 |
| | | let rainfalls = data.rainfalls; |
| | | if (typeof rainfalls === "object" && !Array.isArray(rainfalls)) { |
| | | rainfalls = Object.values(rainfalls); |
| | | console.warn("⚠️ rainfalls 是对象,已转换为数组"); |
| | | } |
| | | |
| | | // 按小时聚合降雨数据 |
| | | const hourlyRainfallMap = {}; |
| | | |
| | | rainfalls.forEach((record) => { |
| | | const originalTime = new Date(record.time); |
| | | if (isNaN(originalTime.getTime())) { |
| | | console.warn("无效的时间格式:", record.time); |
| | | return; |
| | | } |
| | | |
| | | // 构造“小时”级别的时间键,比如:2024-08-25 20:00:00 |
| | | const hourKey = new Date( |
| | | originalTime.getFullYear(), |
| | | originalTime.getMonth(), |
| | | originalTime.getDate(), |
| | | originalTime.getHours() |
| | | ); |
| | | |
| | | const hourStr = hourKey.toISOString().slice(0, 16).replace("T", " "); |
| | | |
| | | if (!hourlyRainfallMap[hourStr]) { |
| | | hourlyRainfallMap[hourStr] = { |
| | | intensity: 0, |
| | | time: hourStr, |
| | | total: record.total, // 默认用第一个记录的 total |
| | | }; |
| | | } |
| | | |
| | | hourlyRainfallMap[hourStr].intensity += record.intensity; |
| | | // 取最大的 total(因为是累积值) |
| | | if (record.total > hourlyRainfallMap[hourStr].total) { |
| | | hourlyRainfallMap[hourStr].total = record.total; |
| | | } |
| | | }); |
| | | |
| | | // 转换 map 成数组并排序 |
| | | const hourlyRainfallList = Object.values(hourlyRainfallMap).sort((a, b) => |
| | | a.time.localeCompare(b.time) |
| | | ); |
| | | |
| | | console.log("✅ 按小时聚合后的降雨数据:", hourlyRainfallList); |
| | | |
| | | // 设置全局变量 |
| | | rainTotalInfo.value = hourlyRainfallList; |
| | | |
| | | // 计算时间步长 |
| | | timeStepInfo = calculateTimeStep(rainTotalInfo.value); |
| | | |
| | | // 提取 intensity 值 |
| | | rainFallValues.value = rainfallList.map((r) => r.intensity); |
| | | rainFallValues.value = hourlyRainfallList.map((r) => r.intensity); |
| | | minRainValue.value = Math.min(...rainFallValues.value); |
| | | maxRainValue.value = Math.max(...rainFallValues.value); |
| | | |
| | | console.log( |
| | | "当前方案下最小雨量和最大雨量:", |
| | | minRainValue.value, |