BaseLayerView2D

AMD: require(["geoscene/views/2d/layers/BaseLayerView2D"], (BaseLayerView2D) => { /* code goes here */ });
ESM: import BaseLayerView2D from "@geoscene/core/views/2d/layers/BaseLayerView2D";
类: geoscene/views/2d/layers/BaseLayerView2D
继承于:BaseLayerView2D LayerView Accessor
起始版本:GeoScene API for JavaScript 4.8

表示使用 MapViewLayer 添加到 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
       });
     }
   }
 });

构造函数

new BaseLayerView2D(properties)
参数:
properties Object
可选

有关可能传递给构造函数的所有属性的列表,请参见属性

属性概览

可以设置、检索或收听任何属性。请参阅使用属性主题。
显示继承的属性 隐藏继承的属性
名称 类型 描述
String更多信息

类的名称。

更多信息Accessor
Layer更多信息

引用此 LayerView 表示的层。

更多信息BaseLayerView2D
Boolean更多信息

指示图层视图是否支持 MapViewspatialReference

更多信息LayerView
Boolean更多信息

如果图层被暂停,则值为 true(即,当范围发生变化时,图层不会重绘或更新自身)。

更多信息LayerView
Tile[]更多信息

计算覆盖 MapView 可见区域的 Tile 对象数组。

更多信息BaseLayerView2D
Boolean更多信息

图层更新时值为 true;例如,如果它正在获取数据的过程中。

更多信息LayerView
MapView更多信息

引用此 LayerView 所属的 MapView

更多信息BaseLayerView2D
Boolean更多信息

true 时,图层在视图中可见。

更多信息LayerView

属性详情

declaredClass Stringreadonly inherited

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

layer Layer

引用此 LayerView 表示的层。

spatialReferenceSupported Booleanreadonly inherited
起始版本:GeoScene API for JavaScript 4.23

指示图层视图是否支持 MapViewspatialReference。当 false 层视图将暂停

另请参阅:
suspended Booleanreadonly inherited

如果图层被暂停,则值为 true(即,当范围发生变化时,图层不会重绘或更新自身)。

另请参阅:
tiles Tile[]

计算覆盖 MapView 可见区域的 Tile 对象数组。当视图动画或用户与之交互时,此数组会更新。 然后,如果已添加或删除图块,则调用 tilesChanged()

另请参阅:
updating Booleanreadonly inherited

图层更新时值为 true;例如,如果它正在获取数据的过程中。

默认值:false
view MapView

引用此 LayerView 所属的 MapView

true 时,图层在视图中可见。此属性的值是从 layer.visible 继承的,除非开发人员覆盖它。如果设置了这两个属性,layerView.visible 将优先于 layer.visible

默认值:true

方法概览

显示继承的方法 隐藏继承的方法
名称 返回类型 描述
更多信息

在创建 LayerView 之后和要求绘制图层内容之前调用的方法。

更多信息BaseLayerView2D
更多信息

层被移除且 LayerView 即将被移除后调用的方法。

更多信息BaseLayerView2D
Promise<Graphic[]>更多信息

负责提供在指定屏幕坐标处命中的对象的实现方法。

更多信息BaseLayerView2D
Boolean更多信息

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

更多信息LayerView
Boolean更多信息

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

更多信息LayerView
Boolean更多信息

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

更多信息LayerView
更多信息

负责绘制图层内容的实现方法。

更多信息BaseLayerView2D
更多信息

LayerView 可以调用这个方法来要求 MapView 安排一个新的渲染帧。

更多信息BaseLayerView2D
更多信息

要实现的方法,通知为当前视图状态添加或删除图块。

更多信息BaseLayerView2D
Promise更多信息

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

更多信息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;
}
hitTest(mapPoint, screenPoint){Promise<Graphic[]>}

负责提供在指定屏幕坐标处命中的对象的实现方法。每次调用其 hitTest() 方法时,MapView 都会在内部调用此方法。

参数:
mapPoint Point

地图单位中的点。

screenPoint ScreenPoint

屏幕坐标中的点。

返回:
类型 说明
Promise<Graphic[]> 解析为图形数组的 Promise。
isFulfilled(){Boolean}inherited

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

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

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

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

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

返回:
类型 说明
Boolean 指示创建类的实例是否已解决。
render(renderParameters)

负责绘制图层内容的实现方法。每次 MapView 的状态发生变化或 requestRender() 已被调用时,都会调用此方法。

参数:
规格:
renderParameters Object
规格:

在其中绘制内容的画布 2D 上下文

stationary Boolean

MapView 的静止状态。

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)

要实现的方法,通知为当前视图状态添加或删除图块。可以实现这个函数来开始和停止获取新数据,或者分配和释放资源。

参数:
added Tile[]

为当前视图视口添加的平铺对象。

removed Tile[]

从视图视口中移除的平铺对象。

when(callback, errback){Promise}inherited

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

参数:
callback Function
optional

当 promise 解决时调用的函数。

errback Function
optional

当 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 API for JavaScript 4.11

表示屏幕上一个点的对象。

属性:

x 坐标。

y 坐标。

Tile Object

表示图块参考。

属性:

格式中的图块字符串标识符 level/row/col/world

level Number

图块所属的 LOD 的层级标识符

row Number

行标识符。

col Number

列标识符。

world Number

当投影允许世界环绕时(例如 Web Mercator),标识该图块的 level/row/col 的世界实例。

resolution Number

图块中每个像素的地图单元数。

scale Number

图块级别的地图比例。

coords Number[]

图块左上角的坐标,作为两个数字的数组。 坐标采用非标准化地图单位。

bounds Number[]

图块的边界是一个由四个数字组成的数组,可以很容易地转换为 Extent 对象。

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