From 9aed93946a567c874c847b4d3e356058b0455ae7 Mon Sep 17 00:00:00 2001 From: wangjuncheng <1> Date: 星期二, 01 七月 2025 16:13:22 +0800 Subject: [PATCH] 2 --- src/components/menu/TimeLine.vue | 121 +++++++++++++++++++++++++++------------ 1 files changed, 83 insertions(+), 38 deletions(-) diff --git a/src/components/menu/TimeLine.vue b/src/components/menu/TimeLine.vue index 052f870..6b1e748 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 鍗曚綅锛屾棤娉曡繘琛岃浆鎹�"); + + // 鍒ゆ柇 rainfalls 鏄惁涓哄璞★紝濡傛灉鏄垯杞垚鏁扮粍 + let rainfalls = data.rainfalls; + if (typeof rainfalls === "object" && !Array.isArray(rainfalls)) { + rainfalls = Object.values(rainfalls); + console.warn("鈿狅笍 rainfalls 鏄璞★紝宸茶浆鎹负鏁扮粍"); } - const rainfallList = data.rainfalls; - console.log("鏈�缁堢殑 rainfallList:", rainfallList); - rainTotalInfo.value = rainfallList; - calculateTimeStep(rainTotalInfo.value); - // 浣跨敤绀轰緥 + + // 鎸夊皬鏃惰仛鍚堥檷闆ㄦ暟鎹� + 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, @@ -616,20 +668,20 @@ colorState.lastTime = currentTime.value; // ====== 鏂板锛氬湪 updateWaterColor 鍓嶆墦鍗板綋鍓嶄俊鎭� ====== // // 鑾峰彇褰撳墠绱闄嶉洦閲� - // let currentTotal = null; - // const baseTimestamp = new Date(rainTotalInfo.value[0].time).getTime(); - // const currentTimeMs = baseTimestamp + currentTime.value * 1000; + let currentTotal = null; + const baseTimestamp = new Date(rainTotalInfo.value[0].time).getTime(); + const currentTimeMs = baseTimestamp + currentTime.value * 1000; - // // 鎵惧埌鏈�鎺ヨ繎鐨勯檷闆ㄦ暟鎹偣 - // for (let i = rainTotalInfo.value.length - 1; i >= 0; i--) { - // const dataTimeMs = new Date(rainTotalInfo.value[i].time).getTime(); - // if (dataTimeMs <= currentTimeMs) { - // currentTotal = rainTotalInfo.value[i].total; - // break; - // } - // } + // 鎵惧埌鏈�鎺ヨ繎鐨勯檷闆ㄦ暟鎹偣 + for (let i = rainTotalInfo.value.length - 1; i >= 0; i--) { + const dataTimeMs = new Date(rainTotalInfo.value[i].time).getTime(); + if (dataTimeMs <= currentTimeMs) { + currentTotal = rainTotalInfo.value[i].total; + break; + } + } - // // 鎵撳嵃淇℃伅 + // 鎵撳嵃淇℃伅 // console.log("========================================"); // console.log(`銆愭椂闂存埑銆�: ${new Date(currentTimeMs).toLocaleString()}`); // console.log(`銆愮疮璁¢檷闆ㄩ噺 R銆�: ${currentTotal !== null ? currentTotal.toFixed(2) : '鏈煡'} mm`); @@ -879,7 +931,6 @@ } // console.log('鑾峰彇鍒扮殑 serviceName:', serviceInfo); - // 鏍规嵁 layer.json 鑾峰彇鏃堕棿杞翠俊鎭� const { waterTimestamps: timestamps, @@ -904,7 +955,6 @@ "YYYY-MM-DD HH:mm:ss" ); } - minFlowRate = watersMinHeight; maxFlowRate = watersMaxHeight; } catch (error) { @@ -921,9 +971,7 @@ // 鍥犱负杩欎釜鍑芥暟瀹炴椂妯℃嫙鐩戝惉涔熼渶瑕佷娇鐢紝鎵�浠ュ皝瑁呬簡涓�涓嚱鏁� await initializeSimulationData(); }); - const shouldAutoPlay = ref(false); - // 鐩戝惉 layerDate 鍙樺寲鍚庢爣璁板噯澶囨挱鏀� watch( () => layerDate.value, @@ -934,7 +982,6 @@ }, { deep: true } ); - // 绛夊緟 finishPlay 鎴愬姛鍚庡啀鎾斁 watchEffect(() => { if (shouldAutoPlay.value && finishPlay.value && !isPlaying.value) { @@ -943,7 +990,6 @@ shouldAutoPlay.value = false; } }); - // 鏍规嵁杩斿洖鏁版嵁鐨勪釜鏁板幓娓叉煋鏃堕棿杞� function updateTimelineRange() { if (waterTimestamps.value.length > 0) { @@ -954,7 +1000,6 @@ duration.value = (last - first) / 1000; // 姣杞 } } - onBeforeUnmount(() => { stopPlayback(); destoryWaterPrimitive(); -- Gitblit v1.9.3