当前位置: 首页 > news >正文

cesiumjs开发实践(四) 地形介绍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

cesiumjs中的地形系统是一种由流式瓦片数据生成地形的技术。

154828_MuiZ_1585572.jpg

                          添加地形将视角放平时

154830_OFiD_1585572.jpg

                            地形显示wireframe

cesiumjs支持两种类型的地形,STK World Terrain和Small Terrain。

    STK World Terrain是高分辨率, 基于quantized mesh的地形。这是一种基于网格的地形,可充分利用GL中的Shader来渲染,效果相当逼真。STK World Terrain使用了多种数据源,分别适应不同地区和不同精度时的情形。比如对于美国本土使用National Elevation Dataset (NED)的高程,精度3-30米;对于欧洲使用EU-DEM高程,精度30米;对于澳洲使用Australia SRTM-derived 1 Second DEM高程,精度30米;对于-60至60纬度段使用CGIAR SRTM高程,精度90米;对于整个地球使用GTOPO30,精度1000米。STK World Terrain地形是怎样生成的是不公开的,如需应用于封闭的局域网时,则需购买AGI的STK terrain server。但是AGI提供了一个webapi可供因特网上调用,并提供了这种地形的格式细节,期待早日有高手作出一个转换工具。

http://cesiumjs.org/data-and-assets/terrain/formats/quantized-mesh-1.0.html


     Small Terrain是中等高分辨率,基于heightmap的地形,渲染出的地形效果不如quantized mesh的地形,但也基本能接受。网上已经有一些开源的生成工具可以由DEM数据生成这种规范的.terrain文件,因此我们重点讨论这种类型的地形。

     生成工具是cesium googlegroup里一个俄国人提供的gdal2srtmtiles.py(https://groups.google.com/forum/#!topic/cesium-dev/rBieaEBJHiU),需要gdal库和numpy。

具体用法 python gdal2srtmtiles.py --cesium  -z 0-15 -p geodetic ‘YN_DEM.tif', 'I:\\tilesCache\\terrain_tiles'

YN_DEM.tif是输入地形源文件,是一个geotiff格式的高程数据,网络上有很多免费的高程数据,比较著名的SRTM90的,ASTER30的,都可以用作输入的地形数据源。terrain_tiles是生成的地形瓦片所在的目标目录,

-z 0-15参数表示zoom为0到15级,级别越高越详细,数据量也越大。-p geodetic暂时不知道,估计与投影相关,--cesium表示生成cesium特定的地形。生成过程时间长短与源数据的大小有关,楼主的YN_DEM.tif覆盖云南全境的30米精度ASTER DEM,1G多大小,头一天下班时运行,第二天下午生成完毕,8G多的瓦片,0-15级。111228_uGxU_1585572.jpg

每个目录下都有.terrain,.hdr,.kml三种文件,我们只用到.terrain文件。

       发布为地形服务很简单,不需要任何服务器端编程知识,把terrain_tiles配置到webserver的Webroot下的一个子目录就行,同时要把.terrain这种文件的Content-Type设为'application/octet-stream'加到web服务器的配置中,服务器端就算搞定。

      client端就更简单了,viewer中有个terrainProvider属性,直接new一个CesiumTerrainProvider就行。

var viewer = new Cesium.Viewer('cesiumContainer',{
		terrainProvider:new Cesium.CesiumTerrainProvider({
			url: "http://localhost:88/terrain_tiles"
		})
	});

PS:heightmap的地形总体上来说基本还原了地球表面应有的高低起伏,有些区域会有一些横断面像刀切一样失真,在一些对细节不是很在意的应用中还是很有吸引力的。

     在截稿时突然想到一个办法,既然AGI开放了STK World Terrain的webapi,那何不把这些高精度quantized mesh瓦片按所需区域下载下来存到数据库或文件系统上,这样本地局域网也能应用到高精度地形了,反正地形几十年也不变,不存在更新什么的。

本篇到此结束,下一篇《cesiumjs开发实践(五) 坐标系统》





转载于:https://my.oschina.net/u/1585572/blog/290481

相关文章:

  • Linux的文件管理类命令
  • java android 将小数度数转换为度分秒格式
  • [译] React v16.8: 含有Hooks的版本
  • sping 面向切面编程之引入通知
  • 自定义标签简介
  • 一张图知道HTML5布局(图)
  • 七牛云假注销小指南
  • Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴
  • CentOS7简单部署NFS
  • Axis2发布webservice(1)--0配置发布
  • 从零开始的无人驾驶 1
  • Redis中的lru算法实现
  • 数据库之开源数据库
  • 19-02-19
  • Linux软件包的管理--YUM
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • MySQL QA
  • mysql_config not found
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PHP CLI应用的调试原理
  • React-redux的原理以及使用
  • vue脚手架vue-cli
  • zookeeper系列(七)实战分布式命名服务
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 动态规划入门(以爬楼梯为例)
  • 简单易用的leetcode开发测试工具(npm)
  • 排序算法之--选择排序
  • 批量截取pdf文件
  • 用Python写一份独特的元宵节祝福
  • 优秀架构师必须掌握的架构思维
  • 主流的CSS水平和垂直居中技术大全
  • No resource identifier found for attribute,RxJava之zip操作符
  • gunicorn工作原理
  • #Lua:Lua调用C++生成的DLL库
  • #考研#计算机文化知识1(局域网及网络互联)
  • $(function(){})与(function($){....})(jQuery)的区别
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)SpringCloud 整合Python
  • (2.2w字)前端单元测试之Jest详解篇
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (阿里云万网)-域名注册购买实名流程
  • (二)c52学习之旅-简单了解单片机
  • (论文阅读40-45)图像描述1
  • (循环依赖问题)学习spring的第九天
  • (转) ns2/nam与nam实现相关的文件
  • (转)Oracle存储过程编写经验和优化措施
  • .form文件_一篇文章学会文件上传
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @private @protected @public
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angularjs]asp.net mvc+angularjs+web api单页应用