本人小白一枚,文章如有问题还请各位大神评论区指出。整体实现是参考SuperMap iClient3D for Cesium的淹没分析功能源码~

文章目录

前言

一、主要功能

二、具体实现

1.HTML主要结构

2.javascript


前言

SuperMap iClient3D for Cesium提供了淹没分析的方法——FloodAnalysis3D,但是本文主要是采用DrawHandler绘制方法类结合setInterval定时器实现淹没动画,为了显示效果更加美观,代码还采用了HypsometricSetting分层设色类,实现根据地理高程实现不同颜色的过度渲染效果。

一、主要功能

效果图:

通过设置淹没分析的起始高度、最大淹没高度、淹没速度三个参数,然后绘制淹没区域即可实现淹没分析的动画效果。

二、具体实现

1.HTML主要结构

<div class="btnBox"><span><p>起始高度(米):</p><el-input size="small" v-model="minHeight"/></span><span><p>最大高度(米):</p><el-input size="small" v-model="maxHeight"/></span><span><p>淹没速度(米/秒):</p><el-input size="small" v-model="speed"/></span><el-button type="primary" @click="begin">开 始</el-button><el-button type="primary" @click="clear">清 除</el-button>
</div>

2.javascript

代码如下:

<script setup>
import { ref, onBeforeUnmount } from "vue";
import { useStore } from "vuex";const store = useStore();
let minHeight = ref(300);
let maxHeight = ref(9000);
let speed = ref(500);
// 初始化数据
var interval = null; //定时器
var scene = viewer.scene;
let hypFlood;function init() {hypFlood = new Cesium.HypsometricSetting(); //分层设色类。let floodColorTable = new Cesium.ColorTable();colorTableInit(floodColorTable);hypFlood.DisplayMode = Cesium.HypsometricSettingEnum.DisplayMode.FACE; //获取或设置显示模式hypFlood._lineColor = new Cesium.Color(1.0, 0.0, 0.0, 1.0);hypFlood.MinVisibleValue = 0; //获取或设置最小可见值hypFlood.MaxVisibleValue = 0;hypFlood.ColorTableMinKey = 1; //获取颜色表的最小key值。hypFlood.ColorTableMaxKey = 9000;hypFlood.ColorTable = floodColorTable; //获取或设置颜色表。hypFlood.Opacity = 0.8; //获取或设置不透明度hypFlood.LineInterval = 200.0; //获取或设置等值线的间隔。
}
init();// 默认设置淹没分析颜色
function colorTableInit(floodColorTable) {floodColorTable.insert(//颜色表插入新的项。9000,new Cesium.Color(210 / 255, 15 / 255, 15 / 255));floodColorTable.insert(6000, new Cesium.Color(221 / 255, 224 / 255, 7 / 255));floodColorTable.insert(5000, new Cesium.Color(20 / 255, 187 / 255, 18 / 255));floodColorTable.insert(4000, new Cesium.Color(0, 161 / 255, 1));floodColorTable.insert(0, new Cesium.Color(9 / 255, 9 / 255, 212 / 255));
}//绘制多边形
var polygonHandler = new Cesium.DrawHandler(viewer, Cesium.DrawMode.Polygon);polygonHandler.drawEvt.addEventListener(function (polygon) {polygonHandler.polygon.show = false;polygonHandler.polyline.show = false;var array = [].concat(polygon.object.positions);let positions = [];for (var i = 0, len = array.length; i < len; i++) {var cartographic = Cesium.Cartographic.fromCartesian(array[i]);var longitude = Cesium.Math.toDegrees(cartographic.longitude);var latitude = Cesium.Math.toDegrees(cartographic.latitude);var h = cartographic.height;if (positions.indexOf(longitude) == -1 &&positions.indexOf(latitude) == -1) {positions.push(longitude);positions.push(latitude);positions.push(h);}}floodUpdate(positions);polygonHandler.deactivate();
});// 更新淹没分析
function floodUpdate(positions) {hypFlood.CoverageArea = positions; //获取或设置分层设色的区域。let maxValue = parseInt(maxHeight.value);let minValue = parseInt(minHeight.value);let currentHeight = minValue;hypFlood.MinVisibleValue = minValue;interval = self.setInterval("flood()", 100);currentHeight = minValue;window.flood = () => {if (currentHeight > maxValue) {self.clearInterval(interval);return;}hypFlood.MaxVisibleValue = currentHeight;viewer.scene.globe.HypsometricSetting = {hypsometricSetting: hypFlood,analysisMode: Cesium.HypsometricSettingEnum.AnalysisRegionMode.ARM_REGION,};currentHeight += parseInt(speed.value) / 10;};
}// 激活绘制
function begin() {clear();polygonHandler.activate();
}// 清除
function clear() {self.clearInterval(interval);polygonHandler.deactivate();polygonHandler.clear();viewer.scene.globe.HypsometricSetting = undefined;
}
onBeforeUnmount(() => {clear();
});
if (!scene.pickPositionSupported) {alert("不支持深度拾取,淹没分析功能无法使用(无法交互绘制面)!");
}
</script>

vue3+SuperMap iClient3D for Cesium实现淹没分析功能相关推荐

  1. vue3+SuperMap iClient3D for Cesium实现可视域分析功能

    本人小白一枚,文章如有问题还请各位大神评论区指出.整体实现是参考SuperMap iClient3D for Cesium的可视域分析功能源码~ 文章目录 前言 一.主要功能 二.使用步骤 1.HTM ...

  2. SuperMap iClient3D for WebGL教程- 淹没分析

    作者:桔子 本文同步更新于:https://www.jianshu.com/p/328fb79eec5e 淹没分析是指根据指定的最大.最小高程值及淹没速度,动态模拟某区域水位由最小高程涨到最大高程的淹 ...

  3. cesium 水位模拟_SuperMap iClient3D for WebGL教程- 淹没分析

    淹没分析是指根据指定的最大.最小高程值及淹没速度,动态模拟某区域水位由最小高程涨到最大高程的淹没过程,是GIS分析中常用的功能,常用于模拟洪涝灾害过程.在SuperMap的三维产品中淹没分析是通过分层 ...

  4. SuperMap iClient3D for Cesium视频投放

    1 概述 把监控视频投放到三维实景中,可以将静态的三维数据实现动态的显示效果,可以极大方便一些区域的查看和监管,该文章记录该投放的实现过程,以供入门参考. 效果如下: 2 具体步骤: 2.1 软件安装 ...

  5. cesium开发淹没分析_淹没在Web开发行业的工具中

    cesium开发淹没分析 Every once in a while in this industry we need a reminder that our trade as front-end d ...

  6. Cesium(六)淹没分析(polygon版本)

    淹没分析是三维分析常用的的其中一种分析,本文借鉴已有资料通过在地形图上动态拉伸polygon达到淹没分析的效果,下面给出淹没分析的主要代码: 效果: 一.容器创建&添加地形服务. var cu ...

  7. cesium添加淹没分析测量面积

    var viewer=ysc.createNormalCesium("cesiumContainer",{         //添加cesium中的基础属性         inf ...

  8. vue + cesium 洪水淹没分析完整示例

    目录 一.洪水淹没分析效果 二.部分核心代码 1.绘制多边形范围 2.处理多边形区域的最大和最小高程 三.JS完整代码 一.洪水淹没分析效果 二.部分核心代码 1.绘制多边形范围 /*** @auth ...

  9. cesium实现淹没分析(基于polygon)并解决屏闪

    文章目录 1.实现效果 2.实现方法 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 基于面状entity的extrudedHeight高度来拉伸面,实现简单的淹没分析效果. 但 ...

最新文章

  1. 如何学好 Linux、C++,并搞定 BAT 面试 作者/分享人:天千
  2. 玩转MaxCompute studio SQL编辑器
  3. 【机器视觉】 fuzzy_measure_pairing算子
  4. 1.8 编程基础之多维数组 09 矩阵乘法 6分 python
  5. Linux操作系统中GDB工具常见用法(一)
  6. 从理论到工程实践——用户画像入门宝典
  7. 一名数据分析师的工作职责和需要掌握的基本知识
  8. 在别人的空间里看到的收藏在这里
  9. MLP,GCN,GAT,GraphSAGE, GAE, Pooling,DiffPool
  10. 找工作笔试面试那些事儿(14)---轻松一下,谈谈面试注意的点
  11. python PIL 将两个图片合成一张
  12. 安卓模拟器端口大全 - 夜神逍遥MuMu雷电蓝叠海马玩
  13. 小米校招产品作业解读:设计一款日记APP
  14. [Linux Audio Driver] 移植外部CODEC常见编译报错解决(持续更新)
  15. php拼多多api接口,api.php
  16. Win8下如何安装Win7 or Win7下如何安装win8?
  17. Android手柄如何玩gta5,gta5手机怎么拿出来
  18. [图像形态学操作]——腐蚀和膨胀、开闭运算、黑帽礼帽
  19. 积分兑换如何实现的呢
  20. 在线画图网站Graph Editor的使用

热门文章

  1. Js 简易iphone计算器
  2. 关于iOS 的一些总结
  3. 【机器学习】【线性代数 for PCA】矩阵与对角阵相似、 一般矩阵的相似对角化、实对称矩阵的相似对角化
  4. MySQL数据库实验三 MySQL查询
  5. oracle误删记录,oracle误删数据恢复方法小结
  6. [组图]一切从零开始 Symbian智能机之软件入门(转)
  7. 国庆去哪里玩比较好?
  8. 热评云厂商:东华软件11.5亿元,成立独立子公司专注云转型
  9. 电商会员管理系统_vip会员外贸电商模式的实质?
  10. 核磁共振成像快速成像技术——杨正汉(5)