表示将 图层 添加到 MapView 中的 Map 后的 LayerView。
可对此类进行扩展,以为图层创建一个自定义的 LayerView。将图层添加到其地图的图层列表时,MapView 会根据需要创建 LayerView。
子类可以实现 LayerView 生命周期的多种函数。首先,在 LayerView 即将开始绘制图层内容时调用 attach() 方法。然后在 LayerView 的生命周期中,在 MapView 渲染阶段调用 render() 方法。render()
方法可以访问画布 2d 上下文,它可以在其中呈现可用于显示的内容。最后,从地图中移除图层后调用 detach() 方法。它可释放所有分配的资源并停止正在进行的请求。
let TileBorderLayerView2D = BaseLayerView2D.createSubclass({
// Example of a render implementation that draws tile boundaries
render(renderParameters) {
let tileSize = this.layer.tileInfo.size[0];
let state = renderParameters.state;
let pixelRatio = state.pixelRatio;
let width = state.size[0];
let height = state.size[1];
let context = renderParameters.context;
let coords = [0, 0];
context.fillStyle = "rgba(0,0,0,0.25)";
context.fillRect(0, 0, width * pixelRatio, height * pixelRatio);
// apply rotation for everything that will be applied to the canvas
if (state.rotation !== 0) {
context.translate(width * pixelRatio * 0.5, height * pixelRatio * 0.5);
context.rotate((state.rotation * Math.PI) / 180);
context.translate(- width * pixelRatio * 0.5, -height * pixelRatio * 0.5);
}
// Set the style for all the text.
context.font = "24px monospace";
context.fillStyle = "black";
context.shadowBlur = 1;
for (const tile of this.tiles) {
let screenScale = tile.resolution / state.resolution * pixelRatio;
state.toScreenNoRotation(coords, tile.coords);
// Draw the tile boundaries
context.strokeRect(coords[0], coords[1], tileSize * screenScale, tileSize * screenScale);
// Draw the tile information
context.shadowColor = "white";
context.fillText(
tile.level + "/" + tile.row + "/" + tile.col + "/" + tile.world,
coords[0] + 12,
coords[1] + 24,
tileSize * screenScale
);
context.shadowColor = "transparent";
}
}
});
let CustomTileLayer = Layer.createSubclass({
tileInfo: TileInfo.create({ spatialReference: { wkid: 3857 }}),
createLayerView(view) {
if (view.type === "2d") {
return new TileBorderLayerView2D({
view: view,
layer: this
});
}
}
});
构造函数
属性概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
String | 类的名称。 更多详情 | Accessor | |
Layer | 引用此 LayerView 表示的图层。 更多详情 | BaseLayerView2D | |
Boolean | 表示图层视图是否支持 MapView 的 spatialReference。 更多详情 | LayerView | |
Boolean | 如果图层被挂起 (即,当图层范围发生更改时,图层将不会重绘或更新),则值为 | LayerView | |
Tile[] | 计算的 Tile 对象数组,以覆盖 MapView 的可见区域。 更多详情 | BaseLayerView2D | |
Boolean | 更新图层时,值为 | LayerView | |
MapView | 更多详情 | BaseLayerView2D | |
Boolean | 当为 | LayerView |
属性详细信息
-
类的名称。声明的类名称格式化为
geoscene.folder.className
。
-
起始版本:GeoScene Maps SDK for JavaScript 4.23
-
表示图层视图是否支持 MapView 的 spatialReference。当为
false
时,图层视图将 suspended。- 另请参阅
-
如果图层被挂起 (即,当图层范围发生更改时,图层将不会重绘或更新),则值为
true
。
-
计算的 Tile 对象数组,以覆盖 MapView 的可见区域。当视图正在进行动画或用户与之交互时,此数组将会更新。然后,如果已添加或移除切片,则调用 tilesChanged()。
- 另请参阅
-
更新图层时,值为
true
;例如,如果它正在获取数据。- 默认值:false
-
view MapView
-
-
当为
true
时,图层在视图中可见。此属性的值继承自layer.visible
,除非开发人员重写它。如果设置了两个属性,则layerView.visible
将优先于layer.visible
。- 默认值:true
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
在创建 LayerView 之后和要求绘制图层内容之前调用的方法。 更多详情 | BaseLayerView2D | ||
移除图层且即将移除 LayerView 后调用的方法。 更多详情 | BaseLayerView2D | ||
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
Promise<Graphic[]> | 负责提供在指定屏幕坐标处命中的对象的实现方法。 更多详情 | BaseLayerView2D | |
Boolean |
| LayerView | |
Boolean |
| LayerView | |
Boolean |
| LayerView | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
负责绘制图层内容的实现方法。 更多详情 | BaseLayerView2D | ||
LayerView 可以调用此方法来要求 MapView 计划一个新的渲染帧。 更多详情 | BaseLayerView2D | ||
要实现的方法,用于通知为当前视图状态添加或移除的切片。 更多详情 | BaseLayerView2D | ||
Promise | 一旦创建了类的实例,就可以使用 | LayerView |
方法详细说明
-
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() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
attach()
-
在创建 LayerView 之后和要求绘制图层内容之前调用的方法。例如,通常实现此方法是为了开始侦听图层上的属性更改。
- 另请参阅
示例attach() { this._propertyHandle = this.layer.watch("opacity", function() { this.requestRender(); }); }
-
detach()
-
移除图层且即将移除 LayerView 后调用的方法。通常,此方法用于释放资源,如监视器。
- 另请参阅
示例// remove the watchers on the layer that are added in attach() detach() { this._propertyHandle.remove(); this._propertyHandle = null; }
-
起始版本: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"); }
-
参数mapPoint Point
地图单位中的点。
screenPoint ScreenPoint屏幕坐标中的点。
返回类型 描述 Promise<Graphic[]> 解析为图形数组的 Promise。
-
isFulfilled()
可用于验证创建类的实例是否已完成 (已解决或已拒绝)。如果满足,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已完成 (已解决或已拒绝)。
-
isRejected()
可用于验证创建类的实例是否被拒绝。如果被拒绝,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已被拒绝。
-
isResolved()
可用于验证创建类的实例是否已解决。如果已解决,则返回true
。返回类型 描述 Boolean 指示创建类的实例是否已解决。
-
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");
-
render(renderParameters)
-
负责绘制图层内容的实现方法。每次 MapView 的状态发生变化或调用 requestRender() 时,都会调用此方法。
参数规范renderParameters Object规范context CanvasRenderingContext2D在其中绘制内容的画布 2D 上下文。
stationary BooleanMapView
的静止状态。state ViewState描述视图状态的对象。
示例// Example of a render implementation that draws tile boundaries render(renderParameters) { let tileSize = this.layer.tileInfo.size[0]; let state = renderParameters.state; let pixelRatio = state.pixelRatio; let width = state.size[0]; let height = state.size[1]; let context = renderParameters.context; let coords = [0, 0]; context.fillStyle = "rgba(0,0,0,0.25)"; context.fillRect(0, 0, width * pixelRatio, height * pixelRatio); // apply rotation for everything that will be applied to the canvas if (state.rotation !== 0) { context.translate(width * pixelRatio * 0.5, height * pixelRatio * 0.5); context.rotate((state.rotation * Math.PI) / 180); context.translate(- width * pixelRatio * 0.5, -height * pixelRatio * 0.5); } // Set the style for all the text. context.font = "24px monospace"; context.fillStyle = "black"; context.shadowBlur = 1; for (const tile of this.tiles) { let screenScale = tile.resolution / state.resolution * pixelRatio; state.toScreenNoRotation(coords, tile.coords); // Draw the tile boundaries context.strokeRect(coords[0], coords[1], tileSize * screenScale, tileSize * screenScale); // Draw the tile information context.shadowColor = "white"; context.fillText( tile.level + "/" + tile.row + "/" + tile.col + "/" + tile.world, coords[0] + 12, coords[1] + 24, tileSize * screenScale ); context.shadowColor = "transparent"; } }
-
requestRender()
-
LayerView 可以调用此方法来要求 MapView 计划一个新的渲染帧。
示例// Call requestRender whenever the layer opacity has changed. attach() { this._propertyHandle = this.layer.watch("opacity", function() { this.requestRender(); }); }
-
tilesChanged(added, removed)
-
要实现的方法,用于通知为当前视图状态添加或移除的切片。可以实现此函数来开始和停止获取新数据,或者分配和释放资源。
参数为当前视图视口添加的切片对象。
从视图视口中移除的切片对象。
-
一旦创建了类的实例,就可以使用
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 });
类型定义
-
ScreenPoint起始版本:GeoScene Maps SDK for JavaScript 4.11
-
表示屏幕上一个点的对象。
-
Tile Object
-
表示一个切片参考。
- 属性
-
id String
切片字符串标识符,使用格式
level/row/col/world
level Number切片所属的 LOD 的层级标识符
row Number行标识符。
col Number列标识符。
world Number当投影允许世界环绕时 (例如 Web Mercator),标识该切片的
level
/row
/col
的世界实例。resolution Number切片中每个像素的地图单位数。
scale Number切片级别的地图比例。
切片左上角的坐标,作为两个数字的数组。坐标采用非标准化地图单位。
切片的边界,使用可以轻松转换为 Extent 对象的四个数字的数组形式。