表示使用 MapView 将 Layer 添加到 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[] | 更多信息 计算覆盖 MapView 可见区域的 Tile 对象数组。 | 更多信息 | BaseLayerView2D | |
Boolean | 更多信息 图层更新时值为 | 更多信息 | LayerView | |
MapView | 更多信息 | 更多信息 | BaseLayerView2D | |
Boolean | 更多信息 为 | 更多信息 | LayerView |
属性详情
-
类的名称。声明的类名格式为
geoscene.folder.className
。
-
起始版本:GeoScene API for JavaScript 4.23
-
指示图层视图是否支持 MapView 的 spatialReference。当
false
层视图将暂停。- 另请参阅:
-
如果图层被暂停,则值为
true
(即,当范围发生变化时,图层不会重绘或更新自身)。
-
计算覆盖 MapView 可见区域的 Tile 对象数组。当视图动画或用户与之交互时,此数组会更新。 然后,如果已添加或删除图块,则调用 tilesChanged()。
- 另请参阅:
-
图层更新时值为
true
;例如,如果它正在获取数据的过程中。- 默认值:false
-
view MapView
-
-
为
true
时,图层在视图中可见。此属性的值是从layer.visible
继承的,除非开发人员覆盖它。如果设置了这两个属性,layerView.visible
将优先于layer.visible
。- 默认值:true
方法概览
名称 | 返回类型 | 描述 | 类 | |
---|---|---|---|---|
更多信息 在创建 LayerView 之后和要求绘制图层内容之前调用的方法。 | 更多信息 | BaseLayerView2D | ||
更多信息 层被移除且 LayerView 即将被移除后调用的方法。 | 更多信息 | BaseLayerView2D | ||
Promise<Graphic[]> | 更多信息 负责提供在指定屏幕坐标处命中的对象的实现方法。 | 更多信息 | BaseLayerView2D | |
Boolean | 更多信息
| 更多信息 | LayerView | |
Boolean | 更多信息
| 更多信息 | LayerView | |
Boolean | 更多信息
| 更多信息 | LayerView | |
更多信息 负责绘制图层内容的实现方法。 | 更多信息 | BaseLayerView2D | ||
更多信息 LayerView 可以调用这个方法来要求 MapView 安排一个新的渲染帧。 | 更多信息 | BaseLayerView2D | ||
更多信息 要实现的方法,通知为当前视图状态添加或删除图块。 | 更多信息 | BaseLayerView2D | ||
Promise | 更多信息
| 更多信息 | LayerView |
方法详情
-
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; }
-
参数:mapPoint Point
地图单位中的点。
screenPoint ScreenPoint屏幕坐标中的点。
返回:类型 说明 Promise<Graphic[]> 解析为图形数组的 Promise。
-
isFulfilled()
可用于验证创建类的实例是否已完成(已解决或已拒绝)。如果满足,则返回true
。返回:类型 说明 Boolean 指示创建类的实例是否已完成(已解决或已拒绝)。
-
isRejected()
可用于验证创建类的实例是否被拒绝。如果被拒绝,则返回true
。返回:类型 说明 Boolean 指示创建类的实例是否已被拒绝。
-
isResolved()
可用于验证创建类的实例是否已解决。如果已解决,将返回true
。返回:类型 说明 Boolean 指示创建类的实例是否已解决。
-
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 });
类型说明
-
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 对象。