TerrainProvider是CesiumJS的一个组件,可以从各种地图数据源获取地形数据,并将其用于创建测量高程和三维地球表面的视觉效果。
首先,需要引入Cesium库:
<script src="https://cesiumjs.org/releases/1.66/Build/Cesium/Cesium.js"></script>
<link href="https://cesiumjs.org/releases/1.66/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
然后,在创建地球实例时,需要指定一个TerrainProvider实例作为参数:
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world',
}),
});
在上述例子中,我们采用了STK的全球数字地形模型数据。其他的数据源参见CesiumJS文档。
一个TerrainProvider实例有以下属性:
属性 | 类型 | 描述 |
---|---|---|
url | string | 地形数据源URL |
hasWaterMask | boolean | 是否包含水面遮罩层 |
availability | TimeIntervalCollection | 地形数据的可用时间范围 |
readyPromise | Promise | 在地形数据准备好时会被解析为一个空Promise |
这个方法可以根据给定的经度、纬度和层级获取地形数据块的几何信息。
var terrainProvider = new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world',
});
var longitude = Cesium.Math.toRadians(116.39);
var latitude = Cesium.Math.toRadians(39.9);
var promise = terrainProvider.requestTileGeometry(0, 0, 0);
Cesium.when(promise, function (geometry) {
console.log(geometry);
});
这个方法可以根据给定的地图层级获取该层级的最大几何误差。
var terrainProvider = new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world',
});
var maximumGeometricError = terrainProvider.getLevelMaximumGeometricError(0);
console.log(maximumGeometricError);
这个方法可以判断给定的经度、纬度和层级的地形数据块是否可用。
var terrainProvider = new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world',
});
var isAvailable = terrainProvider.getTileDataAvailable(0, 0, 0);
console.log(isAvailable);
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: new Cesium.CesiumTerrainProvider({
url: 'https://assets.agi.com/stk-terrain/world',
}),
});
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
var position = viewer.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid);
if (position) {
var promise = viewer.terrainProvider.getHeight(position);
Cesium.when(promise, function (height) {
console.log('Height:', height);
});
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
这个例子中,我们在地球上点击任意位置,然后调用terrainProvider的getHeight方法获取该位置的高度。在获取到高度后,控制台会输出该高度值。