From df0edc253bd3e38994ca0abd871d18abd0b4040f Mon Sep 17 00:00:00 2001 From: wangjuncheng <1> Date: 星期二, 01 七月 2025 15:29:49 +0800 Subject: [PATCH] 实时模拟更新下雨情况 --- src/components/menu/TimeLine.vue | 92 ++++++++++++++++++++++++++++++++++++---------- 1 files changed, 72 insertions(+), 20 deletions(-) diff --git a/src/components/menu/TimeLine.vue b/src/components/menu/TimeLine.vue index c3d1fe4..f30f68d 100644 --- a/src/components/menu/TimeLine.vue +++ b/src/components/menu/TimeLine.vue @@ -302,7 +302,17 @@ // 濡傛灉闇�瑕佽Е鍙戞煇浜涙洿鏂板嚱鏁帮紝涔熷彲浠ヤ繚鐣� updateWaterColorByTime(); - updateWeatherByProgress(); + // updateWeatherByProgress(); + // 淇敼涓哄浐瀹氶樁娈碉紝缂撴參涓嬮洦鐨勭姸鎬� + const rainParams = { + rainSize: 0.5, + rainSpeed: 20, + rainDensity: 15, + rainColor: "#ADD8E6", + }; + console.log("瀹炴椂妯℃嫙寮�濮嬩笅闆�"); + // 璋冪敤宸ュ叿鏂规硶鏇存柊闆ㄦ晥 + mapUtils.toggleRain(rainParams, true); }, 5000); // 姣� 5 绉掓墽琛屼竴娆� } else { // 杩欓噷闈㈣繕鏄綘鐨勬挱鏀句唬鐮侊紝涓婇潰鐨刬f涓槸浜旂閽熻烦鍔ㄤ竴娆$殑瀹炴椂妯℃嫙 @@ -344,9 +354,10 @@ console.warn("selectedScheme 鎴� data 涓嶅瓨鍦�"); return; } - // 娉ㄦ剰锛氭湁鏃� data 鍙兘鏄竴涓瓧绗︿覆锛堜緥濡� JSON 瀛楃涓诧級 + let data = selectedScheme.value.data; - // 濡傛灉鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽鎴愬璞� + + // 濡傛灉鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽涓哄璞� if (typeof data === "string") { try { data = JSON.parse(data); @@ -356,28 +367,69 @@ 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, -- Gitblit v1.9.3