背景:项目前端使用Cesium,地形服务一直使用外网的,常常因为翻墙访问的问题,导致地形数据取不到,进而导致地球不能加载,故决定搭建自己的地形服务,彻底解决这个问题。博文包含以下几个过程:

下载原始地形数据,格式为.tif。
处理地形数据,将零散的地形文件整合成一个地形文件。
配置CTB环境
使用ctb-tile指令将地形文件(.tif)加工成.terrain文件。
发布地形服务并使用Cesium调用。

一、下载原始地形数据

下载地址(精度90m):
http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp
如果你刚好需要的也是全国地形,可以从楼主网盘下载,更快更方便(密码zyt9):https://pan.baidu.com/s/1YYC25b48QAVb64mW77vCEw
网盘包含两部分内容:

dem.rar:原始数据,需要自行使用ArcMap工具整合。
合并后的数据:经过ArcMap工具处理的数据,已经整合成了一个地形文件,可以直接跳到第三步。
在网站下载流程:
1、打开网页http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp。如图:

2、根据需要选择方便的选取方式:

MutilpleSelection:点击哪个选哪个,可以选择多个,双击取消。
EnableMouseDrag:框选,框选了什么范围就是什么范围。
InputCoordinates:输入最西,最东。最南,最北的坐标来下载该范围内的所有数据。

3、选择好范围后,点击“Click here to Begin Search”,进入下一步。

4、可以看到刚刚选择了几个数据,点击每个数据的DownLoad,下载数据(这个地方比较繁琐,需要耐心)。

5、下载完数据后解压所有的压缩包,并将tifwen文件拷贝到统一的文件夹内,这里的内容和我网盘中的dem.rar是一样的

二、处理地形数据

由于CTB工具不支持DEM为NoData值和float的数据,所以需要对数据进行处理。

  • 多个tif必须县合并镶嵌成一张tif
  • pixeltype从float转为int
  • NoData值处理为0

我使用的是ArcGis10.5,打开ArcMap:

这个处理过程很久,可以在Result面板里查看转换过程。成功后,处理NoData值,处理公式为:

Con(IsNull("xxxx.tif"),0,"xxxx.tif")//xxxx.tif对应你的合并后的文件

三、配置CTB环境

  1. 下载CTB工具包:资源
  2. 将ctb和gdal-data拷贝至合适的目录下如:D:\soft\CTB
  3. 配置环境变量:

四、使用CTB生成.terrain文件:

注意:执行前请确保输出文件夹存在且是空的,同时保证磁盘有足够的空间,全球数据大约800G。生成瓦片的等级不要太高,中国范围内单18级就需要大约700G。

打开cmd控制台,输入指令如:

ctb-tile -o D:\terrain\china\terrain -s 14 -e 0 -r nearest -c 4 C:\Users\Administrator\Documents\ArcGIS\dem_result\noData\new.tif

这个过程更加费时间,需要等待很久,直到执行结束。

五、发布并使用Cesium调用

  1. 将生成的文件拷贝到Tomcat服务器下。
  2. 拷贝“覆盖至生成tiles结果”目录中的layer.json文件和0文件夹至生成结果目录下:

Cesium 生成terrain地形数据----CTB方式及步骤的更多相关文章

  1. Cesium专栏-terrain地形、3dtiles模型、gltf模型 高度采样

    在Cesium中,对于terrain地形.3dtiles模型.gltf模型的高度采样是一个很基本的功能,基于此,可以做一些深度应用,而Cesium已经帮我们提供了相应的API,在这里,我帮大家总结一下 ...

  2. Cesium加载地形数据只显示半个地球

    Cesium第0级地形包括两个瓦片:0/0/0.terrain,0/1/0.terrain,分别为左半球和右半球(具体参考:https://blog.csdn.net/u013929284/artic ...

  3. Cesium 加载地形数据

    1.注册Cesium Ion账号,注册地址:Sign In | Cesium ion 否则,加载数据会报错{code: "InvalidCredentials", message: ...

  4. Cesium中级教程5 - Terrain 地形

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ CesiumJS支持对与水流相关的海洋.湖泊和河流以及全球高分辨 ...

  5. 数据可视化之powerBI技巧(七)从Excel到PowerBI,生成笛卡尔积的几种方式

    假如分别有100个不重复的姓和名,把每个姓和名进行组合匹配,就可以得到一万个不重复的姓名组合,这种完全匹配的方式就是生成一个姓名的笛卡尔积. 下面就来看看生成笛卡尔积的几种方式,为了展现的方便,以5个 ...

  6. Cesium中的地形和坐标转换说明

    1 Cesium中的地形 Cesium中的地形系统是一种由流式瓦片数据生成地形mesh的技术,厉害指出在于其可以自动模拟出地面.海洋的三维效果.创建地形图层的方式如下: var terrainProv ...

  7. (二)GameMaker:Studio ——使用等高图生成3D地形

    上一篇,我们讲解了GM中导入模型的方法,这节我们来讲地形. 源文件地址:http://pan.baidu.com/share/link?shareid=685772423&uk=2466343 ...

  8. ADO.NET编程之美----数据访问方式(面向连接与面向无连接)

    最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...

  9. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

随机推荐

  1. Codeforces 433C #248_div1_A 中位数的应用

    擦..今天这套题好尼玛难啊,做了一个小时,连一题都没做出来,而且还没什么头绪 查了下出题人,师大附中的 14年毕业 13年拿到的国家集训队资格 保送清华 题意是 给一串序列,计算一个值,这个值是 相邻 ...

  2. UVA 11997 The K smallest Sums

    给出K*K的矩阵,每一行取一个数,构成K个数的和,总共有 k^k种可能,从中取出前k个最小的. 一开始犯了错,因为只要对每行排序,最小的必定是第一列的和,然后我当时就想着,逐步推进,每次将某行的那个数 ...

  3. consul配置

    参考:https://blog.csdn.net/achenyuan/article/details/80389410 gcp: consul安装目录:/usr/local/bin/consul co ...

  4. 201812-1 小明上学 Java

    思路: 上学这个题和放学有区别,上学是小明每到一个路口的情况,是实时更新的.不是只有出发时间,那样就比较复杂了. 这个题需要注意:黄灯之后要等红灯,想一下交通规则. import java.util. ...

  5. 用matplotlib统计数据并画图

    用jupyter来统计数据,画出柱状图 import numpy as np import pandas as pd import matplotlib.pyplot as plt import ma ...

  6. vue项目配置多入口多出口【转载】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/localhost_1314/article ...

  7. promise 核心技术3 使用

    什么是promise?(加深理解) 抽象表达:(比较高的高度 看这门技术) Promise是js中进行异步操作的新的解决方案(旧形式:纯回调的形式) 具体表达: 从语法上,Promise是一个构造函数 ...

  8. HTTP协议(四):首部

    前言 作者说:上一节中介绍了HTTP报文中的状态码,这一节同样是对报文的补充,介绍的是HTTP首部字段.不过,你如果是第一次见到这个东西,肯定会特别疑惑,什么是HTTP首部? <图解HTTP&g ...

  9. Linux(CENTOS7) YUM方式安装mysql5.7

    参考地址:https://www.cnblogs.com/linjiqin/p/7611204.html 注:该地址标题写的是CENTOS6.*版本的,但是我在我的CENTOS7.*上面安装是完美进行 ...

  10. 记Windows下初次使用dev C++进行socket编程过程

    记初次接触socket编程,在devC++使用Winsock进行socket编程的一个过程,通过在devC++创建2个项目分别是server.client程序项目,感受通过socket使client与 ...