示例:
您提到的Cesium接口更新频繁,变化较大的问题,我理解您的担忧。的确,作为一个活跃开发的开源项目,Cesium的接口变化相对较快,这给使用者带来一定学习成本。其中在cesium1.107以后对地形加载进行了变化:
Cesium 1.107.0 版本做了如下变化:
- 删除了 viewer.terrainProvider 接口,只保留 imageryLayers.terrainProvider。
- 新增了createWorldTerrainAsync接口等
1.107.0 之前
使用 CesiumTerrainProvider 加载地形:
terrainProvider: Cesium.createWorldTerrain(), // 地形数据
或者
viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world'
});
1.107.0 之后
我们可以使用一下几个方法解决
terrain: Cesium.Terrain.fromWorldTerrain(), // 地形数据
或者
// 添加地形数据
const addWorldTerrainAsync = async (viewer: Cesium.Viewer) => {
try {
const terrainProvider = await Cesium.CesiumTerrainProvider.fromUrl(
"//data.mars3d.cn/terrain",
{
requestWaterMask: true,
requestVertexNormals: true,
}
);
viewer.terrainProvider = terrainProvider;
} catch (error) {
console.log(`Failed to add world imagery: ${error}`);
}
};
或者
// 添加地形数据
const addWorldTerrainAsync = async (viewer: Cesium.Viewer) => {
try {
const terrainProvider = await Cesium.createWorldTerrainAsync({
requestWaterMask: true,
requestVertexNormals: true,
});
viewer.terrainProvider = terrainProvider;
} catch (error) {
console.log(`Failed to add world imagery: ${error}`);
}
};
其他方法未测试,期待各位补充……