TerrainData是Cesium中表示地形数据的对象。它包含了一个高程值网格,通常用于在Cesium的场景中显示出地形。
TerrainData对象有如下属性:
waterMask
waterMask
是一个二进制的数组,表示地形中哪些地方是水。该数组的大小应该与高程网格数组相同。
width
width
是地形网格的宽度,用于计算高程数据的位置。
height
height
是地形网格的高度,用于计算高程数据的位置。
childTileMask
childTileMask
是一个位掩码,指示地形数据的分辨率级别。例如,如果分辨率级别为1,则这个值将为2。它的默认值为3。
TerrainData对象有如下方法:
interpolateHeight(rectangle)
用于根据矩形中的地形数据计算出一个三角网格,在该网格上设置高度属性。
createMesh(options)
用于创建地形的三角网格。它的参数是一个包含以下内容的对象:
rectangle
:用于获取地形数据的矩形。minimumHeight
:最小高度。maximumHeight
:最大高度。ellipsoid
:椭球体对象,用于计算出地形中的位置坐标。center
:地形的中心点。tileHeight
:地形瓦片的高度。tileWidth
:地形瓦片的宽度。创建一个简单的TerrainData对象:
var terrainData = new CesiumTerrainProvider({
url : '//assets.agi.com/stk-terrain/world'
}).getLevelMaximumGeometricError(0);
var terrainRectangle = new Cesium.Rectangle(
Cesium.Math.toRadians(-74.00),
Cesium.Math.toRadians(40.70),
Cesium.Math.toRadians(-73.98),
Cesium.Math.toRadians(40.72));
var mesh = terrainData.createMesh({
rectangle : terrainRectangle,
ellipsoid : Cesium.Ellipsoid.WGS84
});
viewer.scene.primitives.add(new Cesium.Primitive({
geometryInstances : new Cesium.GeometryInstance({
geometry : mesh,
attributes : {
color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
}
}),
appearance : new Cesium.MaterialAppearance({
material : new Cesium.Material({
fabric : {
type : 'Color',
uniforms : {
color : new Cesium.Color(1.0, 0.0, 0.0, 1.0)
}
}
}),
faceForward : true,
transparent : false
})
}));
以上代码将从AGI的STK地形服务器获取地形数据,并在红色的高度网格上显示出来。
在使用TerrainData对象时需要注意以下事项:
waterMask
数组应该是二进制的,值为0或者1。interpolateHeight
方法时,传递的参数rectangle
应该是地球上的经纬度坐标,而非笛卡尔坐标。createMesh
方法中的参数rectangle
也应该是地球上的经纬度坐标。