BaseElevationLayer

AMD: require(["geoscene/layers/BaseElevationLayer"], (BaseElevationLayer) => { /* 代码 */ });
ESM: import BaseElevationLayer from "@geoscene/core/layers/BaseElevationLayer";
类: geoscene/layers/BaseElevationLayer
继承于: BaseElevationLayer Layer Accessor
起始版本: GeoScene API for JavaScript 4.22

BaseElevationLayer 旨在扩展以创建自定义高程图层。 您可以通过在  BaseElevationLayer上调用 createSubclass() 来创建自定义 ElevationLayer 

如果新层需要获取和准备资源,您可以在加载层之前异步初始化属性。 这在 load() 方法中处理。 当图层即将显示时,由您或视图调用此方法一次。 在方法的主体中,您可以调用 addResolvingPromise() 来添加一个必须在图层被认为已加载之前解决的 promise。

您必须覆盖 fetchTile() 方法中的逻辑以返回自定义高程数据的值。 这样做可以放大实际高程值或将专题数据映射为高程图层。 转换高程数据的值时,建议保持无数据值不变。

const ExaggeratedElevationLayer = BaseElevationLayer.createSubclass({
  load: function() {
    // 在此处添加可加载的依赖项并将其返回的承诺包含在
// addResolvingPromise() 方法中 this._elevation = new ElevationLayer({ url: "//elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" }); this.addResolvingPromise(this._elevation.load()); }, fetchTile: function(level, row, col, options) { // 必须解析为具有以下属性的对象:
// values <number[]>:每个像素的高程值数组
// width <number>:切片的宽度(以像素为单位)
// height <number>:切片的高度(以像素为单位)
// noDataValue <number>:不存在高程数据的像素值
return this._elevation.fetchTile(level, row, col, options).then(function(data) { let exaggeration = this.exaggeration; // `data` 是一个对象, 包含切片的宽度(以像素为单位),
// 切片的高度(以像素为单位)以及每个像素的值
for (let i = 0; i < data.values.length; i++) { // 每个值表示切片中给定像素位置的高程样本 // 检查该值是否为无数据值 if (data.values[i] !== data.noDataValue) { // 将高程值乘以放大值 data.values[i] *= exaggeration; } } return data; }.bind(this)) } }); 

创建图层后,您必须将其添加到 Map.ground 属性的图层并将地图添加到 SceneView实例。

let map = new Map({
  basemap: "geoscene-community",
  ground: {
    layers: [ new ExaggeratedElevationLayer() ]
  }
});
sceneView.map = map;

属性列表

可以设置、检索或监听的属性。参见 使用属性
展示继承属性 隐藏继承属性
属性 类型 描述
String更多信息

类名。

更多信息Accessor
Extent更多信息

图层的完整范围。

更多信息Layer
String更多信息

分配给图层的唯一 ID。

更多信息Layer
String更多信息

指示图层应如何在 LayerList 微件中显示。

更多信息Layer
Boolean更多信息

指示图层的资源是否已加载。

更多信息Layer
Error更多信息

如果加载时发生错误,则返回 Error 对象。

更多信息Layer
String更多信息

表示加载操作的状态。

更多信息Layer
Object[]更多信息

加载时发生的警告列表。

更多信息Layer
Number更多信息

图层的不透明度。

更多信息Layer
SpatialReference更多信息

图层的空间参考。

更多信息BaseElevationLayer
TileInfo更多信息

图层的切片方案信息。

更多信息BaseElevationLayer
String更多信息

 图层的标题,用于在诸如 LayerList 微件之类的地方识别它。

更多信息Layer
String更多信息 对于 BaseElevationLayer,类型始终为“base-elevation”。更多信息BaseElevationLayer
Boolean更多信息

指示图层在视图中是否可见。

更多信息Layer

属性详细说明

declaredClass Stringreadonly inherited
起始版本: GeoScene API for JavaScript 4.22

类名。类的名称声明格式为 geoscene.folder.className

图层的完整范围。 默认情况下,这是全球范围的。 此属性可用于设置视图的范围以匹配图层的范围,以便其要素看起来填充视图。 请参阅下面的示例片段。

示例代码:
// 图层加载后,将视图的范围设置为图层的全范围
layer.when(function(){ view.extent = layer.fullExtent; });

分配给图层的唯一 ID。 如果没有开发者设置,则在图层加载时自动生成。

listMode String inherited

指示图层应如何在 LayerList 微件中显示。 下面列出了可能的值。

描述
show

该图层在内容列表中可见。

hide

该图层隐藏在内容列表中。

hide-children 如果图层是 GroupLayerBuildingSceneLayerKMLLayerMapImageLayerTileLayer 或 WMSLayer,则从内容列表中隐藏子图层。

可选值:"show"|"hide"|"hide-children"

默认值:show
loaded Booleanreadonly inherited

指示图层的资源是否已加载。 如果为  true,则可以访问对象的所有属性。

默认值:false
loadError Errorreadonly inherited

如果加载时发生错误,则返回 Error 对象。

默认值:null
loadStatus Stringreadonly inherited

表示加载操作的状态。

描述
not-loaded

对象的资源尚未加载。

loading

对象的资源当前正在加载。

loaded

对象的资源已加载且没有错误。

failed 无法加载对象的资源。 有关详细信息,请参阅 loadError

可选值:"not-loaded"|"loading"|"failed"|"loaded"

默认值:not-loaded
loadWarnings Object[]readonly inherited

加载时发生的警告列表。

opacity Number inherited

图层的不透明度。 该值的范围可以在 1 和 0 之间,其中 0 表示 100% 透明,1 表示完全不透明。

默认值:1
示例代码:
// 使图层 50% 透明
layer.opacity = 0.5;
spatialReference SpatialReferenceautocast

图层的空间参考。

tileInfo TileInfoautocast

图层的切片方案信息。

图层的标题,用于在诸如 LayerList 微件之类的地方识别它。

如果图层是从门户项目加载的,则将使用门户项目的标题。 如果图层作为 webmap 或 webscene 的一部分加载,则将使用存储在 webmap/webscene 中的图层标题。

type Stringreadonly

对于 BaseElevationLayer,类型始终为“base-elevation”。 

visible Boolean inherited

指示图层在视图中是否可见。 当为  false时,图层可能仍会添加到视图中引用的 Map实例,但其要素在视图中将不可见。

默认值:true
示例代码:
// 该图层在视图中不可见
layer.visible = false;

方法列表

展示继承方法 隐藏继承方法
属性 返回值类型 描述
Promise更多信息

向图层的可加载链添加 promise。

更多信息BaseElevationLayer
更多信息

如果 load() 操作已经在进行中,则取消它。

更多信息Layer
Promise<ElevationSampler>更多信息

通过查询服务图层的高程数据并缓存它,为给定的 Extent 创建高程采样器,以便之后可以快速采样值。

更多信息BaseElevationLayer
Promise<LayerView>更多信息

当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapView 和 SceneView)调用。

更多信息Layer
更多信息

销毁图层和任何关联的资源(包括其 portalItem,如果它是图层上的属性)。

更多信息Layer
Boolean更多信息

在实例上发出事件。

更多信息Layer
Promise<Object>更多信息

当图层可用时获取图层的自定义属性数据。

更多信息Layer
Promise<ElevationTileData>更多信息

获取视图中存在的给定级别、行和列的切片。

更多信息BaseElevationLayer
Number[]更多信息

以可以轻松转换为 Extent 对象的四个数字的数组形式返回 tile 的边界。

更多信息BaseElevationLayer
Boolean更多信息

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

更多信息Layer
Boolean更多信息

isFulfilled() 可用于验证创建类的实例是否已完成(已解决或已拒绝)。

更多信息Layer
Boolean更多信息

isRejected() 可用于验证创建类的实例是否被拒绝。

更多信息Layer
Boolean更多信息

isResolved() 可用于验证创建类的实例是否已解决。

更多信息Layer
Promise更多信息

加载此类引用的资源。

更多信息Layer
Object更多信息

在实例上注册事件处理程序。

更多信息Layer
Promise<ElevationQueryResult>更多信息

查询服务图层以获取给定几何的高程值。

更多信息BaseElevationLayer
Promise更多信息

一旦创建了类的实例,就可以利用 when() 。

更多信息Layer

方法详细说明

addResolvingPromise(promiseToLoad){Promise}

向图层的可加载链添加 promise。 这通常在 load() 方法中使用,以确保在该图层解析和加载之前加载该图层运行所需的所有可加载资源。 

参数:
promiseToLoad Promise

一个必须为要解析的图层解析并且改变 loading 状态 到 loaded 的 promise。

返回值:
类型 描述
Promise promise 
示例代码:
// _elevationLayer 必须在 ExaggeratedElevationLayer 之前 load()
// 解析并将状态变成“已加载”
const ExaggeratedElevationLayer = BaseElevationLayer.createSubclass({ load: function() { this._elevationLayer = new ElevationLayer({ url: "//elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer" }); this.addResolvingPromise(this._elevationLayer.load()); } });
cancelLoad()inherited

如果 load() 操作已经在进行中,则取消它。

createElevationSampler(extent, options){Promise<ElevationSampler>}
起始版本: GeoScene API for JavaScript 4.22

通过查询服务图层的高程数据并缓存它,为给定的范围创建高程采样器,以便之后可以快速采样值。 可以使用  demResolution 选项设置缓存数据的分辨率。 在许多情况下, auto  分辨率可用于获取高质量的高程样本,而无需知道服务中数据的确切位置。 这对于组合来自多个来源的高程数据的服务(例如世界高程服务)特别有用。 如果需要更多控制或更高质量的样本,请使用 finest-contiguous 或固定的 {number} 分辨率。

参数:
规范:
extent Extent

创建采样器的范围。

options Object
optional

其他查询选项。 请参见下表。

规范:
demResolution Number|String
可选
默认值: auto

以米为单位控制对高程数据进行采样的水平分辨率(cell size)(默认为 auto)。 有关详细信息,请参阅  ElevationLayer

noDataValue Number
可选
默认值: 0

没有可用数据时使用的值。

返回值:
类型 描述
Promise<ElevationSampler>

高程采样器。

createLayerView(view, options){Promise<LayerView>}inherited

当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapView 和 SceneView)调用。此方法在内部使用,没有直接调用它的用例。

参数:
view *

父视图。

options Object
可选

指定附加选项的对象。 有关此对象所需的属性,请参阅下面的对象规格表。

定义:
signal AbortSignal
可选

中止层视图创建的信号。

返回值:
类型 描述
Promise<LayerView> 使用 LayerView 实例解析。
示例:
destroy()inherited
起始版本: GeoScene API for JavaScript 4.22

销毁图层和任何关联的资源(包括其  portalItem,如果它是图层上的属性)。 该层一旦被销毁就不能再使用了。

被销毁的图层将从其父对象(如Map, WebMap, WebScene, Basemap, Ground, or GroupLayer )中移除。

示例:
emit(type, event){Boolean}inherited
起始版本: GeoScene API for JavaScript 4.22

在实例上发出事件。 此方法仅应在创建此类的子类时使用。

参数:
type String

事件的名称。

event Object
可选

事件相关的数据

返回值:
类型 描述
Boolean 如果通知了侦听器,则为 true
fetchAttributionData(){Promise<Object>}inherited

当图层可用时获取图层的自定义属性数据。

返回值:
类型 描述
Promise<Object>

解析为包含图层自定义属性数据的对象。

fetchTile(level, row, column, options){Promise<ElevationTileData>}

获取视图中存在的给定级别、行和列的切片。 必须覆盖此方法才能在 Map.ground 中显示自定义高程值。 请注意,此方法必须返回一个 Promise,该 Promise 解析为具有 ElevationTileData 中定义的属性的对象。

有关如何覆盖此方法的示例,请参阅以下示例:

参数:
规范:
level Number

要获取的切片的详细程度。

row Number

要获取的切片的行 (y) 位置。

column Number

要获取的切片的列 (x) 位置。

options Object
可选

切片请求的可选配置:

定义:
noDataValue Number
可选

表示切片中不包含高程值的像素的值。

signal AbortSignal
可选

中止请求的 AbortSignal。 覆盖 fetchTile 时,应处理 signal ,例如通过将其传递给请求或中止挂起的操作。 对 fetchTile 的中止调用应拒绝其返回的承诺,并出现名为 AbortError的错误。 另请参见 AbortController

返回值:
类型 描述
Promise<ElevationTileData> 解析为 ElevationTileData 的实例。
getTileBounds(level, row, column, out){Number[]}

以可以轻松转换为 Extent 对象的四个数字的数组形式返回 tile 的边界。 有关此方法返回的值的更多详细信息,请参阅下面的返回部分中的表格。

此函数可在 fetchTile() 中使用,因此您可以获取当前切片的边界,将其转换为范围对象,并请求给定范围的所需数据。

参数:
level Number

切片的细节层次 (LOD)。

row Number

在数据集中切片的行 (y) 位置。

column Number

在数据集中的切片列 (x) 位置。

out Number[]
可选

用于存储切片边界或范围的数组。

返回值:
类型 描述
Number[]

返回一个表示切片边界或范围的数组。 该数组有四个项目,每个项目代表一个范围的边界。 下表描述了每个项目的值。

Index
0

最小 x 值

1

最小 y 值

2

最大 x 值

3

最大 y 值

示例:
hasEventListener(type){Boolean}inherited

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

参数:
type String

事件的名称。

返回值:
类型 描述
Boolean

如果支持输入事件,则返回 true。

isFulfilled(){Boolean}inherited

isFulfilled() 可用于验证创建类的实例是否已完成(已解决或已拒绝)。 如果满足,则返回 true。

返回值:
类型 描述
Boolean 指示创建类的实例是否已完成(已解决或已拒绝)。
isRejected(){Boolean}inherited

isRejected() 可用于验证创建类的实例是否被拒绝。 如果被拒绝,则返回 true。

返回值:
类型 描述
Boolean 指示创建类的实例是否已被拒绝。
isResolved(){Boolean}inherited

isResolved() 可用于验证创建类的实例是否已解决。 如果已解决,将返回 true。

返回值:
类型 描述
Boolean 指示创建类的实例是否已解决。
load(signal){Promise}inherited

加载此类引用的资源。 如果视图是使用地图实例构造的,则此方法会自动为视图及其在 Map 中引用的所有资源执行。

开发人员在访问不会在视图中加载的资源时必须调用此方法。

load() 方法仅在第一次调用时触发资源的加载。 随后的调用返回相同的 promise。

可提供一个 signal来停止对  Loadable实例加载状态的关注。当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。

参数:
signal AbortSignal
可选

可用于中止异步任务的信号对象。 当发出中止信号时,返回的 Promise 将被一个名为  AbortError错误拒绝。 另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回值:
类型 描述
Promise 资源加载后解析。
on(type, listener){Object}inherited

在实例上注册事件处理程序。 调用此方法以将事件与侦听器挂钩。

参数:

要侦听的事件或事件数组。

listener Function

事件触发时调用的函数。

返回值:
类型 描述
Object 返回带有  remove() 方法的事件处理程序,应调用该方法以停止侦听事件。
属性 类型 描述
remove Function 调用时,从事件中删除侦听器。
示例代码:
view.on("click", function(event){
  // event 是事件触发后返回的事件句柄。
  console.log(event.mapPoint);
});
queryElevation(geometry, options){Promise<ElevationQueryResult>}
起始版本: GeoScene API for JavaScript 4.22

查询服务图层以获取给定几何的高程值。 返回的结果包含几何的副本,其中 z 值从服务的高程数据中采样。 可以使用 demResolution 选项设置查询高程的分辨率。 在许多情况下, auto demResolution 可用于获取高质量的高程样本,而无需知道服务中数据的确切位置。 这对于组合来自多个来源的高程数据的服务(例如世界高程服务)特别有用。 如果需要更多控制或更高质量的样本,请使用 finest-contiguous 或固定 {number}  分辨率。

参数:
规范:

用于对高程数据进行采样的几何图形。

options Object
可选

其他查询选项。 请参见下表。

定义:
demResolution Number|String
可选
默认值: auto

以米为单位控制对高程数据进行采样的水平分辨率(cell size)(默认为 auto)。 有关不同设置的更多详细信息,请参见下表。

demResolution 描述
auto

自动为输入几何的每个坐标选择适当的分辨率。 当前实现将尝试使用最好的可用分辨率,因为所需的 tile 请求总数不超过某个最大数量(当前为 20)。 请注意,这可能会导致从不同分辨率采样值。

finest-contiguous 从整个几何图形的最佳可用分辨率 (cell size) 中采样高程。
{number}

从最接近指定分辨率的分辨率采样高程(以米为单位)。

returnSampleInfo Boolean
可选
默认值: false

指示是否返回每个坐标的附加样本信息。

noDataValue Number
可选
默认值: 0

没有可用数据时使用的值。

返回值:
类型 描述
Promise<ElevationQueryResult>

解析为具有采样几何、分辨率信息且无数据值的对象。

示例:
when(callback, errback){Promise}inherited
起始版本: GeoScene API for JavaScript 4.22

一旦创建了类的实例,就可以利用 when() 。 这个方法有两个输入参数:一个callback 函数和一个  errback 函数。 callback 在类的实例加载时执行。 如果类的实例无法加载,则执行  errback

参数:
callback Function
可选

当 promise 解析时调用的函数。

errback Function
可选

当 promise 失败时执行的函数。

返回值:
类型 描述
Promise 返回回调结果的新 promise,可用于链接其他函数。
示例代码:
// 尽管此示例使用 MapView,但任何作为 Promise 的类实例都可以以相同的方式使用 when()
let view = new MapView();
view.when(function(){
  // 一旦 promise 被解决,这个函数就会执行
}, function(error){
  // 如果 promise 由于错误而被拒绝,此函数将执行
});

类型定义

ElevationTileData

描述组成高程切片的像素中包含的高程。

属性:
values Number[]

切片中每个像素的高程值。

width Number

切片的宽度(以像素为单位)。

height Number

瓦片的高度(以像素为单位)。

maxZError Number

每个值的 Z 值允许的最大误差(以米为单位)。

noDataValue Number

指示不存在高程数据的像素值。

Event Overview

Show inherited events Hide inherited events
属性 类型 描述
{view: View,layerView: LayerView}
更多信息

在图层的 LayerView 创建并在视图中呈现后触发。

更多信息 Layer
{view: View,error: Error}
更多信息

在将图层添加到地图后创建 LayerView 期间发出错误时触发。

更多信息 Layer
{view: View,layerView: LayerView}
更多信息

在图层的 LayerView 被销毁并且不再在视图中呈现后触发。

更多信息 Layer

Event Details

layerview-createinherited

在图层的 LayerView 创建并在视图中呈现后触发。

属性:
view View

创建 layerView的视图。

layerView LayerView

在视图中渲染的 LayerView 图层。

示例:
示例代码:
// 每次为此特定视图创建图层视图时,都会触发此函数。
layer.on("layerview-create", function(event){
  // 发出此事件的图层的 LayerView
  event.layerView;
});
layerview-create-errorinherited

在将图层添加到地图后创建 LayerView 期间发出错误时触发。

属性:
view View

为图层创建图层视图失败触发这个事件的视图。

error Error

描述层视图创建失败原因的错误对象。

示例:
示例代码:
// 在创建图层的图层视图期间发生错误时会触发此函数
layer.on("layerview-create-error", function(event) {
  console.error("LayerView failed to create for layer with the id: ", layer.id, " in this view: ", event.view);
});
layerview-destroyinherited

在图层的 LayerView 被销毁并且不再在视图中呈现后触发。

属性:
view View

销毁 layerView 的视图。

layerView LayerView

被销毁的LayerView 图层。

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.