HeightmapTerrainData

new SuperMap3D.HeightmapTerrainData(options)

单个瓦片的地形数据,其中地形数据以高度图的形式表示。高度图是一个矩形数组,按从南至北、从西到东的行大序排列高度。
Name Type Description
options Object 具有以下对象的属性:
Name Type Default Description
buffer TypedArray 包含高度数据的缓冲区。
width Number 高度图的宽度(经度方向),以样本为单位。
height Number 高度图的高度(纬度方向),以样本为单位。
childTileMask Number 15 optional 一个位掩码,指示这个贴图的四个子节点中哪一个存在。 如果设置了子位,则在需要时也会请求该瓦片的几何体。 如果清除了位,则不请求子瓦片,而是从父级瓦片上采样几何体。位值如下:
Bit PositionBit ValueChild Tile
01西南
12东南
24西北
38东北
structure Object optional 描述高度数据结构的对象。
Name Type Default Description
heightScale Number 1.0 optional 乘高度样本以获得高于高度偏移的高度的因子,以米为单位。将hightoffset添加到结果中
heightOffset Number 0.0 optional 为获得最终高度(以米为单位)而添加到已缩放高度中的偏移量。 偏移量是在高度采样乘以 heightScale 后加上的。
elementsPerHeight Number 1 optional 缓冲区中构成单个高度样本的元素个数。通常为 1,表示每个元素都是一个单独的高度样本。如果大于 1,则该数量的元素共同构成高度样本,高度样本根据 structure.elementMultiplier 和 structure.isBigEndian 属性计算。
stride Number 1 optional 从一个高度的第一个元素到下一个高度的第一个元素所要跳过的元素个数。高度的第一个元素到下一个高度的第一个元素之间要跳过的元素个数。
elementMultiplier Number 256.0 optional 当 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 optional 当stride属性大于1时,表示缓冲区中元素的字节序。如果该属性为false,则第一个元素是低位元素。如果为真,则第一个元素是高阶元素。
lowestEncodedHeight Number optional 可以存储在高度缓冲区中的最小值。使用 `heightScale` 和 `heightOffset` 编码后低于此值的任何高度都将被限制为该值。例如,如果高度缓冲区是 `Uint16Array`,则该值应为 0,因为 `Uint16Array` 不能存储负数。如果未指定此参数,则不强制执行最小值。
highestEncodedHeight Number optional 可以存储在高度缓冲区中的最大值。在使用 `heightScale` 和 `heightOffset` 编码后高于此值的任何高度都将被限制为该值。例如,如果高度缓冲区是 `Uint16Array`,则该值应为 `256 * 256 - 1` 或 65535,因为 `Uint16Array` 不能存储大于 65535 的数字。如果未指定此参数,则不强制执行最大值。
createdByUpsampling Boolean false optional 如果此实例是通过对另一个实例进行上采样创建的,则为true;否则为false。
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
});
See:

Members

credits : Array.<Credit>

该瓦片的凭证数组。

waterMask : Uint8Array|Image|Canvas

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

Methods

interpolateHeight(rectangle, longitude, latitude)Number

计算指定经纬度的地形高度。
Name Type Description
rectangle Rectangle 该地形数据覆盖的矩形区域。
longitude Number 经度,单位为弧度。
latitude Number 以弧度为单位的纬度。
Returns:
指定位置处的地形高度。如果位置不在矩形范围内,此方法将推算出高度,但对于远在矩形范围外的位置,推算出的高度很可能会大为 对于远在矩形外的位置,推算高度很可能会大相径庭。

isChildAvailable(options, thisX, thisY, childX, childY)Boolean

根据HeightmapTerrainData.childTileMask 确定给定的子地形图是否可用。 给定的子地形图坐标被假定为该地形图的四个子地形图之一。 如果给定的是非子地形图坐标,则会返回东南方向子地形图的可用性。
Name Type Description
options Object 具有以下属性的对象:
thisX Number 该瓦片(父瓦片)的 X 坐标。
thisY Number 该瓦片(父瓦片)的 Y 坐标。
childX Number 要检查是否可用的子瓦片的 X 坐标。
childY Number 要检查是否可用的子瓦片的 Y 坐标。
Returns:
如果子瓦片可用,则为 true;否则为 false。

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

对地形数据进行高采样,供后代瓦片使用。 生成的实例将包含本实例中高度样本的子集,必要时还会进行内插。
Name Type Description
options Object 具有以下属性的对象:
tilingScheme TilingScheme 该地形数据的切图方案。
thisX Number 该瓦片在切图方案中的 X 坐标。
thisY Number 该瓦片在切图方案中的 Y 坐标。
thisLevel Number 该瓦片在瓦片切图方案中的级别。
descendantX Number 要进行高采样的子瓦片在切图方案中的 X 坐标。
descendantY Number 要进行高采样的子瓦片在切图方案中的 Y 坐标。
descendantLevel Number 该瓦片在瓦片切图方案中的级别。
Returns:
对子瓦片的高采样地形数据的Promise;如果正在进行的异步高采样操作过多,请求被推迟,则未定义。

wasCreatedByUpsampling()Boolean

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