题目内容:需要用cesium导入tiff高程图片(自行在网上下载tiff任意高程图片)在自己电脑上完成 提示: 要在Cesium中导入tiff高程图片,需要使用Cesium Terrain Builder(CTB)工具将tiff高程数据转换为Cesium支持的格式,例如quantized-mesh或terrain-format格式。这些格式都支持在Cesium中呈现地形,并且可以提供更好的性能和更快的加载速度。一旦将高程数据转换为Cesium支持的格式,可以使用Cesium API中的TerrainProvider类来加载地形数据。使用TerrainProvider,可以指定地形数据的URL和其他选项,例如最大LOD(层级细节)和覆盖范围等。最后,将TerrainProvider添加到场景中即可在Cesium中呈现tiff高程图片
时间: 2023-05-26 20:07:24 浏览: 231
。步骤如下:
1. 下载Cesium Terrain Builder(CTB)工具,并安装到本地电脑上。推荐使用命令行方式进行安装。
2. 在网上下载任意tiff高程图片,并将其放在本地电脑的某个目录下。
3. 使用CTB工具将tiff高程数据转换为Cesium支持的格式,例如quantized-mesh或terrain-format格式。转换方式可以参考CTB官网提供的文档或者教程。
4. 在Cesium中创建一个新的场景,并使用TerrainProvider类加载地形数据。加载地形数据时,需要指定地形数据的URL和其他选项,例如最大LOD和覆盖范围等。
5. 最后,将TerrainProvider添加到场景中即可在Cesium中呈现tiff高程图片。
注意事项:
1. CTB工具需要一定的计算资源,因此在转换大型高程数据时,需要考虑电脑性能和内存容量等因素。
2. 在加载地形数据时,需要注意地形数据的分辨率和精度等参数,以便在Cesium中获得更好的效果和性能。
3. 在使用Cesium相关API时,需要熟悉Cesium的基本概念和使用方法,例如场景、实体、相机等。可以参考Cesium官网提供的文档或者教程。
相关问题
需要用cesium导入tiff高程图片(自行在网上下载tiff任意高程图片)在自己电脑上完成
以下是一个基本的cesium代码,用于导入tiff高程图片:
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cesium - Inserting Tiff Elevation Data</title>
<style>
@import url(../Templates/Widgets/widgets.css);
html, body, #cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
#loadingOverlay {
background: rgba(57, 76, 103, 0.5);
color: #fff;
position: absolute;
top: 50%;
left: 50%;
margin: -25px 0 0 -50px;
width: 100px;
height: 50px;
text-align: center;
line-height: 50px;
z-index: 10000;
}
#loadingIndicator {
height: 50px;
width: 50px;
margin: 0 auto;
background-image: url(../Templates/Widgets/Images/loading-indicator.gif);
background-repeat: no-repeat;
background-position: center;
}
</style>
<script src="../ThirdParty/requirejs-2.1.20/require.js"></script>
<script>
require.config({
baseUrl: '../Source',
paths: {
'Cesium': '../Build/Cesium/Cesium',
'cesiumjs': '../Build/Cesium'
}
});
require([
'cesiumjs/Cesium',
'cesiumjs/Widgets/Viewer/Viewer',
'cesiumjs/Core/Cartographic',
'cesiumjs/Core/CesiumTerrainProvider',
'cesiumjs/Core/Cesium3DTileset',
'cesiumjs/Scene/SceneMode',
'cesiumjs/Scene/ImageryLayer',
'cesiumjs/Scene/Globe',
'cesiumjs/Scene/TerrainProvider'
], function (Cesium, Viewer, Cartographic, CesiumTerrainProvider, Cesium3DTileset, SceneMode, ImageryLayer, Globe, TerrainProvider) {
var viewer = new Viewer('cesiumContainer');
viewer.scene.globe.terrainProvider = new CesiumTerrainProvider({
url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
requestVertexNormals: true
});
var tiffProvider = new CesiumTerrainProvider({
url : 'http://localhost:8000/path/to/tiff/tiles',
requestVertexNormals: true
});
viewer.scene.terrainProvider = tiffProvider;
var imageryLayer = new ImageryLayer(new Cesium.UrlTemplateImageryProvider({
url: 'https://webglobe24.de/krater/{z}/{x}/{y}.jpg',
credit: 'Krater'
}));
viewer.scene.imageryLayers.add(imageryLayer);
var globeDepth = new Globe();
var terrainProvider = new TerrainProvider();
viewer.scene.terrainProvider = tiffProvider;
var position = Cesium.Cartographic.fromDegrees(-94.4375667,39.0660454,0);
var height = tiffProvider.getHeight(position);
var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
cartographic.height = height;
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
viewer.camera.position = surface;
viewer.camera.lookAt(Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height + 1000), new Cesium.Cartesian3(0.0, 0.0, 1.0));
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
viewer.scene.globe.depthTestAgainstTerrain = true;
var tileset = new Cesium3DTileset({
url: "./Tilesets/Batched/BatchedColors/tileset.json",
maximumMemoryUsage: 2048
});
tileset.readyPromise.then(function() {
viewer.scene.primitives.add(tileset);
viewer.camera.zoomTo(tileset);
});
});
</script>
</head>
<body>
<div id="cesiumContainer"></div>
<div id="loadingOverlay"><div id="loadingIndicator"><div class="rotating"></div></div></div>
</body>
</html>
```
需要注意的是,上面代码中的tiffProvider.url需要根据实际的tiff文件路径进行修改。由于使用Cesium导入tiff高程图片需要将其切片成小块,因此需要使用专门的软件工具进行操作。可以借助GDAL等工具或在线转换服务来实现。
cesium中添加高程
### 如何在 Cesium 中加载或设置地形高程数据
#### 加载官方地形服务
Cesium 提供了一个内置函数 `createWorldTerrain` 来快速加载全球范围的地形数据。此方法通过访问 Cesium Ion 的默认地形服务来获取高度信息[^4]。
以下是使用官方地形服务的一个简单示例:
```javascript
let viewer = new Cesium.Viewer("cesiumContainer", {
terrainProvider: Cesium.createWorldTerrain()
});
```
这段代码创建了一个具有全局地形支持的地图视图器,其中包含了详细的山体、峡谷等地形特征。
#### 自定义地形服务
如果需要加载来自其他源或者自定义服务器上的地形数据,则可以使用 `Cesium.TerrainProvider.fromUrl()` 方法指定 URL 地址并配置参数[^2]。例如:
```javascript
let customTerrainProvider = Cesium.CesiumTerrainProvider({
url : 'https://example.com/terrain',
});
let viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider : customTerrainProvider,
});
```
这里假设外部资源位于 `'https://example.com/terrain'` 路径下,并按照标准 RESTful 接口返回地理空间数据片段。
#### 添加本地 DEM 数据作为地形
对于离线环境下的应用开发来说,可能无法实时连接互联网去抓取在线的服务端点;此时就需要考虑导入预先准备好的本地数字高程模型 (Digital Elevation Model, DEM) 文件[^3]。具体流程如下所示:
1. **下载所需区域的原始 TIFF 格式的 DEM 图像**
这些图像通常可以从公开数据库如 USGS Earth Explorer 或者 Copernicus Global Land Service 获取到。
2. **转换成适合 WebGIS 平台使用的 Terrain 格式**
利用专门工具比如 GDAL 命令行程序完成格式变换工作,也可以借助图形界面友好的第三方解决方案——CesiumLab,在其界面上轻松上传目标文件夹路径中的所有子项(.tif),再一键导出兼容版本的结果集。
3. **集成至项目前端逻辑里头**
当上述准备工作完毕之后,只需稍作修改即可无缝嵌入现有框架之中:
```javascript
// 定义一个新的 terrain provider 实例对象
var localTerrainProvider = new Cesium.CesiumTerrainProvider({
url: './path/to/local/terrain'
});
// 将新实例赋给 Viewer 构造器选项里的属性名
viewer = new Cesium.Viewer('cesiumContainer',{
terrainProvider:localTerrainProvider
});
```
注意这里的相对链接指向的是经过处理后的输出目录位置。
---
###
阅读全文
相关推荐
















