| | |
| | | import { cartesianToXY } from "@/utils/map"; |
| | | |
| | | let water = null; |
| | | |
| | | /** |
| | | * 销毁水体模拟层 |
| | | */ |
| | | export function destoryWaterPrimitive() { |
| | | if (water) { |
| | | water.destroy(); |
| | | water = null; |
| | | console.log("Water simulation destroyed."); |
| | | } |
| | | } |
| | | // export function createWaterPrimitive(rainfall) { |
| | | // if (water) { |
| | | // water.rainfall = rainfall; |
| | | // return; |
| | | // } |
| | | // // let positionArray = [ |
| | | // // { |
| | | // // x: -2172418.4199554003, |
| | | // // y: 4339741.174232391, |
| | | // // z: 4124707.9687457774, |
| | | // // }, |
| | | // // { |
| | | // // x: -2173054.1197314346, |
| | | // // y: 4339420.091643301, |
| | | // // z: 4124710.896091218, |
| | | // // }, |
| | | // // { |
| | | // // x: -2172832.10576698, |
| | | // // y: 4338665.615224519, |
| | | // // z: 4125615.341361447, |
| | | // // }, |
| | | // // { |
| | | // // x: -2171464.714295606, |
| | | // // y: 4337884.628113293, |
| | | // // z: 4127145.919793182, |
| | | // // }, |
| | | // // { |
| | | // // x: -2170738.824348358, |
| | | // // y: 4338621.865525843, |
| | | // // z: 4126755.442367371, |
| | | // // }, |
| | | // // { |
| | | // // x: -2171270.181257778, |
| | | // // y: 4338967.11477535, |
| | | // // z: 4126117.1692552743, |
| | | // // }, |
| | | // // { |
| | | // // x: -2171120.444962885, |
| | | // // y: 4339310.237335228, |
| | | // // z: 4125837.0031219805, |
| | | // // }, |
| | | // // { |
| | | // // x: -2171911.8873938583, |
| | | // // y: 4339707.853907823, |
| | | // // z: 4125007.7462886167, |
| | | // // }, |
| | | // // { |
| | | // // x: -2171934.494218292, |
| | | // // y: 4339685.285760623, |
| | | // // z: 4125019.506657141, |
| | | // // }, |
| | | // // ]; |
| | | // // const coordinates = []; |
| | | // // positionArray.forEach((item) => { |
| | | // // const result = cartesianToXY(item); |
| | | // // coordinates.push(result.longitude, result.latitude, result.height); |
| | | // // }); |
| | | // // water = earthCtrl.analysis.createWaterSimulateGPU({ |
| | | // // //isDraw: true, // 是否绘制水面 |
| | | // // height: -5, |
| | | // // maxHeight: 2000, |
| | | // // coordinates: coordinates, |
| | | // // // coordinates: [ |
| | | // // // 116.57628914253382, 40.5654461866556, 0, 116.57628914253382, 40.552898897029046, 0, |
| | | // // // 116.60855621443835, 40.552898897029046, 0, 116.60855621443835, 40.5654461866556, 0, |
| | | // // // ], |
| | | // // // coordinates: [ |
| | | // // // 116.568865, 40.590729, 0, 116.568865, 40.533505, 0, |
| | | // // // 116.608505, 40.533505, 0, 116.608505, 40.590729, 0, |
| | | // // // ], |
| | | // // }) |
| | | // water = earthCtrl.simulate.createWaterSimulateLayer({ |
| | | // // baseUrl: "http://192.168.10.187:81/20250412", |
| | | // // baseUrl: "http://192.168.56.107:8088/simu/c2h1d", //仿真服务url |
| | | // baseUrl: "/simu/c2h1dc", //仿真服务url |
| | | // interval: 125, //两帧请求的时间间隔,单位ms |
| | | // // color: new SmartEarth.Cesium.Color.fromCssColorString('#f4a460'), |
| | | // //清水色 |
| | | // color: new SmartEarth.Cesium.Color.fromCssColorString("#D4F2E7"), |
| | | // //浑水色 |
| | | // // color: new SmartEarth.Cesium.Color.fromCssColorString('#DEB887'), |
| | | // }); |
| | | // console.log("water", water); |
| | | |
| | | // // water.rainfall = 0.0001; // 调节雨量 |
| | | // // water.rainPointMax = 2.0; // 渗水阈值 |
| | | // // water.attenuation = 0.995; // 衰减 |
| | | // // water.strenght = 0.25 // 水流强度 |
| | | // } |
| | | /** |
| | | * 创建水体模拟层 |
| | | * @param {Object} options - 可选参数 |
| | | * @param {number} options.interval - 水体模拟的时间间隔(单位:毫秒) |
| | | */ |
| | | export function createWaterPrimitive(options = {}) { |
| | | const { interval = 1000 } = options; // 默认 interval 为 1000 |
| | | |
| | | water = earthCtrl.simulate.createWaterSimulateLayer({ |
| | | baseUrl: "/simu/c2h1dc", // 仿真服务url |
| | | interval, // 动态设置 interval |
| | | color: new SmartEarth.Cesium.Color.fromCssColorString("#D4F2E7"), |
| | | }); |
| | | console.log(`Water simulation started with interval: ${interval}ms`); |
| | | } |
| | | const { interval = 1000 } = options; // 默认 interval 为 1000 |
| | | |
| | | water = earthCtrl.simulate.createWaterSimulateLayer({ |
| | | baseUrl: "/simu/c2h1dc", // 仿真服务 URL |
| | | interval, // 动态设置 interval |
| | | color: new SmartEarth.Cesium.Color.fromCssColorString("#D4F2E7"), |
| | | loop: false, // 是否循环播放 |
| | | callback: timeCallback, // 回调函数 |
| | | }); |
| | | console.log(`Water simulation started with interval: ${interval}ms`); |
| | | } |
| | | |
| | | /** |
| | | * 初始化水体模拟视图 |
| | | */ |
| | | export function initeWaterPrimitiveView() { |
| | | let view = { |
| | | destination: { |
| | |
| | | }, |
| | | }; |
| | | viewer.scene.camera.flyTo(view); |
| | | console.log("Camera view initialized for water simulation."); |
| | | } |
| | | |
| | | /** |
| | | * 暂停水体模拟 |
| | | */ |
| | | export function pauseWaterSimulation() { |
| | | if (water) { |
| | | water.pause(); |
| | | console.log("Water simulation paused."); |
| | | } else { |
| | | console.warn("No water simulation to pause."); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 恢复水体模拟 |
| | | */ |
| | | export function resumeWaterSimulation() { |
| | | if (water) { |
| | | water.resume(); |
| | | console.log("Water simulation resumed."); |
| | | } else { |
| | | console.warn("No water simulation to resume."); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 跳转到某个时间点的水面状态 |
| | | */ |
| | | export function setTimeForWaterSimulation(closestIndex) { |
| | | console.log(closestIndex,'index'); |
| | | |
| | | if (water) { |
| | | const imageList = water.getTimeList(); // 获取所有可用时间戳 |
| | | if (imageList.length === 0) { |
| | | console.warn("No timestamps available for water simulation."); |
| | | return; |
| | | } |
| | | const idx = Math.floor(Math.random() * imageList.length); // 随机选择一个时间戳 |
| | | console.log( |
| | | `Jumping to timestamp: count:[${imageList.length}], index:[${idx}]` |
| | | ); |
| | | |
| | | water.setTime(imageList[closestIndex]); // 设置时间戳,跳转到对应时刻 |
| | | } else { |
| | | console.warn("No water simulation to set time for."); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 时间戳回调函数 |
| | | * @param {number} timeStamp - 当前时间戳 |
| | | */ |
| | | function timeCallback(timeStamp) { |
| | | console.log(`Current timestamp: ${timeStamp}`); |
| | | } |