Cesium 新旧版本加载影像与terrain高程
Cesium 新旧版本添加影像和高程的不同方式。
·
Cesium 新旧版本加载影像与terrain高程
Cesium因为版本的原因,导致在加载高程数据时存在问题,以下记录一下解决方案。之前使用Cesium的时候版本是1.92,使用以下代码可正常加载显示影像和高程数据:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8" />
<!-- Tell IE to use the latest, best version. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<style>
@import url(../Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
const viewer = new Cesium.Viewer("cesiumContainer");
const imageryLayers = viewer.imageryLayers;
// 影像数据
const imageryLayer = new Cesium.ImageryLayer(
new Cesium.TileMapServiceImageryProvider({
url: 'http://localhost/tms/mercator_img'
})
);
// 高程数据
const terrainProvider = new Cesium.CesiumTerrainProvider({
// 高程layer.json上层url地址
url: 'http://localhost/dem/test_dem',
requestVertexNormals: true
});
viewer.imageryLayers.add(imageryLayer);
viewer.terrainProvider = terrainProvider;
</script>
</body>
</html>
后来更新版本到Cesium 1.116,再使用以上代码则发现无法加载显示影像和高程,查看官方文档,发现新版本的CesiumTerrainProvider需要使用await,通过官方实列代码修改终于解决该问题。
以下为Cesium 1.116版本的代码加载影像和高程:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Use correct character set. -->
<meta charset="utf-8" />
<!-- Tell IE to use the latest, best version. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<title>Hello World!</title>
<script src="../Build/Cesium/Cesium.js"></script>
<script src="./Sandcastle/Sandcastle-header.js"></script>
<style>
@import url(../Build/Cesium/Widgets/widgets.css);
html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
// 创建Cesium视图器
const viewer = new Cesium.Viewer('cesiumContainer');
// 影像
const wgs84_img = new Cesium.UrlTemplateImageryProvider({
url: 'http://localhost/tms/mercator_img/{z}/{y}/{x}.png'
});
viewer.imageryLayers.addImageryProvider(wgs84_img);
// 高程
window.startup = async function (Cesium) {
'use strict';
try {
viewer.scene.terrainProvider =
await Cesium.CesiumTerrainProvider.fromUrl(
// layer.json文件所在上层url地址
"http://localhost/dem/test_dem",
);
} catch (error) {
window.alert(`Failed to load terrain. ${error}`);
} //Sandcastle_End
Sandcastle.finishedLoading();
};
if (typeof Cesium !== 'undefined') {
window.startupCalled = true;
window.startup(Cesium).catch((error) => {
"use strict";
console.error(error);
});
}
</script>
</body>
</html>
执行以上代码则正常加载显示影像和高程数据。
更多推荐
所有评论(0)