From bf0eb543e2deab8a1629dd2a46f8e1cd191531e1 Mon Sep 17 00:00:00 2001 From: wangjuncheng <1> Date: 星期四, 17 七月 2025 15:22:01 +0800 Subject: [PATCH] Merge branch 'master' of http://103.135.160.14:9034/r/NslWeb --- src/views/mnfz.vue | 221 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 171 insertions(+), 50 deletions(-) diff --git a/src/views/mnfz.vue b/src/views/mnfz.vue index 103a195..6a243ed 100644 --- a/src/views/mnfz.vue +++ b/src/views/mnfz.vue @@ -12,7 +12,9 @@ :waterSimulateParams="waterSimulateParams" @playbackFinished="playbackFinished" @end="endSimulate" + @isColorRender="isColorRender" /> + <LegendMNFZ class="legend" v-if="isShowLegend"></LegendMNFZ> <DebuffDetail v-if="showDebuffDetail" @open="openDetail" @@ -25,13 +27,18 @@ import { EventBus } from "@/eventBus"; // 寮曞叆浜嬩欢鎬荤嚎 import { ref, onMounted, onUnmounted, provide } from "vue"; import TimeLine from "@/components/menu/TimeLine.vue"; +import LegendMNFZ from "@/components/tools/Legend_mnfz.vue"; import Left from "./left/Left.vue"; import echartInfo from "@/components/monifangzhen/echartInfo.vue"; import DebuffDetail from "@/components/tools/DebuffDetail.vue"; import DebuffTable from "@/components/tools/DebuffTable.vue"; import { getMaxInfluenceArea } from "@/api/index"; import { createPoint, geomToGeoJSON } from "@/utils/map.js"; -import { loadAreaPolygon, clearAreaPolygon } from "@/utils/area"; +import { + loadAreaPolygon, + clearAreaPolygon, + convertToGeoJson, +} from "@/utils/area"; import colors from "@/assets/img/left/colors3.png"; @@ -40,6 +47,7 @@ import { useSimStore } from "@/store/simulation"; import { storeToRefs } from "pinia"; +import { getSafePoint } from "@/api/hpApi"; const simStore = useSimStore(); const { rightRiverShow } = storeToRefs(simStore); @@ -49,6 +57,7 @@ const showDebuffTable = ref(false); const isDynamicMode = ref(false); const isFinish = ref(true); +const isShowLegend = ref(false); const treeMap = new Map(); @@ -59,7 +68,6 @@ }); function startSimulate(form) { - // console.log("form", form); showWaterSimulate.value = true; rightRiverShow.value = true; waterSimulateParams.value = form; @@ -70,8 +78,8 @@ clearTrailLine(); removeEmergencyPoints(); removeDataSources(); + showWaterSimulate.value = false; setTimeout(() => { - showWaterSimulate.value = false; isDynamicMode.value = false; // 娓呴櫎濞佽儊瀵硅薄琛ㄦ牸鍐呭 EventBus.emit("reset-table"); @@ -134,53 +142,71 @@ }); dataSources.length = 0; } -// 閬块櫓鍦烘墍锛岀豢鑹插瘜鏂囨湰 -function addTetrahedron(visible) { - const emergencyAreaList = []; - // 杩欓噷鏄坊鍔犻伩闄╁満鎵�搴曞眰闈㈢墖 - loadAreaPolygon("/json/emergency_area.geojson", true).then((entities) => { - emergencyAreaList.push(...entities); - }); - // console.log('polygon', polygon); - let list = [ - { - name: "灏瑰缓鍗庡", - longitude: 116.593517, - latitude: 40.568391, - altitude: 528.45, - }, - // { - // name: "鑼冩尟姹熷", - // longitude: 116.591059, - // latitude: 40.574068, - // altitude: 528, - // }, - // { - // name: "鍚庡潯", - // longitude: 116.597975, - // latitude: 40.558199, - // altitude: 528, - // }, - ]; - // 杩欓噷鏄坊鍔犻伩闄╁満鎵�瀵屾枃鏈珮浜樉绀� - list.forEach((item) => { - let point = earthCtrl.factory.createRichTextPoint( - "閬块櫓鍦烘墍", - [item.longitude, item.latitude, item.altitude - 10], - { - distanceDisplayCondition: - new SmartEarth.Cesium.DistanceDisplayCondition(0, 2000), - fontColor: "#ffffff", - fontSize: 20, - }, - "0" +// 閬块櫓鍦烘墍锛岀豢鑹插瘜鏂囨湰 +async function addTetrahedron(visible) { + const emergencyAreaList = []; + + try { + let codesToFetch = []; + + // 鍒ゆ柇褰撳墠閫夋嫨鍖哄煙鏄惁涓衡�滃尯鈥� + if (simStore.selectedScheme.areaName.includes("鍖�")) { + // 浠� simStore.townCodeAll 涓嬁鍒拌鍖轰笅鐨勬墍鏈変埂闀� code + const townList = simStore.townCodeAll[simStore.selectedScheme.areaName]; + + // 鍋囪 townList 鏄竴涓暟缁勶紝閲岄潰姣忎釜鍏冪礌鏈� .code 瀛楁 + if (Array.isArray(townList)) { + codesToFetch = townList.map((item) => item.code); + } else { + console.warn("鏈壘鍒板搴旂殑涔¢晣鍒楄〃"); + return; + } + } else { + // 涓嶆槸鈥滃尯鈥濓紝灏变娇鐢ㄩ粯璁� code + codesToFetch = ["110116110218"]; + } + + // 骞跺彂璇锋眰鎵�鏈� code 鐨勯伩闄╃偣鏁版嵁 + const allRes = await Promise.all( + codesToFetch.map((code) => getSafePoint(code)) ); - console.log("point", point); - emergencyAreaList.push(point); - }); - treeMap.set("閬块櫓鍦烘墍", emergencyAreaList); + + // 鍚堝苟缁撴灉锛堝亣璁炬瘡涓� res.data 鏄竴涓暟缁勶級 + const allSafePoints = allRes.flatMap((res) => res.data); + + // 杞崲涓� GeoJSON锛堝鏋滄瘡涓� data 閮介渶瑕佸崟鐙鐞嗭級 + const geoJsonData = convertToGeoJson(allSafePoints); + + // 鍔犺浇搴曞眰闈㈢墖锛堝杈瑰舰锛� + const polygonEntities = await loadAreaPolygon(geoJsonData, true); + emergencyAreaList.push(...polygonEntities); + + // 娣诲姞缁胯壊瀵屾枃鏈爣娉� + const textPromises = allSafePoints.map(async (item) => { + const point = earthCtrl.factory.createRichTextPoint( + "閬块櫓鍦烘墍", + [item.lon, item.lat, 540], + { + distanceDisplayCondition: + new SmartEarth.Cesium.DistanceDisplayCondition(0, 2000), + fontColor: "#fff", + fontSize: 20, + }, + "0" + ); + emergencyAreaList.push(point); + }); + + await Promise.all(textPromises); + + // 灏嗙粨鏋滀繚瀛樺埌 treeMap + treeMap.set("閬块櫓鍦烘墍", emergencyAreaList); + } catch (error) { + console.error("鍔犺浇閬块櫓鍦烘墍澶辫触锛�", error); + } } + // 鍒犻櫎閬块櫓鍦烘墍鐨勫瘜鏂囨湰瀹炰綋 function removeEmergencyPoints() { const emergencyAreaList = treeMap.get("閬块櫓鍦烘墍"); // 鑾峰彇瀛樺偍鐨勯伩闄╁満鎵�瀹炰綋鍒楄〃 @@ -203,15 +229,99 @@ } } +// 铏氱嚎閬块櫓璺嚎 +// const position1 = [ +// { +// x: -2172867.1941179745, +// y: 4339567.67446477, +// z: 4125575.4386990573, +// }, +// { +// x: -2172867.1941179745, +// y: 4339567.67446477, +// z: 4125575.4386990573, +// }, +// { +// x: -2172700.396781143, +// y: 4339454.037139385, +// z: 4125736.906847591, +// }, +// { +// x: -2172744.4001612393, +// y: 4339361.421455601, +// z: 4125804.324253885, +// }, +// { +// x: -2172824.3311673277, +// y: 4339274.56533081, +// z: 4125844.432999503, +// }, +// { +// x: -2172822.298957661, +// y: 4339226.700024104, +// z: 4125896.451233209, +// }, +// { +// x: -2172776.0573917977, +// y: 4339194.843872361, +// z: 4125947.9581145854, +// }, +// { +// x: -2172755.2828807314, +// y: 4339149.410126468, +// z: 4125995.9286539108, +// }, +// { +// x: -2172660.9533022284, +// y: 4339085.401362197, +// z: 4126101.3750262205, +// }, +// { +// x: -2172613.460204307, +// y: 4339073.342332504, +// z: 4126134.479399525, +// }, +// { +// x: -2172583.664140033, +// y: 4339085.533980615, +// z: 4126140.3272964833, +// }, +// { +// x: -2172348.977405535, +// y: 4338967.122025027, +// z: 4126358.7532469626, +// }, +// { +// x: -2172276.019363938, +// y: 4338943.999121099, +// z: 4126416.339696519, +// }, +// { +// x: -2172178.064812976, +// y: 4338928.9482959965, +// z: 4126475.798078439, +// }, +// { +// x: -2172171.5451145098, +// y: 4338941.186930828, +// z: 4126466.425301899, +// }, +// { +// x: -2172177.9565195283, +// y: 4338940.424956708, +// z: 4126463.8688932694, +// }, +// ]; + ///////////////////////////// 娴佸厜绾块伩闄╄矾绾�///////////////////////////// let pathLayer = null; // 瀛樺偍鍒涘缓鐨勫浘灞� function showLine() { // 鍒涘缓鏂板浘灞� pathLayer = earthCtrl.factory.createPathLayer({ url: "/json/line.json", - color: "#008500", + color: "#00FF00", width: 12.0, - pointColor: "#FFFFFF", + pointColor: "#FFFF73", speed: 2, far: 50000, }); @@ -423,7 +533,6 @@ ///////////////////////////// 绠ご鐗堥伩闄╄矾绾�///////////////////////////// function timeUpdate(percentage) { - console.log(percentage, "ppppppppppp"); if (percentage > 99.9) { if (showDebuffDetail.value) { return; @@ -454,6 +563,10 @@ function playbackFinished(val) { isFinish.value = val; +} +function isColorRender(val) { + // console.log('杩欓噷鎵撳嵃鏄惁鏄剧ず姘翠綅鍥句緥鐨勫�硷細',val); + isShowLegend.value = val; } // 瀹氫箟鍏ㄥ眬鍙橀噺瀛樺偍褰撳墠姝e湪闂姩鐨勯潰鐗� let flashingPolygon = null; @@ -562,4 +675,12 @@ </script> <style lang="less" scoped> @import url("../assets/css/home.css"); +.legend { + // background: url("@/assets/img/right/rightbg.png"); + color: white; + position: fixed; + bottom: 6%; + right: 20%; + z-index: 3333; +} </style> -- Gitblit v1.9.3