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 |
属性详细说明
-
起始版本: GeoScene API for JavaScript 4.22
-
类名。类的名称声明格式为
geoscene.folder.className
。
-
图层的完整范围。 默认情况下,这是全球范围的。 此属性可用于设置视图的范围以匹配图层的范围,以便其要素看起来填充视图。 请参阅下面的示例片段。
示例代码:// 图层加载后,将视图的范围设置为图层的全范围
layer.when(function(){ view.extent = layer.fullExtent; });
-
分配给图层的唯一 ID。 如果没有开发者设置,则在图层加载时自动生成。
-
指示图层应如何在 LayerList 微件中显示。 下面列出了可能的值。
值 描述 show 该图层在内容列表中可见。
hide 该图层隐藏在内容列表中。
hide-children 如果图层是 GroupLayer、BuildingSceneLayer、KMLLayer、MapImageLayer、TileLayer 或 WMSLayer,则从内容列表中隐藏子图层。 可选值:"show"|"hide"|"hide-children"
- 默认值:show
-
指示图层的资源是否已加载。 如果为
true
,则可以访问对象的所有属性。- 默认值:false
-
如果加载时发生错误,则返回 Error 对象。
- 默认值:null
-
表示加载操作的状态。
值 描述 not-loaded 对象的资源尚未加载。
loading 对象的资源当前正在加载。
loaded 对象的资源已加载且没有错误。
failed 无法加载对象的资源。 有关详细信息,请参阅 loadError。 可选值:"not-loaded"|"loading"|"failed"|"loaded"
- 默认值:not-loaded
-
加载时发生的警告列表。
-
图层的不透明度。 该值的范围可以在 1 和 0 之间,其中 0 表示 100% 透明,1 表示完全不透明。
- 默认值:1
示例代码:// 使图层 50% 透明
layer.opacity = 0.5;
-
spatialReference SpatialReferenceautocast
-
图层的空间参考。
-
图层的切片方案信息。
-
图层的标题,用于在诸如 LayerList 微件之类的地方识别它。
如果图层是从门户项目加载的,则将使用门户项目的标题。 如果图层作为 webmap 或 webscene 的一部分加载,则将使用存储在 webmap/webscene 中的图层标题。
-
type Stringreadonly
对于 BaseElevationLayer,类型始终为“base-elevation”。
-
- 默认值: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 | 更多信息
| 更多信息 | Layer | |
Boolean | 更多信息
| 更多信息 | Layer | |
Boolean | 更多信息
| 更多信息 | Layer | |
Promise | 更多信息 加载此类引用的资源。 | 更多信息 | Layer | |
Object | 更多信息 在实例上注册事件处理程序。 | 更多信息 | Layer | |
Promise<ElevationQueryResult> | 更多信息 查询服务图层以获取给定几何的高程值。 | 更多信息 | BaseElevationLayer | |
Promise | 更多信息 一旦创建了类的实例,就可以利用 | 更多信息 | Layer |
方法详细说明
-
addResolvingPromise(promiseToLoad){Promise}
-
参数:promiseToLoad 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()); } });
-
createElevationSampler(extent, options){Promise<ElevationSampler>}起始版本: GeoScene API for JavaScript 4.22
-
通过查询服务图层的高程数据并缓存它,为给定的范围创建高程采样器,以便之后可以快速采样值。 可以使用
demResolution
选项设置缓存数据的分辨率。 在许多情况下,auto
分辨率可用于获取高质量的高程样本,而无需知道服务中数据的确切位置。 这对于组合来自多个来源的高程数据的服务(例如世界高程服务)特别有用。 如果需要更多控制或更高质量的样本,请使用finest-contiguous
或固定的{number}
分辨率。参数:规范:extent Extent创建采样器的范围。
options Objectoptional其他查询选项。 请参见下表。
规范:可选 默认值: auto以米为单位控制对高程数据进行采样的水平分辨率(cell size)(默认为 auto)。 有关详细信息,请参阅 ElevationLayer。
noDataValue Number可选默认值: 0没有可用数据时使用的值。
返回值:类型 描述 Promise<ElevationSampler> 高程采样器。
-
当图层添加到 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 )中移除。
-
起始版本: GeoScene API for JavaScript 4.22
-
在实例上发出事件。 此方法仅应在创建此类的子类时使用。
参数:type String事件的名称。
event Object可选事件相关的数据
返回值:类型 描述 Boolean 如果通知了侦听器,则为 true
-
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 的实例。
-
以可以轻松转换为 Extent 对象的四个数字的数组形式返回 tile 的边界。 有关此方法返回的值的更多详细信息,请参阅下面的返回部分中的表格。
此函数可在 fetchTile() 中使用,因此您可以获取当前切片的边界,将其转换为范围对象,并请求给定范围的所需数据。
参数:level Number切片的细节层次 (LOD)。
row Number在数据集中切片的行 (y) 位置。
column Number在数据集中的切片列 (x) 位置。
可选 用于存储切片边界或范围的数组。
返回值:类型 描述 Number[] 返回一个表示切片边界或范围的数组。 该数组有四个项目,每个项目代表一个范围的边界。 下表描述了每个项目的值。
Index 值 0 最小 x 值
1 最小 y 值
2 最大 x 值
3 最大 y 值
-
isFulfilled()
可用于验证创建类的实例是否已完成(已解决或已拒绝)。 如果满足,则返回 true。返回值:类型 描述 Boolean 指示创建类的实例是否已完成(已解决或已拒绝)。
-
isRejected()
可用于验证创建类的实例是否被拒绝。 如果被拒绝,则返回 true。返回值:类型 描述 Boolean 指示创建类的实例是否已被拒绝。
-
isResolved()
可用于验证创建类的实例是否已解决。 如果已解决,将返回 true。返回值:类型 描述 Boolean 指示创建类的实例是否已解决。
-
加载此类引用的资源。 如果视图是使用地图实例构造的,则此方法会自动为视图及其在 Map 中引用的所有资源执行。
开发人员在访问不会在视图中加载的资源时必须调用此方法。
load()
方法仅在第一次调用时触发资源的加载。 随后的调用返回相同的 promise。可提供一个
signal
来停止对Loadable
实例加载状态的关注。当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。参数:signal AbortSignal可选可用于中止异步任务的信号对象。 当发出中止信号时,返回的 Promise 将被一个名为
AbortError
的错误拒绝。 另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。返回值:类型 描述 Promise 资源加载后解析。
-
在实例上注册事件处理程序。 调用此方法以将事件与侦听器挂钩。
参数:要侦听的事件或事件数组。
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}
分辨率。参数:规范:geometry Point|Multipoint|Polyline用于对高程数据进行采样的几何图形。
options Object可选其他查询选项。 请参见下表。
定义:可选 默认值: auto以米为单位控制对高程数据进行采样的水平分辨率(cell size)(默认为 auto)。 有关不同设置的更多详细信息,请参见下表。
demResolution 描述 auto
自动为输入几何的每个坐标选择适当的分辨率。 当前实现将尝试使用最好的可用分辨率,因为所需的 tile 请求总数不超过某个最大数量(当前为 20)。 请注意,这可能会导致从不同分辨率采样值。
finest-contiguous
从整个几何图形的最佳可用分辨率 (cell size) 中采样高程。 {number}
从最接近指定分辨率的分辨率采样高程(以米为单位)。
returnSampleInfo Boolean可选默认值: false指示是否返回每个坐标的附加样本信息。
noDataValue Number可选默认值: 0没有可用数据时使用的值。
返回值:类型 描述 Promise<ElevationQueryResult> 解析为具有采样几何、分辨率信息且无数据值的对象。
-
起始版本: 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
-
描述组成高程切片的像素中包含的高程。
Event Overview
属性 | 类型 | 描述 | 类 | |
---|---|---|---|---|
{view: View,layerView: LayerView} |
更多信息
在图层的 LayerView 创建并在视图中呈现后触发。 |
更多信息 | Layer | |
{view: View,error: Error} |
更多信息
在将图层添加到地图后创建 LayerView 期间发出错误时触发。 |
更多信息 | Layer | |
{view: View,layerView: LayerView} |
更多信息
在图层的 LayerView 被销毁并且不再在视图中呈现后触发。 |
更多信息 | Layer |
Event Details
-
layerview-createinherited
-
在图层的 LayerView 创建并在视图中呈现后触发。
示例代码:// 每次为此特定视图创建图层视图时,都会触发此函数。 layer.on("layerview-create", function(event){ // 发出此事件的图层的 LayerView event.layerView; });
-
layerview-create-errorinherited
-
在将图层添加到地图后创建 LayerView 期间发出错误时触发。
示例代码:// 在创建图层的图层视图期间发生错误时会触发此函数 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); });