Class: HeightmapTerrainData

HeightmapTerrainData

new HeightmapTerrainData()

单张地形瓦片数据(以高度图形式存储); 高度图是由高程值构成的矩形数组,按行主序排列(数据方向:北→南为行方向,西→东为列方向)

Name Type Default Description
options.buffer TypedArray

包含高度数据的缓冲区。

options.width Number

高度图的宽度(经度方向),以样本为单位。

options.height Number

高度图的高度(纬度方向),以样本为单位。

options.childTileMask Number 15 可选

一个位掩码,用于表示该瓦片的四个子瓦片是否存在。 若某个子瓦片的对应位被置为1,则在需要时会请求该子瓦片的几何数据;若该位为0,则不请求子瓦片,而是通过父瓦片数据进行上采样。 各子瓦片对应的位值如下:

Bit PositionBit ValueChild Tile
01西南
12东南
24西北
38东北

options.structure Object 可选

描述高度数据结构的对象。

Name Type Default Description
heightScale Number 1.0 可选

乘高度样本以获得高于高度偏移的高度的因子,以米为单位。将hightoffset添加到结果中

heightOffset Number 0.0 可选

为获得最终高度(以米为单位)而添加到已缩放高度中的偏移量。 偏移量是在高度采样乘以 heightScale 后加上的。

elementsPerHeight Number 1 可选

缓冲区中构成单个高度样本的元素个数。通常为 1,表示每个元素都是一个单独的高度样本。如果大于 1,则该数量的元素共同构成高度样本,高度样本根据 structure.elementMultiplier 和 structure.isBigEndian 属性计算。

stride Number 1 可选

从一个高度的第一个元素到下一个高度的第一个元素所要跳过的元素个数。高度的第一个元素到下一个高度的第一个元素之间要跳过的元素个数。

elementMultiplier Number 256.0 可选

当 stride 属性大于 1 时用于计算高度值的乘数。例如,如果 stride 为 4,strideMultiplier 为 256,则高度计算如下:he​​ight = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256 这是假设 isBigEndian 属性为false。如果为true,则元素的顺序颠倒。

isBigEndian Boolean false 可选

当stride属性大于1时,表示缓冲区中元素的字节序。如果该属性为false,则第一个元素是低位元素。如果为真,则第一个元素是高阶元素。

lowestEncodedHeight Number 可选

可以存储在高度缓冲区中的最小值。使用 heightScaleheightOffset 编码后低于此值的任何高度都将被限制为该值。例如,如果高度缓冲区是 Uint16Array,则该值应为 0,因为 Uint16Array 不能存储负数。如果未指定此参数,则不强制执行最小值。

highestEncodedHeight Number 可选

可以存储在高度缓冲区中的最大值。在使用 heightScaleheightOffset 编码后高于此值的任何高度都将被限制为该值。例如,如果高度缓冲区是 Uint16Array,则该值应为 256 * 256 - 1 或 65535,因为 Uint16Array 不能存储大于 65535 的数字。如果未指定此参数,则不强制执行最大值。

options.createdByUpsampling Boolean false 可选

如果此实例是通过对另一个实例进行上采样创建的,则为true;否则为false。

See:
Example
var buffer = ...
var heightBuffer = new Uint16Array(buffer, 0, that._heightmapWidth * that._heightmapWidth);
var childTileMask = new Uint8Array(buffer, heightBuffer.byteLength, 1)[0];
var waterMask = new Uint8Array(buffer, heightBuffer.byteLength + 1, buffer.byteLength - heightBuffer.byteLength - 1);
var terrainData = new SuperMap3D.HeightmapTerrainData({
  buffer : heightBuffer,
  width : 65,
  height : 65,
  childTileMask : childTileMask,
  waterMask : waterMask
});

Members

readonly creditsArray.<Credit>

该瓦片的版权声明。

readonly waterMaskUint8Array Image Canvas

此地形数据中包含的文字水域掩码。水域掩码是一个方形 Uint8Array 或影像, 0 到 255 之间的值。

Methods

interpolateHeight(rectangle, longitude, latitude){Number}

计算指定经纬度的地形高度。

Name Type Description
rectangle Rectangle

该地形数据覆盖的矩形区域。

longitude Number

经度,单位为弧度。

latitude Number

以弧度为单位的纬度。

Returns:
Type Description
Number 指定位置处的地形高度。如果位置不在矩形范围内,此方法将推算出高度,但对于远在矩形范围外的位置,推算出的高度很可能会大为 对于远在矩形外的位置,推算高度很可能会大相径庭。

isChildAvailable(thisX, thisY, childX, childY){Boolean}

根据HeightmapTerrainData.childTileMask 确定给定的子地形图是否可用。 给定的子地形图坐标被假定为该地形图的四个子地形图之一。 如果给定的是非子地形图坐标,则会返回东南方向子地形图的可用性。

Name Type Description
thisX Number

该瓦片(父瓦片)的 X 坐标。

thisY Number

该瓦片(父瓦片)的 Y 坐标。

childX Number

要检查是否可用的子瓦片的 X 坐标。

childY Number

要检查是否可用的子瓦片的 Y 坐标。

Returns:
Type Description
Boolean 如果子瓦片可用,则为 true;否则为 false。

upsample(tilingScheme, thisX, thisY, thisLevel, descendantX, descendantY, descendantLevel){Promise.<HeightmapTerrainData>|undefined}

对地形数据进行高采样,供后代瓦片使用。 生成的实例将包含本实例中高度样本的子集,必要时还会进行内插。

Name Type Description
tilingScheme TilingScheme

该地形数据的切片方案。

thisX Number

该瓦片在切片方案中的 X 坐标。

thisY Number

该瓦片在切片方案中的 Y 坐标。

thisLevel Number

该瓦片在瓦片切片方案中的级别。

descendantX Number

要进行高采样的子瓦片在切片方案中的 X 坐标。

descendantY Number

要进行高采样的子瓦片在切片方案中的 Y 坐标。

descendantLevel Number

该瓦片在切片方案中的级别。

Returns:
Type Description
Promise.<HeightmapTerrainData> | undefined 对子瓦片的高采样地形数据的Promise;如果正在进行的异步高采样操作过多,请求被推迟,则未定义。

wasCreatedByUpsampling(){Boolean}

获取一个值,表明该地形数据是否是通过上采样低分辨率地形数据创建的。 如果该值为 false,则表示数据是从其他来源获取的,例如从远程服务器下载。 对于调用 HeightmapTerrainData#upsample 所返回的实例,本方法应返回 true。

Returns:
Type Description
Boolean 如果该实例是通过高采样创建的,则为 true;否则为 false。