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

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

                          添加地形将视角放平时python

                            地形显示wireframe
web

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文件,所以咱们重点讨论这种类型的地形。api

     生成工具是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是生成的地形瓦片所在的目标目录,app

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

每一个目录下都有.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开发实践(五) 坐标系统》

相关文章
相关标签/搜索