BaseElevationLayer 旨在扩展以创建自定义高程图层。您可以通过在 BaseElevationLayer
上调用 createSubclass() 来创建自定义 ElevationLayer。
如果新图层需要获取和准备资源,您可以在加载图层之前异步初始化属性。这在 load() 方法中处理。当图层即将显示时,由您或视图调用此方法一次。在方法的主体中,您可以调用 addResolvingPromise() 来添加一个必须在图层被认为已加载之前解决的 promise。
您必须覆盖 fetchTile() 方法中的逻辑以返回自定义高程数据的值。这样做可以夸大实际高程值或将专题数据映射为高程图层。转换高程数据的值时,建议保持无数据值不变。
const ExaggeratedElevationLayer = BaseElevationLayer.createSubclass({
load: function() {
// add loadable dependencies here and include
// their returned promises in the
// addResolvingPromise() method
this._elevation = new ElevationLayer({
url: "//links.geoscene.cn/elevation3d/rest/services/WorldElevation3D/Terrain3D/ImageServer"
});
this.addResolvingPromise(this._elevation.load());
},
fetchTile: function(level, row, col, options) {
// must resolve to an object with the following properties:
// values <number[]>: an array of elevation values for each pixel
// width <number>: the width of the tile in pixels
// height <number>: the height of the tile in pixels
// noDataValue <number>: value of pixels where no elevation data is present
return this._elevation.fetchTile(level, row, col, options).then(function(data) {
let exaggeration = this.exaggeration;
// `data` is an object that contains the width of the tile in pixels,
// the height of the tile in pixels, and the values of each pixel
for (let i = 0; i < data.values.length; i++) {
// each value represents an elevation sample for the
// given pixel position in the tile
// check if the value is a no data value
if (data.values[i] !== data.noDataValue) {
// multiply the elevation value by the exaggeration value
data.values[i] *= exaggeration;
}
}
return data;
}.bind(this))
}
});
创建图层后,您必须将其添加到 Map.ground 属性的图层中并将地图添加到 SceneView 实例中。
let map = new Map({
basemap: "satellite",
ground: {
layers: [ new ExaggeratedElevationLayer() ]
}
});
sceneView.map = map;
属性概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
String | 类的名称。 更多详情 | Accessor | |
Extent | 图层的完整范围。 更多详情 | Layer | |
String | 分配给图层的唯一 ID。 更多详情 | Layer | |
String | 指示图层在 LayerList 微件中的显示方式。 更多详情 | Layer | |
Boolean | 指示图层的资源是否已加载。 更多详情 | Layer | |
Error | 如果加载时发生错误,则返回 Error 对象。 更多详情 | Layer | |
String | 表示 load 操作的状态。 更多详情 | Layer | |
Object[] | 加载时发生的警告列表。 更多详情 | Layer | |
Number | 图层的不透明度。 更多详情 | Layer | |
SpatialReference | 图层的空间参考。 更多详情 | BaseElevationLayer | |
TileInfo | 图层的切片方案信息。 更多详情 | BaseElevationLayer | |
String | 用于在某些地方标识它的图层标题,例如 LayerList 微件。 更多详情 | Layer | |
String | 对于 BaseElevationLayer,类型总是 "base-elevation"。更多详情 | BaseElevationLayer | |
Boolean | 指示图层在 View 中是否可见。 更多详情 | Layer |
属性详细信息
-
起始版本:GeoScene Maps SDK for JavaScript 4.7
-
类的名称。声明的类名称格式化为
geoscene.folder.className
。
-
图层的完整范围。默认情况下,这是全球范围的。可使用此属性设置视图的范围以匹配图层的范围,以便其要素出现在视图中。请参阅以下示例片段。
示例// Once the layer loads, set the view's extent to the layer's fullextent 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
-
表示 load 操作的状态。
值 描述 not-loaded 对象的资源尚未加载。 loading 对象的资源当前正在加载。 loaded 对象的资源已加载且未出现错误。 failed 无法加载对象的资源。有关更多详情,请参阅 loadError。 可能值:"not-loaded"|"loading"|"failed"|"loaded"
- 默认值:not-loaded
-
加载时发生的警告列表。
-
图层的不透明度。此值的范围在
1
和0
之间,其中0
是 100% 透明,而1
为完全不透明。- 默认值:1
示例// Makes the layer 50% transparent layer.opacity = 0.5;
-
spatialReference SpatialReferenceautocast
-
图层的空间参考。
-
图层的切片方案信息。
-
用于在某些地方标识它的图层标题,例如 LayerList 微件。
如果图层是从门户项目加载的,则将使用门户项目的标题。如果图层作为 webmap 或 webscene 的一部分加载,则将使用存储在 webmap/webscene 中的图层标题。
-
type Stringreadonly
-
对于 BaseElevationLayer,类型总是 "base-elevation"。
-
- 默认值:true
示例// The layer is no longer visible in the view layer.visible = false;
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
Promise | 向图层的可加载链添加 promise。 更多详情 | BaseElevationLayer | |
如果 load() 操作已在进行中,则取消它。 更多详情 | Layer | ||
Promise<ElevationSampler> | 通过查询服务图层的高程数据并对其进行缓存,从而为给定的范围创建高程采样器,以便之后可以快速采样值。 更多详情 | BaseElevationLayer | |
Promise<LayerView> | 将图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图调用,例如 MapView 和 SceneView。 更多详情 | Layer | |
销毁图层和任何相关资源 (包括其 portalItem,如果它是图层上的属性)。 更多详情 | Layer | ||
Boolean | 在实例上触发事件。 更多详情 | Layer | |
Promise<Object> | 在图层可用时,获取图层的自定义属性数据。 更多详情 | Layer | |
Promise<ElevationTileData> | 获取视图中存在的给定级别、行和列的切片。 更多详情 | BaseElevationLayer | |
Number[] | 以可以轻松转换为 Extent 对象的四个数字的数组形式,返回切片的边界。 更多详情 | BaseElevationLayer | |
Boolean | 指示实例上是否存在与提供的事件名称相匹配的事件监听器。 更多详情 | Layer | |
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
Boolean |
| Layer | |
Boolean |
| Layer | |
Boolean |
| Layer | |
Promise | 加载此类引用的资源。 更多详情 | Layer | |
Object | 在实例上注册事件处理程序。 更多详情 | Layer | |
Promise<ElevationQueryResult> | 查询服务图层以获取给定几何的高程值。 更多详情 | BaseElevationLayer | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
Promise | 一旦创建了类的实例,就可以使用 | Layer |
方法详细说明
-
addHandles(handleOrHandles, groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
添加一个或多个与对象的生命周期相关联的句柄。当对象被销毁时,将移除句柄。
// Manually manage handles const handle = reactiveUtils.when( () => !view.updating, () => { wkidSelect.disabled = false; }, { once: true } ); // Handle gets removed when the object is destroyed. this.addHandles(handle);
参数handleOrHandles WatchHandle|WatchHandle[]对象销毁后,标记为要移除的句柄。
groupKey *optional标识句柄应添加到的组的键。组中的所有句柄稍后都可使用 Accessor.removeHandles() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
addResolvingPromise(promiseToLoad){Promise}
-
参数promiseToLoad Promise返回
类型 描述 Promise 当给定的 promise
解决时解析。示例// the _elevationLayer must load() prior to the ExaggeratedElevationLayer // resolving and moving to the "loaded" status const ExaggeratedElevationLayer = BaseElevationLayer.createSubclass({ load: function() { this._elevationLayer = new ElevationLayer({ url: "//links.geoscene.cn/elevation3d/rest/services/WorldElevation3D/Terrain3D/ImageServer" }); this.addResolvingPromise(this._elevationLayer.load()); } });
-
createElevationSampler(extent, options){Promise<ElevationSampler>}起始版本:GeoScene Maps SDK for JavaScript 4.12
-
通过查询服务图层的高程数据并对其进行缓存,从而为给定的范围创建高程采样器,以便之后可以快速采样值。可以使用
demResolution
选项设置缓存数据的分辨率。在许多情况下,auto
demResolution 可用于获取高质量的高程样本,而无需知道服务中数据的确切位置。这对于组合来自多个源的高程数据的服务 (例如世界高程服务) 特别有用。如果需要更多控制或更高质量的样本,请使用finest-contiguous
或固定{number}
分辨率。参数规范extent Extent创建采样器的范围。
options Objectoptional其他查询选项。请参见下表。
规范optional 默认值:auto控制要从中采样高程数据的水平分辨率 (像元大小),以米为单位 (默认为
auto
)。有关更多详情,请参阅 ElevationLayer。noDataValue Numberoptional默认值:0没有可用数据时使用的值。
返回类型 描述 Promise<ElevationSampler> 高程采样器。
-
将图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图调用,例如 MapView 和 SceneView。此方法在内部使用,没有直接调用它的用例。
参数view *父视图。
options Objectoptional指定附加选项的对象。有关此对象所需的属性,请参阅下面的对象规范表。
规范signal AbortSignaloptional中止 layerview 创建的信号。
返回类型 描述 Promise<LayerView> 使用 LayerView 实例解析。
-
destroy()inherited起始版本:GeoScene Maps SDK for JavaScript 4.17
-
销毁图层和任何相关资源 (包括其 portalItem,如果它是图层上的属性)。一旦图层被破坏,则无法再使用。
被破坏的图层将从其父对象中移除,例如 Map、WebMap、WebScene、Basemap、Ground 或 GroupLayer。
-
起始版本:GeoScene Maps SDK for JavaScript 4.5
-
在实例上触发事件。仅当创建此类的子类时,才应使用此方法。
参数type String事件的名称。
event Objectoptional事件有效负载。
返回类型 描述 Boolean 如果监听器收到通知,则为 true
-
fetchTile(level, row, column, options){Promise<ElevationTileData>}
-
获取视图中存在的给定级别、行和列的切片。必须覆盖此方法才能在 Map.ground 中显示自定义高程值。请注意,此方法必须返回一个 Promise,其解析为具有 ElevationTileData 中定义的属性的对象。
有关如何覆盖此方法的示例,请参阅以下示例:
参数规范level Number要获取的切片的细节级别。
row Number要获取的切片的行 (y) 位置。
column Number要获取的切片的列 (x) 位置。
options Objectoptional切片请求的可选设置。
规范noDataValue Numberoptional表示切片中不包含高程值的像素的值。
signal AbortSignaloptional中止请求的 AbortSignal。覆盖 fetchTile 时,应处理
signal
,例如通过将其传递给请求或中止挂起的操作。对 fetchTile 的中止调用应拒绝其返回的承诺,并出现名为AbortError
的错误。另请参见 AbortController。返回类型 描述 Promise<ElevationTileData> 解析为 ElevationTileData 的实例。
-
以可以轻松转换为 Extent 对象的四个数字的数组形式,返回切片的边界。有关此方法返回的值的更多详细信息,请参阅下面的
returns
部分中的表格。此函数可在 fetchTile() 中使用,因此您可获取当前切片的边界,将其转换为范围对象,并请求给定范围的所需数据。有关此方法如何工作的示例,请参阅自定义 ElevationLayer:专题高程数据示例。
参数level Number切片的细节层次 (LOD)。
row Number数据集中切片的行 (y) 位置。
column Number数据集中切片的列 (x) 位置。
optional 用于存储切片边界或范围的数组。
返回类型 描述 Number[] 返回一个表示切片边界或范围的数组。该数组有四个项目,每个项目代表一个范围的边界。下表描述了每个项目的值。 索引 值 0 最小 x 值 1 最小 y 值 2 最大 x 值 3 最大 y 值
-
起始版本:GeoScene Maps SDK for JavaScript 4.25
-
如果存在指定的句柄组,则返回 true。
参数groupKey *optional组键。
返回类型 描述 Boolean 如果存在指定的句柄组,则返回 true
。示例// Remove a named group of handles if they exist. if (obj.hasHandles("watch-view-updates")) { obj.removeHandles("watch-view-updates"); }
-
isFulfilled()
可用于验证创建类的实例是否已完成 (已解决或已拒绝)。如果满足,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已完成 (已解决或已拒绝)。
-
isRejected()
可用于验证创建类的实例是否被拒绝。如果被拒绝,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已被拒绝。
-
isResolved()
可用于验证创建类的实例是否已解决。如果已解决,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已解决。
-
加载此类引用的资源。如果视图是使用地图实例构造的,则此方法会自动为 View 及其在 Map 中引用的所有资源执行。
开发人员在访问不会在 View 中加载的资源时,必须调用此方法。
load()
方法仅在第一次调用时触发资源的加载。随后的调用将返回相同的 promise。可以提供一个
signal
来停止对Loadable
实例加载状态感兴趣。当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。参数signal AbortSignaloptional可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被拒绝,并具有一个名为
AbortError
的错误。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。返回类型 描述 Promise 资源已加载时解析。
-
在实例上注册事件处理程序。调用此方法将事件与监听器挂钩。
参数要侦听的事件或者事件数组。
listener Function事件触发时要调用的函数。
返回类型 描述 Object 返回具有 remove()
方法的事件处理程序,可调用该方法来停止侦听事件。属性 类型 描述 remove Function 调用时,从事件中移除监听器。 示例view.on("click", function(event){ // event is the event handle returned after the event fires. console.log(event.mapPoint); });
-
queryElevation(geometry, options){Promise<ElevationQueryResult>}起始版本:GeoScene Maps SDK for JavaScript 4.12
-
查询服务图层以获取给定几何的高程值。返回的结果包含几何的副本,其中 z 值从服务的高程数据中采样。可以使用
demResolution
选项设置查询高程的分辨率。在许多情况下,auto
demResolution 可用于获取高质量的高程样本,而无需知道服务中数据的确切位置。这对于组合来自多个源的高程数据的服务 (例如世界高程服务) 特别有用。如果需要更多控制或更高质量的样本,请使用finest-contiguous
或固定{number}
分辨率。参数规范geometry Point|Multipoint|Polyline用于对高程数据进行采样的几何。
options Objectoptional其他查询选项。请参见下表。
规范optional 默认值:auto控制要从中采样高程数据的水平分辨率 (像元大小),以米为单位 (默认为
auto
)。有关不同设置的更多详细信息,请参见下表。demResolution 描述 auto
自动为输入几何的每个坐标选择适当的分辨率。当前实现将尝试使用最好的可用分辨率,前提是所需的切片请求总数不超过某个最大数量 (当前为 20 个)。请注意,这可能会导致根据不同的分辨率对值进行采样。 finest-contiguous
根据整个几何中的最佳可用分辨率(像元大小)对高程进行采样。 {number}
根据最接近指定分辨率的分辨率(以米为单位)对高程进行采样。 returnSampleInfo Booleanoptional默认值: false指示是否返回每个坐标的其他采样信息。
noDataValue Numberoptional默认值:0没有可用数据时使用的值。
返回类型 描述 Promise<ElevationQueryResult> 解析为具有采样几何、分辨率信息和无数据值的对象。
-
removeHandles(groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
移除对象拥有的句柄组。
参数groupKey *optional要移除的密钥组或密钥组的数组或集合。
示例obj.removeHandles(); // removes handles from default group obj.removeHandles("handle-group"); obj.removeHandles("other-handle-group");
-
起始版本:GeoScene Maps SDK for JavaScript 4.6
-
一旦创建了类的实例,就可以使用
when()
。此方法接受两个输入参数:callback
函数和errback
函数。callback
在类的实例加载时执行。errback
在类的实例无法加载时执行。参数callback Functionoptional当 promise 解决时调用的函数。
errback Functionoptional当 promise 失败时执行的函数。
返回类型 描述 Promise 返回 callback
结果的新承诺,可用于链接其他函数。示例// Although this example uses MapView, any class instance that is a promise may use when() in the same way let view = new MapView(); view.when(function(){ // This function will execute once the promise is resolved }, function(error){ // This function will execute if the promise is rejected due to an error });
类型定义
-
ElevationTileData
-
描述组成高程切片的像素中包含的高程。
事件概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
{view: View,layerView: LayerView} |
创建图层的 LayerView 并在视图中呈现后触发。 更多详情 |
Layer | |
{view: View,error: Error} |
将图层添加到地图后,在创建 LayerView 期间出现错误时触发。 更多详情 |
Layer | |
{view: View,layerView: LayerView} |
销毁图层的 LayerView 并不再在视图中呈现后触发。 更多详情 |
Layer |
事件详细说明
-
layerview-createinherited
-
创建图层的 LayerView 并在视图中呈现后触发。
示例// This function will fire each time a layer view is created for this // particular view. layer.on("layerview-create", function(event){ // The LayerView for the layer that emitted this event event.layerView; });
-
layerview-create-errorinherited
-
将图层添加到地图后,在创建 LayerView 期间出现错误时触发。
示例// This function fires when an error occurs during the creation of the layer's 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); });