Cesium-01:Vue 中基础使用

Cesium-02:飞机模型简单点对点飞行

Cesium-03:洪水淹没

前言

最开始想做洪水淹没的话,查了一些资料。又基于不同的实现的,如 ArcScene 实现,有基于 Cesium 实现。

对比分析了下,ArcGIS 下的实现主要是软件中,如果想自己代码实现的话,还要借助 Arc Engine。加上自己前面也使用过 Cesium ,这里就选择了 Cesium 去做。

这里特别说明下,所做的洪水淹没,是简单的水面的抬升,没有降水、水流等算法分析在里面(了解过一些算法,要对接的话还有很多工作要做)。

一、数据准备

准备数据

  1、底图卫星数据,这里选用天地图卫星切片;

  2、DEM 数据,直接下载的哨兵数据(数据下载地址 ASF Data Search (alaska.edu),可以参考这里

  3、DEM 切片,并发布服务

处理过程中注意点

  1、哨兵数据下载网站,需要注册;

  2、没有选择自己下载卫星数据,是因为分辨率、处理等问题,不如直接使用在线的天地图卫星;

  3、DEM 切片使用的是 CesiumLab,但发布的 DEM 服务,可以使用 CesiumLab 也可以自己发布

如果自己发布 DEM 服务的话,在 DEM 切片时,选择“散列”,如下图:

Nginx 发布 DEM 切片,和一般的 Web 站点的配置一样,如下:

  1. server {
  2. listen 9001;
  3. root ./www/hzDEMcache;
  4. # Add index.php to the list if you are using PHP
  5. index index.html index.htm;
  6. server_name _;
  7. location / {
  8. # First attempt to serve request as file, then
  9. # as directory, then fall back to displaying a 404.
  10. try_files $uri $uri/ =404;
  11. add_header Access-Control-Allow-Origin *; # 跨域设置
  12. }
  13. add_header Cache-Control "no-cache,must-revalidate"; # 跨域设置
  14. }

在配置完成后,浏览器中打开  http://localhost:9001/layer.json,没有问题的话,证明发布成功!

数据都完成后,可以进行开发啦!

二、效果实现

下面两个问题时间:21年11月时没有问题,22年11月出现下面两个问题。

1、Cesium 版本问题

  前几篇文章中,使用的 Cesium 是1.89版本。这个项目在初始化时,直接安装 Cesium 包,安装的是 1.99 版本。启动后项目报错,".?" 运算符不能识别。

  经过分析,新版的 Cesium 对 TS 的支持更好,其中一些使用到了 TS 的新语法。这个对于使用 Vue3 + TS 会更友好。

  因当前使用的还是 Vue2 ,切没有 TS,所以版本回退到了 1.89 ,再次运行正常!

2、token

  在使用 Cesium 自带的底图、高程时,直接报错,没有显示。看了官网的文档,发现现在需要 token。

  所以要先在官网注册,并申请 token。在使用地图前赋值 token:

  1. Cesium.Ion.defaultAccessToken = 'token'

实现

底图代码:

  1. this.cesiumViewer = new Cesium.Viewer('cesiumContainer', {
  2. infoBox: false,
  3. // terrainProvider: Cesium.createWorldTerrain(), // Cesium 自带地形数据
  4. // terrainProvider: new Cesium.CesiumTerrainProvider({ url: 'http://localhost:9003/terrain/LktyW4LU' }), // cesiumLab 切的地形数据服务
  5. terrainProvider: new Cesium.CesiumTerrainProvider({ url: 'http://localhost:9001/' }), // nginx 代理切片,最后要带上"/"
  6. baseLayerPicker: true, // 图层选择器
  7. // 不设置,默认使用自带底图,需要 token
  8. imageryProvider: new Cesium.UrlTemplateImageryProvider({
  9. // url 和 openlayer 使用区别,t{0-7}.tianditu ,这里需要指定数值
  10. url: 'http://t1.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=07d4e04324b413cb0582fa99fe833cd3'
  11. })
  12. })

洪水淹没代码:这里使用的是  Cesium.CallbackProperty,直接修改 extrudedHeight 会出现闪烁的情况

  1. drawWater() {
  2. this.showWater = true
  3. this.waterEntity && this.cesiumViewer.entities.remove(this.waterEntity)
  4. const waterCoord = [119.642769, 30.361905, 100, 119.591604, 30.448757, 100, 119.695767, 30.488232, 100, 119.748406, 30.395983, 100]
  5.  
  6. let startHeight = 100
  7. const targetHeight = 500
  8. this.waterEntity = this.cesiumViewer.entities.add({
  9. polygon: {
  10. hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(waterCoord),
  11. material: Cesium.Color.fromBytes(64, 157, 253, 200),
  12. perPositionHeight: true,
  13. extrudedHeight: new Cesium.CallbackProperty(() => { return startHeight }, false)
  14. }
  15. })
  16. const waterInterval = setInterval(() => {
  17. if (startHeight < targetHeight) {
  18. startHeight += 10
  19. if (startHeight >= targetHeight) {
  20. startHeight = targetHeight
  21. clearInterval(waterInterval)
  22. this.showWater = false
  23. }
  24. // 使用该方式会闪烁,改用 Cesium.CallbackProperty 平滑
  25. // this.waterEntity.polygon.extrudedHeight.setValue(startHeight)
  26. }
  27. }, 100)
  28. }

效果动图:

Cesium-03:洪水淹没的更多相关文章

  1. cesium 水面、淹没 效果

    水面效果 参考: http://cesiumcn.org/topic/158.html http://api.rivermap.cn/cesium/rivermap/map.html https:// ...

  2. 基于cesium的GIS洪水淹没三维模拟系统

    简介: “FloodFreeth3D”是一款对Mike11软件计算的洪水演进结果使用cesium进行淹没演进三维模拟的软件产品.   技术参数: 1. B/S架构,支持多Web浏览器(ie.chrom ...

  3. Linux编程之ICMP洪水攻击

    我的上一篇文章<Linux编程之PING的实现>里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?这里我将介绍ICMP另一个很有 ...

  4. GRYZ 模 拟 赛 系 列 之 迷 宫(不就是个洪水)

    - 迷 宫 (maze.cpp/c/pas) Description Karles 和朋友到迷宫玩耍,没想到遇上了 10000000 年一次的大洪水,好在 Karles 是一个喜 欢思考的人,他发现迷 ...

  5. UVa 815 洪水!

    https://vjudge.net/problem/UVA-815 题意:一个n*m的方格区域,共有n*m个方格,每个方格是边长为10米的正方形,整个区域的外围是无限高的高墙,给出这n*m个方格的初 ...

  6. BFS洪水

    试题描述: 已经连续下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图 ...

  7. codevs3411 洪水

    题目描述 Description 小浣熊松松和朋友到野外露营,没想到遇上了π年一次的大洪水,好在松松是一只爱观察的小浣熊,他发现露营地的地形和洪水有如下性质: ①露营地可以被看做是一个N*M的矩形方阵 ...

  8. 为什么你找不到优秀的GISer?

    每年的三四月是招聘的黄金时节,故有金三银四的说法.求贤纳才对于处在发展上升期的公司来说,是全年性的常态化工作.只是这俩月市场上求职者数量较别的月份多.基数大了,淘到金子的概率自然会增加.大部分公司的伯 ...

  9. 水灾(sliker.cpp/c/pas) 1000MS 64MB

    大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上 ...

  10. 2013年arcgis培训

    关于开展“GIS空间分析及应用案例解析”培训班的通知   各企事业单位: 随着信息技术的发展,地理信息系统(简称GIS)产业异军突起,在国民经济各个行业中的应用日益广泛,物联网.智慧地球.3S技术等等 ...

随机推荐

  1. 使用『jQuery』『原生js』制作一个选项卡盒子 —— { }

    效果 HTML 部分 <body> <div id="main-box"> <div id="left-nav"></ ...

  2. Elasticsearch-shell脚本实现定时删除指定时间以前索引

    〇.前言 因为elastiflow的数据量还是挺大的,接入了两台交换机的flow数据量已经开始有点大了.所以得写个脚本专门来清理索引 一.如何使用elastic的API 1.手动查询所有索引 在ELK ...

  3. 配置联想IMM使用AD账户登录

    IMM是联想(IBM)服务器的管理卡Integrated Management Module的缩写,现在是第二个版本.通过它可以远程管理服务器,就像你在服务器面前操作一样.可以修改BIOS设置,可以重 ...

  4. 输入法词库解析(四)百度分类词库.bdict(.bcd)

    前言 .bdict 是百度的分类词库格式,可以在 https://shurufa.baidu.com/dict 下载. 手机百度的分类词库格式 .bcd 是一样的,可以在 https://mime.b ...

  5. fabric compose文件解读(CA篇)

    CA在fabric中的作用是:分配证书,实现身份认证,配普通的CA机构没什么区别(所以可以用其他CA机构颁发的证书,只要商量好就行) 我的一段CA的conpose文件 1 services: 2 ca ...

  6. 当 EDA 遇到 Serverless,亚马逊云科技出招了

    近二三十年来,软件开发领域毫无疑问是发展最为迅速的行业之一. 在上个世纪九十年代,世界上市值最高的公司大多是资源类或者重工业类的公司,例如埃克森美孚或者通用汽车,而现在市值最高的公司中,纯粹的软件公司 ...

  7. kvm里的虚拟机硬盘和网卡使用virtio驱动

    1.首先从虚拟机的xml文件中找到已经使用virtio驱动的硬件,复制里面的address这行参数出来 <address type='pci' domain='0x0000' bus='0x00 ...

  8. filebeat中增加其他参数用来区分不同的日志来源示例

    filebeat.yml配置文件参数 在source里加入了一个fields叫做"appach: true". filebeat.inputs: - type: log enabl ...

  9. 10. Fluentd部署:高可用配置

    对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即发送 ...

  10. 创建Grafana Dashboard

    输入表达式,获取数据 但是考虑到多台主机,需要添加变量来选择不同主机,从而出现相应的图表 点击右上角齿轮一样的图标,这个是设置 通过在prometheus界面查询可知,可以设置的变量有两个 考虑到这俩 ...