开篇

作者: questionuncle | 来源:发表于2017-02-21 10:37 被阅读0次

    第一次写博客,有点紧张和激动。GIS群里的小伙伴都在猜我是谁,先留个悬念吧,哈哈。

    最近正好在工作换挡期,又想把三维捡起来倒腾一下,就记录一下如何用Cesium构建三维场景。这个有很多前辈都已经实现过,但是自己尝试很多次,这次算是成功,也算是一个小小的里程碑。

    首先是数据的准备

    三维场景需要地形数据和叠加正摄影像,而Cesium支持的地形数据有两种,一种为STK World Terrain ,另一种是 Small Terrain。具体这两种的区别可参见前辈们的文章。

    在Cesium群中,有群友Wonder贡献出一个getTerrain.py,用Python2.x来运行,可以下载.terrain的文件,但是用gallery中的Terrain示例却无法调用。

    查找原因后无果,准备用Python3添加请求头再试试。

    对请求头添加请求头,其中包括User-Agent、Accept、Accept-Encoding、Accept-Language等,请求地址为

    https://assets.agi.com/stk-terrain/world/0/0/0.terrain?v=1.31376.0&f=TerrainTile

    注意,下载下来的文件大小为3896字节,而请求页面上显示为2035字节。原来下载下来的文件经过gzip解压了,所以必须在python代码中添加gzip解压这段代码进去,否则下载下来的文件只有2035字节并且Cesium中无法使用

    下载完terrain后,还需要下载layer.json这个可以找个STKTerrain的例子,获得该文件。

    打开该layer.json并格式化(在线格式化工具http://tool.oschina.net/codeformat/js/),可以看出,现在的数据版本变化了

    Small Terrain 是中等高分辨率,基于heightmap的地形,渲染出的地形效果不如quantized mesh的地形,但也基本能接受。

    网上已经有一些开源的生成工具可以由DEM 数据生成这种规范的.terrain文件,因此我们下面重点说明这种类型的地形生成。

    在易至天工开源的tiff转terrain源码中,有这样一段话

    //前7层建议自己到到CES上去下,下载地址  string url = "http://cesiumjs.org/smallterrain/" + layer.ToString() + "/" + x.ToString() + "/" + y.ToString() + ".terrain";

    所以前0-6级我们也可以通过python进行爬取

    将上面的代码地址换一下即可,同样它也是需要gzip解压的。

    接下来可以到SRTM(http://srtm.csi.cgiar.org/index.asp)上下载90m分辨率的DEM数据,并通过易至天工开源的源码进行转换成terrain文件,注意输入等级时候要按照以下格式

    其次,通过Cesium加载三维场景

    在Cesium 上加载本地地形Provider

    相关文章

      网友评论

          本文标题:开篇

          本文链接:https://www.haomeiwen.com/subject/wpvzuttx.html