Cesium中的地形图层类

前面我们主要学习了cesium内置接口如何操作影像数据,但是在一些应用场景中我们需要操作地形数据,例如模拟逼真的三维场景、与高程相关的一些空间分析和计算等。Cesium提供了TerrainProvider基类,该Provider负责每一个Tile对应的地形数据的构建,定义了一套地形Provider需要实现的接口和规范,但本身并不会参与其中的操作。基于此类,cesium为我们封装了5个现成的继承类操作地形数据:

不像上一讲介绍的影像图层(有专门的ImageryLayer)那样,Cesium中的地形类是直接通过不同的terrainProvider控制的,然后把某一个实例化的terrainProvider赋值给Viewer.terrainProvider来控制地形数据的显隐。所以,Cesium中的地形图层只能有一个。

Cesium加载不同的地形数据

Cesium支持渐进流式加载和渲染全球高精度地形,并且包含海、湖、河等水面效果。相对2D地图,山峰、山谷等其他地形特征的更适宜在这种3D地球中展示。

Cesium支持两种类型的地形,STK World Terrain和Small Terrain。针对于这两种类型的地形,这里不做过多的介绍,感兴趣的可参考cesiumjs开发实践(四) 地形介绍这篇文章。

地形数据集是巨大的,通常都是GB或者TB级别。在普通3D引擎中,使用底层图形API去高效实现地形数据的可视化需要做很多事情。幸好,Cesium已经完成了这个体力活,而我们只需要写几行代码,这些都是terrainProvider的功劳。下面我们主要介绍Cesium中常用的3个terrainProvider。

EllipsoidTerrainProvider
EllipsoidTerrainProvider是Globe默认采用的地形Provider,该Provider不支持水面,没有法向量,所以即使开启光照,对Tile也是无效的。但是它提供了一个全球范围内高度为0的地形,不需要额外的地形文件,就可以实时的自己来构建这个高度为0的Mesh。对那些没有网络环境,或网络不理想,或不需要地形的应用,EllipsoidTerrainProvider提供了最简单的,无需额外负担的地形数据来构网。

另外,EllipsoidTerrainProvider具有其他terrainProvider不具备的属性tileScheme,该属性是Provider内部地球网格的剖分方式,通常是WGS84坐标,也可以选择墨卡托坐标系。Cesium中目前支持WGS1984和墨卡托投影两种。

Terrain和Imagery分别采用自己的TileScheme,比如目前Terrain默认采用WGS1984的坐标系,这和经纬高的真实数据更接近,而目前Imagery影像服务基本都是墨卡托投影。

鉴于此,为了使数据的加载性能更好,可以让地形的TileScheme和影像的保持一致,都设置成墨卡托投影。

   var ellipsoidProvider = new Cesium.EllipsoidTerrainProvider();viewer.terrainProvider = ellipsoidProvider;

ArcGISTiledElevationTerrainProvider
ArcGIS的地形,这个可以说是一个真实的(凹凸的)高度图,原理和EllipsoidTerrainProvider如出一辙,因此同样的不支持法线,水面,但可以选择TileScheme,与EllipsoidTerrainProvider不一样之处在于每一个切片会根据ArcGIS规范请求一张图片,该图片中的像素对应的值就是该像素对应的高度,真的是名副其实的高度图。

    var terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({url:"https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer",token:"KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..",});viewer.terrainProvider = terrainProvider;

CesiumTerrainProvider
Cesium标准地形,在该Provider中支持两种地形格式,一种是高度图(目前Cesium已经废弃 ),另一种则是TIN网格的STK地形。
Cesium厉害的之处就在于目前采用STK的地形服务,并通过QuantizedMeshTerrainData封装了STK地形数据格式,它的优点是支持水面和法线,同时数据量比较小。

    var terrainProvider = new Cesium.CesiumTerrainProvider({url : Cesium.IonResource.fromAssetId(3956),requestWaterMask: true, requestVertexNormals: true, });viewer.terrainProvider = terrainProvider;

Cesium开发基础篇 | 02加载地形数据相关推荐

  1. Cesium开发基础笔记总结(加载影像、加载地形数据、加载矢量)

    Cesium开发基础笔记总结 学习总结于GIS李胜老师博客 Cesium开发基础01加载影像数据 加载影像数据 Cesium中的影像图层类: 无论是二维地图还是三维地图,如果缺少了底图影像或电子地图, ...

  2. iOS开发UI篇—懒加载

    iOS开发UI篇-懒加载 1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  3. 高德地图开发(二)加载瓦片数据

    官方Demo中给我们提供了加载在线瓦片数据的功能. 我们在上一节的基础上进行演示.话不多说先上图. 布局文件如下: <RelativeLayout xmlns:android="htt ...

  4. Cesium开发基础篇 | 04空间数据可视化之Entity

    前面介绍了Cesium如何加载影像数据.地形数据.以及矢量数据,但是作为一个完整的三维系统,仅仅包括这些数据还是远远不够的.当然,还需要一些其他数据,比如空间可视化数据.三维数据数据等,今天我们先从空 ...

  5. ios开发多线程篇--异步加载网络图片GCD

    一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...

  6. stm32呼吸灯程序_STM32裸机开发基础篇02点亮LED

    前言 上一节,我们完成了STM32单片机开发环境的搭建,本节我们正式学习STM32单片机,编程语言的学习,通常是从第一个"hello world"开始,而点灯实验便是单片机学习的开 ...

  7. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...

    系列回顾 在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出 ...

  8. Cesium开发工具篇 | 07回顾总结

    到目前为止,Cesium开发课程的篇幅已经学完四分之三了,大家如果有什么问题可以私信我或者扫描以下二维码进群沟通,若群二维码失效,可扫描最下方的公众号二维码,加我为好友并备注加群.有时会比较忙来不及回 ...

  9. Cesium本地加载地形(dem高程)数据

    cesium本地加载dem数据,首先需要下载地区的高程数据,一般通常在地理空间数据云里面下载:http://www.gscloud.cn/ 这里一般可以下载到90m和30m精度的数据,当然也可以用自己 ...

最新文章

  1. 提取Windows用户密钥文件cachedump
  2. 算法----摆动序列
  3. USB学习5---android usb驱动源代码目录说明
  4. Linux命令(007) -- systemctl
  5. 微信小程序中input和picker之间切换导致input无法失去焦点
  6. 关于python3中的包operator(支持函数式编程的包)
  7. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
  8. React开发(124):ant design学习指南之form中的validateFields
  9. Android应用安装apk版本升级,适配Android 8.0和Android 10.0下载安装,shell命令安装APK
  10. android电视怎么升级失败,智能电视升级失败,原因都在这里!
  11. 是时候“抛弃”谷歌 BERT 模型了!新型预训练语言模型问世
  12. 11.6 ConfigParser模块
  13. RocketMQ之消息中间件需要解决的问题
  14. Xcode9 Could not receive a message from the device
  15. windows server2012计算机管理“系统工具”里面没有“本地用户和组”怎么办?
  16. Spring源码之启动过程(四)—— Bean的实例化详解
  17. elaticsear学习常见错误
  18. 律师律所的舆情管控工作如何开展?
  19. 2021-04-03 java学习
  20. python数组堆叠,堆叠数组-python数据处理

热门文章

  1. 新手第一次用云渲染如何快速上手
  2. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇8、无缝镶嵌产品生产
  3. tftp协议的实现和即时通讯软件
  4. Autodesk Alias AutoStudio 2022 x64
  5. 波段合成,去除黑边并提取土地利用数据....下
  6. jdk环境变量配置成功只需三步
  7. 移动端布局-px转vw、vh
  8. 【安卓笔记】自定义toggleButton
  9. ISO22000认证|企业申请ISO22000认证资料自查
  10. 智慧化工厂安全风险生产预警系统软件