SceneLayer

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

概述

SceneLayer 是一种图层类型,设计用于在 SceneView 中按需流式传输和显示大量数据。SceneLayers 支持两种几何体类型: 和 3D 对象(例如建筑物)。

san-francisco-buildings

您可以通过搜索图库在 GeoScene Online 中找到许多 SceneLayers 示例。

city-scene-layer-guide

发布场景图层

SceneLayer 显示来自场景服务的数据。场景服务可以以适合 Web 流的开放格式保存大量要素。SceneLayer 从粗略的制图表达开始逐步加载这些要素,并根据特写视图的需要将其细化为更高的细节。

scenelayer-ny

通过上传场景图层包 (.slpk) 或从 GeoScene Pro 发布场景图层包,可以在 GeoScene Online 或 GeoScene Enterprise 上托管场景服务根据发布 SceneLayer 的方式,有两种类型的图层:具有关联要素图层的 SceneLayer仅具有缓存属性的 SceneLayer。有关更多信息,请参阅场景图层指南主题的发布部分

场景服务由 GeoScene Server REST 资源的 URLportalItem 标识:

let sceneLayer = new SceneLayer({
  url: "https://www.geosceneonline.cn/server/rest/services/Hosted/1864%E5%B7%A5%E5%8E%82%E5%9C%BA%E6%99%AF4_WSL1/SceneServer/layers/0"
});

                                  
let sceneLayer = new SceneLayer({
 portalItem: {
   id: "6fce72d1a3df4b309a317f1e2faae05e"
 }
});

                                  

大多数情况下,最好从门户项目而不是场景服务 url 创建 SceneLayer,因为有关关联要素服务的信息存储在项目级别而不是服务级别。

如果从其他域请求场景服务,则需要启用 CORS 的服务器代理

尽管显示 SceneLayer 的内部逻辑在技术上是先进的,但它在 API 中的使用遵循与其他层相同的模型。您可以使用渲染器来设置 SceneLayer 的样式,并使用弹出窗口来检索属性信息并将其显示给用户。

数据可视化

就像其他图层一样,SceneLayers 可以使用渲染器进行可视化。可以使用 MeshSymbol3D 设置 3D 对象的样式。可以将 FillSymbol3DLayer 添加到 MeshSymbol3D 以可视化来自 SceneLayer 的 3D 对象:

let symbol = {
  type: "mesh-3d",  // autocasts as new MeshSymbol3D()
  symbolLayers: [{
    type: "fill",  // autocasts as new FillSymbol3DLayer()
    material: { color: "red" }
  }]
};

sceneLayer.renderer = {
  type: "simple",  // autocasts as new SimpleRenderer()
  symbol: symbol
};

                            

SceneLayers 还支持可视变量,这使您可以轻松地以连续颜色可视化图层中的数字数据。例如,下图中使用的服务表示包含数值属性的建筑物要素,该属性存储每个建筑物中的居民数量。图层的渲染器使用颜色可视变量根据给定字段的值沿连续的白色到蓝色色带对每个要素进行着色。白色要素表示距离公共交通站点较远的建筑物,深蓝色要素表示非常接近公共交通站点(步行时间少于 1 分钟)的建筑物。值介于低值和高值之间的建筑物被分配中间颜色。为了改善对 3D 对象场景图层形状的感知,还可以使用边缘对其进行可视化。请参阅可视化概述主题,了解有关数据可视化技术的详细信息。

场景图层边缘

具有可视变量的数据驱动可视化中使用的属性必须可由 SceneLayer 的缓存访问。对于仅具有缓存属性的 SceneLayer 和具有关联要素图层的 SceneLayer,属性值均来自缓存。因此,如果要素图层上的属性发生更改,可视化效果将不会更新。将缓存属性的数量保持在最低限度可提高 SceneLayer 的性能。因此,最佳做法是明智地使用通过图层缓存提供的属性。

筛选数据

可以使用 SQL where 子句对 SceneLayer 进行过滤。筛选是使用定义表达式属性实现的。此属性在客户端上使用 SceneLayer 缓存属性进行评估,并且仅支持 标准化 SQL。

let layer = new SceneLayer({
 url: "https://www.geosceneonline.cn/server/rest/services/Hosted/1864%E5%B7%A5%E5%8E%82%E5%9C%BA%E6%99%AF4_WSL1/SceneServer/layers/0",
 definitionExpression: "usage = 'Residential' AND totalHeight < 5"
});

                            

筛选数据的另一种方法是在 SceneLayerView 上使用 FeatureFilter。这将仅显示满足筛选条件的要素。设置几何空间关系允许您根据传入几何的空间关系过滤要素。目前仅支持containsintersectsdisjoint 类型的空间关系。

有关更多信息,请参阅使用 SceneLayer 按几何过滤要素示例。

弹出窗口

点和 3D 对象场景图层可以使用 popupTemplate 属性自定义弹出窗口内容。具有关联要素图层的 SceneLayer 将在关联的要素图层中查询属性。对于仅具有缓存属性的 SceneLayer,属性来自缓存。还支持 popupTemplateexpressionInfo 的 Arcade 表达式。

custom-popups

查询

SceneLayer 和 SceneLayerView 都支持查询,但行为不同。

查询 SceneLayer 将从关联要素图层中的属性中检索结果。如果图层没有关联的要素图层,则查询将被拒绝并显示错误。图层上的查询功能强大,因为它们是在 SceneLayer 中的所有要素上进行的,并且还支持高级查询。当 spatialRelationship 设置为intersectscontainsdisjoint 时,支持空间查询。

获取场景图层的几何/范围

3D 对象场景图层不返回原始几何体,因为这是一种二进制格式。要获取空间信息,可以查询 SceneLayer 中要素的 2D 范围或 3D 范围可以使用 SceneLayer 上的 queryExtent() 方法检索所有要素(甚至是尚未加载的要素)的 2D 范围。仅当图层具有关联的要素图层时,此方法才会成功。只能使用 SceneLayerView 上的 queryExtent() 方法查询已加载的要素,才能查询 3D 范围。

点场景在任何查询方法上将 returnGeometry 设置为 true 时返回几何图形。此外,可以使用 SceneLayer 上的 queryExtent() 检索多个点的 2D 范围。无法仅获取具有缓存属性的 SceneLayer 的范围。

编辑:属性更新

目前,只有场景图层上的 applyEdits 方法支持属性更新。可编辑 SceneLayer 的先决条件是启用了编辑和更改跟踪的关联 FeatureLayer。有关发布的详细信息,请参阅场景图层指南主题的发布部分。具有已编辑属性的要素将使用更新的属性进行渲染,直到已编辑要素的数量超过 50,000。之后,将不检索已编辑的属性,并使用缓存的过时属性来渲染要素。在达到此最大数量之前重新构建场景图层的缓存。

场景图层属性更新的一个用例是更改状态和类型,请检查此示例:示例 - SceneLayer 属性编辑 在此示例中,可编辑的要素图层将共享给所有人。因此,每个人都将能够修改此数据。在实际用例中,只有授权编辑者才能编辑图层。在这种情况下,关联的要素图层不会公开共享,并且只有编辑者才能访问。要使编辑内容对场景图层用户可见,必须 重新构建缓存

另请参阅:

构造函数

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

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

示例:
// Typical usage
let layer = new SceneLayer({
  // URL to the service
  url: "https://www.geosceneonline.cn/server/rest/services/Hosted/4%E5%85%A8%E5%B1%80%E5%9C%BA%E6%99%AF_WSL1/layers/0"
});

                              

属性概述

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

用于访问资源或服务的授权字符串。

更多信息 SceneLayer
Object 更多信息

描述图层支持的功能。

更多信息 SceneLayer
String 更多信息

场景服务定义的版权文本。

更多信息 SceneLayer
String 更多信息

类的名称。

更多信息 Accessor
String 更多信息

用于筛选要素的 SQL where 子句。

更多信息 SceneLayer
Object 更多信息

指定图形在垂直轴 (z) 上的放置方式。

更多信息 SceneLayer
Collection<number> 更多信息

要从渲染中排除的对象 ID 的列表。

更多信息 SceneLayer
FeatureReductionSelection 更多信息

配置用于整理视图中重叠要素的方法。

更多信息 SceneLayer
Field[] 更多信息

图层中可访问的字段数组。

更多信息 SceneLayer
FieldsIndex 更多信息

可用于按名称对字段进行不区分大小写的查找的便捷属性。

更多信息 SceneLayer
LayerFloorInfo 更多信息

将场景图层配置为楼层感知图层时,它将定义 floorInfo 属性。

更多信息 SceneLayer
范围 更多信息

图层的全图范围。

更多信息 Layer
String 更多信息

图层中要素的几何类型。

更多信息 SceneLayer
String 更多信息

分配给图层的唯一 ID。

更多信息 Layer
LabelClass[] 更多信息

此图层的标签定义,指定为 LabelClass 的数组。

更多信息 SceneLayer
布尔值 更多信息

指示是否显示此图层的标注。

更多信息 SceneLayer
整数 更多信息

场景服务图层的图层 ID 或图层索引。

更多信息 SceneLayer
布尔值 更多信息

指示图层是否将包括在图例中。

更多信息 SceneLayer
String 更多信息

指示图层在图层列表微件中的显示方式。

更多信息 Layer
布尔值 更多信息

指示图层的资源是否已加载。

更多信息 Layer
错误 更多信息

如果加载时发生错误,则返回 Error 对象。

更多信息 Layer
String 更多信息

表示加载操作的状态。

更多信息 Layer
Object[] 更多信息

加载时发生的警告列表。

更多信息 Layer
整数 更多信息

图层在视图中可见时的最大比例 (放至最大)。

更多信息 SceneLayer
整数 更多信息

图层在视图中可见的最小比例(最大缩小)。

更多信息 SceneLayer
String 更多信息

包含每个图形的对象 ID 的字段的名称。

更多信息 SceneLayer
整数 更多信息

图层不透明。

更多信息 Layer
String[] 更多信息

服务中要包含在每个要素中的字段名称的数组。

更多信息 SceneLayer
布尔值 更多信息

指示在单击图层中的要素时是否显示弹出窗口。

更多信息 SceneLayer
PopupTemplate 更多信息

图层的弹窗模板。

更多信息 SceneLayer
PortalItem 更多信息

从中加载图层的门户项目。

更多信息 SceneLayer
Renderer 更多信息

分配给图层的渲染器。

更多信息 SceneLayer
布尔值 更多信息

将透视缩放应用于 SceneView 中屏幕大小的点符号。

更多信息 SceneLayer
SpatialReference 更多信息

图层的空间参考。

更多信息 SceneLayer
String 更多信息

图层的标题,用于在图例图层列表微件等位置中标识图层。

更多信息 SceneLayer
String 更多信息 对于SceneLayer 类型始终为 "scene" 更多信息 SceneLayer
String 更多信息

图层或场景服务的 REST 端点的 URL。

更多信息 SceneLayer
Object 更多信息

用于此服务的场景服务规范的版本。

更多信息 SceneLayer
布尔值 更多信息

指示图层在视图中是否可见。

更多信息 Layer

属性详情

apiKey String
起始版本:GeoScene API for JavaScript 4.20

用于访问资源或服务的授权字符串。API 密钥GeoScene Developer 仪表板中生成和管理。API 密钥明确绑定到 GeoScene 帐户; 它还用于监视服务使用情况。在特定类上设置细粒度 API 密钥会覆盖全局 API 密钥

示例:
// set the api key to access a protected service
const layer = new FeatureLayer({
  url: serviceUrl,
  apiKey: "YOUR_API_KEY"
});

                            
capabilities Objectreadonly

描述图层支持的功能。

属性:
query Object

描述可对图层中的要素执行的查询 操作。

规范:
maxRecordCount Number

将为给定查询返回的最大记录数。

supportsCentroid Boolean

指示是否可以返回与每个面要素关联的几何质心。此操作仅在 GeoScene Online 托管要素服务中心受支持。

supportsDistance Boolean

指示图层的查询操作是否支持输入几何的缓冲区距离。

supportsDistinct Boolean

指示图层是否支持基于 outFields 中指定的字段查询非重复值。

supportsDisjointSpatialRelationship Boolean

指示查询操作是否支持 disjoint 空间关系 。这仅对托管要素服务有效。

supportsCacheHint Boolean

指示查询操作是否支持 缓存提示。这仅对托管要素服务有效。

supportsExtent Boolean

指示图层的查询响应是否包括要素范围。在 2.0 版本中,此选项仅适用于托管要素服务。在 2.0 版本中,它可用于托管和非托管要素服务。

supportsGeometryProperties Boolean

指示图层的查询响应是否包含几何属性,包括形状面积和长度属性。自 2016 年 12 月以来创建的 GeoScene Online 托管要素服务和自 2.0 版起的 GeoScene Enterprise 要素服务支持此操作。

supportsHavingClause Boolean

指示图层是否支持服务上的 having 子句。需要 GeoScene Server 服务 2.0 或更高版本。

supportsOrderBy Boolean

指示查询响应中返回的要素是否可以按一个或多个字段排序。需要 GeoScene Server 服务 2.0 或更高。

supportsPagination Boolean

指示查询响应是否支持分页。需要 GeoScene Server 服务 2.0 或更高。

supportsPercentileStatistics Boolean

指示图层是否支持百分位数统计类型。需要 GeoScene Server 服务 2.0 或更高。

supportsQueryGeometry Boolean

指示查询响应是否包括查询几何图形。这仅对托管要素服务有效。

supportsQuantization Boolean

指示查询操作是否支持将几何图形投影到虚拟网格上。需要 GeoScene Server 服务 2.0 或更高版本。

supportsQuantizationEditMode Boolean

指示查询操作是否支持设计为在编辑模式(给定空间参考处的最高分辨率)中使用的量化。需要 GeoScene Server 服务 2.0 或更高版本。

supportsResultType Boolean

指示是否可以控制查询操作返回的要素数。

supportsSqlExpression Boolean

指示查询操作是否支持 SQL 表达式。

supportsStandardizedQueriesOnly Boolean

指示查询操作是否支持使用标准化查询。在此处了解有关标准化查询的更多信息。

supportsStatistics Boolean

指示图层是否支持基于字段的统计函数。需要 GeoScene Server 服务 2.0 或更高版本。

supportsHistoricMoment Boolean

指示图层是否支持历史时刻查询。需要 GeoScene Server 服务 2.0 或更高版本。

data Object

描述图层中数据的特征。

规范:
supportsZ Boolean

指示图层中的要素是否支持 z 值。对于场景图层,这始终是正确的。

editing Object

描述可通过 applyEdits() 对图层中的要素执行的编辑功能。

规范:
supportsGeometryUpdate Boolean

指示图层中要素的几何是否可以编辑。目前不支持对场景图层进行几何编辑。

supportsGlobalId Boolean

指示客户端提供的 globalId 值是否在 applyEdits 中使用。

supportsRollbackOnFailure Boolean

指示在编辑要素时是否可以将 rollbackOnFailureEnabled 参数设置为 truefalse

operations Object

描述可对图层中的要素执行的操作。

规范:
supportsAdd Boolean

指示是否可以向图层添加新要素。对于场景图层,这始终为 false。

supportsDelete Boolean

指示是否可以向图层删除新要素。对于场景图层,这始终为 false。

supportsUpdate Boolean

指示图层中要素的几何是否可以更新

supportsEditing Boolean

指示图层中要素的几何是否可以编辑。使用 supportsAddsupportsUpdatesupportsDelete 来确定支持哪些编辑操作。

场景服务定义的版权文本。

declaredClass Stringreadonly inherited
起始版本:GeoScene API for JavaScript 4.7

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

definitionExpression String
起始版本:GeoScene API for JavaScript 4.3

用于筛选要素的 SQL where 子句。只有满足定义表达式的特征才会保留在客户端上并显示在视图中。当仅应显示图层中数据的子集时,设置定义表达式非常有用。

设置图层的定义表达式会自动更新所有图层视图。

如果在将图层添加到地图后设置定义表达式,则视图将自动刷新以显示满足新定义表达式的要素。

弃用警告

以后设置 definitionExpression 加载客户端上的所有节点,丢弃不匹配过滤器的要素。这使用较少的内存,但过滤器更新将比当前版本慢。仅当过滤器很少更改时才应使用 definitionExpression,并且希望删除过滤后的要素以释放内存以供场景中的其他数据使用。

对于快速客户端过滤器,请改用 SceneLayerView.filterwhere 属性。

示例:
let layer = new SceneLayer({
   url: "https://www.geosceneonline.cn/server/rest/services/Hosted/1864%E5%B7%A5%E5%8E%82%E5%9C%BA%E6%99%AF4_WSL1/SceneServer/layers/0",
   definitionExpression: "usage = 'Residential' AND totalHeight < 5"
 });

                            
elevationInfo Object

指定图形在垂直轴 (z) 上的放置方式。有关如何使用此属性的示例,请参阅 ElevationInfo 示例

此属性仅在使用absolute-height模式时影响 3D 对象场景图层。具有几何图形的 SceneLayers 支持下面列出的所有高程模式。

属性:
mode String

定义图形相对于地形表面的放置方式。有关可能值的列表,请参阅下表。

模式 说明
on-the-ground 图形叠加在地形表面上。这是使用 ObjectSymbol3DLayers 渲染 几何的要素的默认值。
relative-to-ground 图形放置在相对于地形表面的高程处。图形的高程是通过对地形高程、offset 值和几何图形的 z 值(如果存在)求和来确定的。这是使用 IconSymbol3DLayers 渲染 几何图形的默认值。
absolute-height 图形放置在海拔的绝对高程(z 值)处。此 z 值是通过将 offset 值和几何的 z 值(如果存在)相加来确定的。它没有考虑地形的高程。这是具有 3D 对象几何和几何(其中 hasZtrue)的要素的默认值。
relative-to-scene 图形与建筑物和其他对象对齐,这些对象是 3D 对象场景图层集成网格图层的一部分,具体取决于哪个具有较高的立面。如果图形不在建筑物或任何其他要素的正上方,则它将与地形表面高程对齐。如果存在,则将忽略 z 值。

可能值:"on-the-ground"|"relative-to-ground"|"absolute-height"|"relative-to-scene"

offset Number
可选
默认值:0

如果存在,则将忽略 z 值。当 mode = "on-the-ground" 时,此属性不起作用。

unit String
可选
默认值:meters

offset 值的单位。

可能值:"feet"|"meters"|"kilometers"|"miles"|"us-feet"|"yards"

excludeObjectIds Collection<number>
起始版本:GeoScene API for JavaScript 4.23

要从渲染中排除的对象 ID 的列表。

起始版本:GeoScene API for JavaScript 4.4

配置用于整理视图中重叠要素的方法。如果未设置(或设置为 null)此属性,则单独绘制每个要素。

仅具有非叠加图标文本符号图层的点场景图层支持此属性。

declutter

已知限制

在点应用要素还原时,SceneLayer 图层更新速度较慢。这将在即将发布的版本中得到解决。

另请参阅:
示例:
layer.featureReduction = {
  type: "selection"
};

                            
fields Field[]readonly

图层中可访问的字段数组。根据场景服务的不同,字段对某些功能的支持可能有限。使用 getFieldUsageInfo() 查询可能使用特定字段的上下文(呈现、标记、弹出窗口或查询)。

fieldsIndex FieldsIndexreadonly
起始版本:GeoScene API for JavaScript 4.12

可用于按名称对字段进行不区分大小写的查找的便捷属性。它还可以提供图层中日期字段的列表。

示例:
// lookup a field by name. name is case-insensitive
const field = layer.fieldsIndex.get("SoMeFiEld");

if (field) {
  console.log(field.name); // SomeField
}

                            
起始版本:GeoScene API for JavaScript 4.19

将场景图层配置为楼层感知图层时,它将定义 floorInfo 属性。楼层感知图层是包含室内 GIS 数据的图层,这些数据表示可位于建筑物特定楼层的要素。

图层的全图范围。默认情况下,这是全球性的。此属性可用于设置视图范围以匹配图层的范围,以便其要素显示为填充视图。请参阅下面的示例代码段。

示例:
// Once the layer loads, set the view's extent to the layer's fullextent
layer.when(function(){
  view.extent = layer.fullExtent;
});

                            
geometryType String

图层中要素的几何类型。

可能值:"point"|"mesh"

分配给图层的唯一 ID。如果未由开发人员设置,则会在加载图层时自动生成。

labelingInfo LabelClass[]

此图层的标签定义,指定为 LabelClass 的数组。使用此属性可以指定图层的标注属性,例如标注表达式、放置和大小。

已知限制

每个要素只能有一个标签。具有不同 where 子句的多个标准分类可用于对属于同一图层的不同要素具有不同的标注样式(例如,湖泊为蓝色标注,公园为绿色标注)。

另请参阅:
示例:
let statesLabelClass = new LabelClass({
  labelExpressionInfo: { expression: "$feature.NAME" },
  symbol: {
    type: "label-3d",  // autocasts as new LabelSymbol3D()
    symbolLayers: [{
      type: "text",  // autocasts as new TextSymbol3DLayer()
      material: { color: [ 49,163,84 ] },
      size: 12  // points
    }]
  }
});

sceneLayer.labelingInfo = [ statesLabelClass ];

                            
labelsVisible Boolean

指示是否显示此图层的标注。如果为 true,标签将按照 labelingInfo 属性中的定义显示。

默认值:true
另请参阅:
layerId Number

场景服务图层的图层 ID 或图层索引。这在从包含多个图层的服务加载具有 portalItem 属性的单个图层时特别有用。您可以在以下两种情况之一中指定此值:

  • 通过 portalItem 属性加载图层时。
  • 将图层 url 直接指向场景服务时。

如果上述任一场景中均未指定 layerId,则选择服务中的第一层(layerId = 0)。

示例:
// while these examples use a SceneLayer, the same pattern can be
// used for other layers that may be loaded from portalItem ids

// loads the third layer in the given Portal Item
let layer = new SceneLayer({
  portalItem: {
    id: "73df987984b24094b848d580eb83b0fb"
  },
  layerId: 2
});

                            
// If not specified, the first layer (layerId: 0) will be returned
let layer = new SceneLayer({
  portalItem: {
    id: "73df987984b24094b848d580eb83b0fb"
  }
});

                            
// Can also be used if URL points to service and not layer
let layer = new SceneLayer({
  url: "https://www.geosceneonline.cn/server/rest/services/Hosted/4%E5%85%A8%E5%B1%80%E5%9C%BA%E6%99%AF_WSL1/SceneServer",
  layerId: 0  // Notice that the url doesn't end with /2
});

                            
// This code returns the same layer as the previous snippet
let layer = new SceneLayer({
  url: "https://www.geosceneonline.cn/server/rest/services/Hosted/4%E5%85%A8%E5%B1%80%E5%9C%BA%E6%99%AF_WSL1/SceneServer/layers/0",
  // The layer id is specified in the URL
});

                            
legendEnabled Boolean

指示图层是否将包括在图例中。

默认值:true
listMode String inherited

指示图层在图层列表微件中的显示方式。下面列出可能值为:

说明
show 该图层在内容列表中可见。
hide 图层隐藏在内容列表中。
hide-children 如果图层时 GroupLayerBuildingSceneLayerKMLLayerMapImageLayer, TileLayerWMSLayer,请从内容列表中隐藏子图层。

可能值:"show"|"hide"|"hide-children"

默认值:show
loaded Booleanreadonly inherited

指示图层的资源是否已加载。当 true 时,可以访问对象的所有属性。

默认值:false
loadError Errorreadonly inherited

如果加载时发生错误,则返回 Error 对象。

默认值:null
loadStatus Stringreadonly inherited

表示加载操作的状态。

说明
not-loaded 对象的资源尚未加载。
loading 对象的资源当前正在加载。
loaded 对象的资源已加载且未出现错误。
failed 无法加载对象的资源。有关更多详情,请参阅加载错误

可能值:"not-loaded"|"loading"|"failed"|"loaded"

默认值:not-loaded
loadWarnings Object[]readonly inherited

加载时发生的警告列表。

maxScale Number

图层在视图中可见时的最大比例 (放至最大)。如果地图放大至超过此比例,则图层将不可见。值为 0 时,表示该图层没有最大比例。maxScale 值应始终小于 minScale 值,并且大于或等于服务规范。

默认值:0
示例:
// The layer will not be visible when the view is zoomed in beyond a scale of 1:1,000
layer.maxScale = 1000;

                            
// The layer's visibility is not restricted to a maximum scale.
layer.maxScale = 0;

                            
minScale Number

图层在视图中可见的最小比例(最大缩小)。如果地图缩小到超出此比例,则图层将不可见。值为 0 表示该图层没有最小比例。minScale 应始终大于 maxScale 值,并且小于或等于服务规范。

默认值:0
示例:
// The layer will not be visible when the view is zoomed out beyond a scale of 1:3,000,000
layer.minScale = 3000000;

                            
// The layer's visibility is not restricted to a minimum scale.
layer.minScale = 0;

                            
objectIdField String

包含每个图形的对象 ID 的字段的名称。如果未明确指定,则通过采用 oid 类型的第一个字段自动从服务的字段派生。

另请参阅:

图层不透明。此值的范围在 10 之间,其中 0 是 100% 透明,而 1 为完全不透明。

默认值:1
示例:
// Makes the layer 50% transparent
layer.opacity = 0.5;

                            
outFields String[]
起始版本:GeoScene API for JavaScript 4.12

服务中要包含在每个要素中的字段名称的数组。要从图层中的所有字段中获取值,请使用 ["*"]。将请求在 outFields 中指定的字段以及用于渲染标记和设置图层高程信息的必填字段。必填字段和 outFields 用于填充 SceneLayerView.availableFields。如果字段不是用于呈现的必填字段的一部分,则设置此属性以包括将用于客户端查询的字段。

默认值:null
另请参阅:
示例:
// Includes all fields from the service in the layer
sl.outFields = ["*"];

                            
// Get the specified fields from the service in the layer
// These fields will be added to SceneLayerView.availableFields
// along with rendering and labeling fields. Use these fields
// for client-side querying.
sl.outFields = ["NAME", "POP_2010", "FIPS", "AREA"];

                            
// set the outFields for the layer coming from webscene
webscene.when(function () {
  layer = webscene.layers.getItemAt(1);
  layer.outFields = ["*"];
});

                            
popupEnabled Boolean

指示在单击图层中的要素时是否显示弹出窗口。图层需要有一个弹出窗口模板 来定义应在弹出窗口中显示的信息。或者,如果 Popup.defaultPopupTemplateEnabled 设置为 true,则可以自动使用默认弹出窗口模板。

默认值:true
另请参阅:
popupTemplate PopupTemplateautocast

图层的弹窗模板。在图层上设置时,popupTemplate 允许用户在使用文本和/或图表选择功能时访问属性并在视图的弹出窗口中显示其值。有关 PopupTemplate 如何与 FeatureLayer 交互的示例,请参阅 PopupTemplate 示例。在此图层类型上设置 PopupTemplate 的方式与 FeatureLayer 相同。

Popup.defaultPopupTemplateEnabled 设置为 true 时,如果没有定义 popupTemplate ,则会自动使用默认弹出模板。

另请参阅:
portalItem PortalItem

从中加载图层的门户项目。如果门户项目引用要素服务或场景服务,则可以使用 layerId 属性指定要加载的单个图层。

从版本 4.17 开始,可以从 GeoScene Online 和 GeoScene Enterprise 中托管的要素服务项目加载表。这仅适用于要素图层,如果 FeatureLayer.isTable 返回 true,将成功加载。

示例:
// While this example uses FeatureLayer, this same pattern can be
// used for other layers that may be loaded from portalItem ids.
const lyr = new FeatureLayer({
  portalItem: {  // autocasts as new PortalItem()
    id: "caa9bd9da1f4487cb4989824053bb847"
  }  // the first layer in the service is returned
});

                            
// Set hostname when using an on-premise portal (default is GeoScene Online)
// geosceneConfig.portalUrl = "http://myHostName.geoscene.cn/geoscene";

// While this example uses FeatureLayer, this same pattern can be
// used for SceneLayers.
const lyr = new FeatureLayer({
  portalItem: {  // autocasts as new PortalItem()
    id: "8d26f04f31f642b6828b7023b84c2188"
  },
  // loads the third item in the given feature service
  layerId: 2
});

                            
// This snippet loads a table hosted in GeoScene Online.
const table = new FeatureLayer({
  portalItem: { // autocasts as geoscene/portal/PortalItem
    id: "123f4410054b43d7a0bacc1533ceb8dc"
  }
});

// Before adding the table to the map, it must first be loaded and confirm it is the right type.
table.load().then(function() {
  if (table.isTable) {
    map.tables.add(table);
  }
});

                            

分配给图层的渲染器。渲染器定义了如何可视化层中的每个要素。根据渲染器类型,可以使用相同的符号或基于提供的属性字段或函数的值使用不同的符号来可视化要素。

另请参阅:
示例:
// all features in the layer will be visualized with
// a blue color
layer.renderer = {
  type: "simple",  // autocasts as new SimpleRenderer()
  symbol: {
    type: "mesh-3d",  // autocasts as new MeshSymbol3D()
    symbolLayers: [{
      type: "fill",  // autocasts as new FillSymbol3DLayer()
      material: { color: "blue" }
    }]
  }
};

                            
screenSizePerspectiveEnabled Boolean
起始版本:GeoScene API for JavaScript 4.4

将透视缩放应用于 SceneView 中屏幕大小的点符号。如果为 true,屏幕大小的对象(如图标标签标注 )通过将特定透视投影应用于要素大小,可以更好地集成到 3D 场景中。这仅适用于使用 SceneView 时。

layer.screenSizePerspectiveEnabled = true

screen-size-perspective

layer.screenSizePerspectiveEnabled = false

no-screen-size-perspective

已知限制

屏幕尺寸透视目前未针对摄像机非常靠近地面的情况或点要素远离地面的场景进行优化。在这些情况下,最好关闭屏幕大小透视。由于屏幕尺寸透视会根据到摄像机的距离而改变尺寸,因此在使用尺寸可视变量时应将其设置为 false。

默认值:true
另请参阅:
spatialReference SpatialReferenceautocast

图层的空间参考。

title String

图层的标题,用于在图例图层列表微件等位置中标识图层。

按服务 URL 加载图层时,标题派生自服务名称。如果服务具有多个图层,则每个图层的标题将是服务名称和图层名称的串联。从门户项目加载图层时,将改用门户项目的标题。最后,如果将图层作为 web 地图或 webscene 的一部分进行加载,则将使用存储在 webmap/webscene 中的图层标题。

type Stringreadonly

对于 SceneLayer 类型总为 "scene"

url String

图层或场景服务的 REST 端点的 URL。URL 可以指向 GeoScene Enterprise 或 GeoScene Online 上的资源。

当 url 直接指向服务而不是特定层时,可以使用 layerId 属性指定该层。如果未指定 layerId,则它将默认为服务中的第一个图层。

示例:
// Layer from Scene Service on GeoScene Server
let sceneLayer = new SceneLayer({
  url: "hhttps://www.geosceneonline.cn/server/rest/services/Hosted/4%E5%85%A8%E5%B1%80%E5%9C%BA%E6%99%AF_WSL1/SceneServer/layers/0"
});

                            
// Can also be used if URL points to service and not layer
let layer = new SceneLayer({
  // Notice that the url doesn't end with /0
  url: "https://www.geosceneonline.cn/server/rest/services/Hosted/4%E5%85%A8%E5%B1%80%E5%9C%BA%E6%99%AF_WSL1/SceneServer",
  layerId: 0
});

                            
version Objectreadonly

用于此服务的场景服务规范的版本。

属性:
major Number

场景图层的主要版本。

minor Number

场景图层的次要版本。

versionString String

场景图层的完整版本字符串。

示例:
// Prints the version to the console - e.g. 1.4, 1.5, etc.
console.log(layer.version.versionString);

                            

指示图层在视图中是否可见。当为 false 时,图层可能仍会添加到视图中引用的 地图 实例,但其要素在视图中将不可见。

默认值:true
示例:
// The layer is no longer visible in the view
layer.visible = false;

                            

方法概述

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

将属性编辑应用于关联 FeatureLayer 中的要素。

更多信息 SceneLayer
更多信息

如果 load() 操作已在进行中,则取消该操作。

更多信息 Layer
Promise<LayerView> 更多信息

当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapViewSceneView)调用。

更多信息 Layer
PopupTemplate 更多信息

为图层创建默认弹出窗口模板,并使用图层的所有字段进行填充。

更多信息 SceneLayer
查询 更多信息

创建可用于获取满足图层当前定义表达式的要素的查询对象。

更多信息 SceneLayer
更多信息

销毁图层和任何关联的资源(包括其 portalItem,如果它是图层上的属性)。

更多信息 Layer
布尔值 更多信息

在实例上发出事件。

更多信息 Layer
Promise<Object> 更多信息

在图层可用时提取图层的自定义归因数据。

更多信息 Layer
Field 更多信息

返回字段名称的 Field 实例(不区分大小写)。

更多信息 SceneLayer
属性域 更多信息

返回与给定字段名称关联的

更多信息 SceneLayer
Object 更多信息

获取字段用法信息。

更多信息 SceneLayer
布尔值 更多信息

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

更多信息 Layer
布尔值 更多信息

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

更多信息 Layer
布尔值 更多信息

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

更多信息 Layer
布尔值 更多信息

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

更多信息 Layer
Promise 更多信息

加载此类引用的资源。

更多信息 Layer
Object 更多信息

在实例上注册事件处理程序。

更多信息 Layer
Object 更多信息

从服务中查询给定字段的缓存统计信息。

更多信息 SceneLayer
Promise<Object> 更多信息

对关联的要素服务执行查询并返回满足查询的要素的 2D 范围

更多信息 SceneLayer
Promise<Number> 更多信息

对关联的要素服务执行查询并返回满足查询的要素数。

更多信息 SceneLayer
Promise<FeatureSet> 更多信息

对关联的要素服务执行查询 并返回 FeatureSet

更多信息 SceneLayer
Promise<Number[]> 更多信息

对关联的要素服务执行查询并返回满足输入查询的要素的 ObjectID 数组。

更多信息 SceneLayer
Promise 更多信息

when() 可以在创建类的实例后利用。

更多信息 Layer

方法详情

applyEdits(edits, options){Promise<Object>}

将属性编辑应用于关联 FeatureLayer 中的要素。可编辑 SceneLayer 的先决条件是启用了编辑和更改跟踪的关联 FeatureLayer具有已编辑属性的要素将使用更新的属性进行渲染,直到已编辑要素的数量超过 50,000。之后,将不检索已编辑的属性,并使用缓存的过时属性来渲染要素。有关更多详细信息,请参见编辑部分。

参数:
规范:
edits Object

包含要更新的要素的对象。

规范:
updateFeatures Graphic[]|Collection<Graphic>
可选

要更新的数组或要素集合。每个要素都必须具有有效的 objectId。更新要素时必须提供不可为空的字段的值。日期字段必须具有表示通用时间的 值。

options Object
可选

编辑要素时要指定的其他编辑选项。

规范:
rollbackOnFailureEnabled Boolean
可选

指示是否仅当所有提交的编辑都成功时才应用编辑。如果为 false,则即使某些提交的编辑失败,服务器也会应用成功的编辑。如果为 true,则服务器将仅在所有编辑均成功后才应用编辑。如果使用此参数,图层的 capabilities.editing.supportsRollbackOnFailure 属性必须为 true。如果某个层的 supportsRollbackOnFailurefalse,则无论参数如何设置,rollbackOnFailureEnabled 都始终为 true。

globalIdUsed Boolean
可选

指示是否可以使用要素的 globalId 应用编辑。仅当图层的 geometryType 属性为 true 时,此参数才适用。当为 false 时,与要素一起提交的 globalIds 将被忽略,并且服务将新的 globalIds 分配给新要素。如果为 true,则 globalIds 必须与新要素一起提交。更新现有要素时,如果 globalIdUsedfalse,则必须提供要更新要素的 objectIds。如果 globalIdUsedtrue,则必须提供要更新的要素的 globalIds。删除现有要素时,请将此属性设置为 false,因为删除操作仅接受 API 当前版本的 objectIds

返回:
类型 说明
Promise<Object> 解析为包含编辑结果的对象。有关详细信息,请参阅下面的对象规范表。
属性 类型 说明
updateFeatureResults FeatureEditResult[] 更新要素的结果。
cancelLoad()inherited

如果 load() 操作已在进行中,则取消该操作。

createLayerView(view, options){Promise<LayerView>}inherited

当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapViewSceneView)调用。此方法在内部使用,没有直接调用它的用例。

参数:
view *

父视图。

options Object
可选

指定其他选项的对象。有关此对象的必需属性,请参阅下面的对象规范表。

规范:
可选

中止层视图创建的信号。

返回:
类型 说明
Promise<LayerView> 使用 LayerView 实例进行解析。
另请参阅:
createPopupTemplate(options){PopupTemplate}
起始版本:GeoScene API for JavaScript 4.11

为图层创建默认弹出窗口模板,并使用图层的所有字段进行填充。

参数:
可选

用于创建弹出模板的选项。

返回:
类型 说明
PopupTemplate 弹出模板,如果图层没有任何字段,则为 null
createQuery(){Query}
起始版本:GeoScene API for JavaScript 4.3

创建可用于获取满足图层当前定义表达式的要素的查询对象。查询只能在图层上使用,而不能在图层视图上使用。

返回:
类型 说明
查询 表示图层定义表达式的查询对象。
destroy()inherited
起始版本:GeoScene API for JavaScript 4.17

销毁图层和任何关联的资源(包括其 portalItem,如果它是图层上的属性)。该图层一旦被破坏就不能再使用了。

被破坏的图层将从其父对象(如 MapWebMapWebSceneBasemapGroundGroupLayer)中移除。

另请参阅:
emit(type, event){Boolean}inherited
起始版本:GeoScene API for JavaScript 4.5

在实例上发出事件。仅当创建此类的子类时,才应使用此方法。

参数:
type String

事件的名称。

event Object
可选

事件负载。

返回:
类型 说明
布尔值 true 如果通知了侦听器
fetchAttributionData(){Promise<Object>}inherited

在图层可用时提取图层的自定义归因数据。

返回:
类型 说明
Promise<Object> 解析为包含图层自定义属性数据的对象。
getField(fieldName){Field}
起始版本:GeoScene API for JavaScript 4.12

返回字段名称的 Field 实例(不区分大小写)。

参数:
fieldName String

字段的名称。

返回:
类型 说明
Field 匹配字段或 undefined
另请参阅:
getFieldDomain(fieldName, options){Domain}
起始版本:GeoScene API for JavaScript 4.12

返回与给定字段名称关联的。域可以是 CodedValueDomainRangeDomain

参数:
fieldName String

字段的名称。

options Object
可选

指定其他选项的对象。有关此对象的必需属性,请参阅下面的对象规范表。

规范:
feature Graphic

分配到的功能。

返回:
类型 说明
属性域 与给定要素的给定字段名称关联的域对象。
getFieldUsageInfo(fieldName){Object}

获取字段用法信息。字段的使用取决于它是否存储为场景服务缓存的一部分。返回的对象包含以下使用信息:

属性 类型 说明
portsRenderer 布尔值 指示字段可以在呈现器中使用(例如在可视变量中),请参阅渲染器
supportsLabelingInfo 布尔值 表示一个字段可以用于标注,请参见 labelingInfo
supportsPopupTemplate 布尔值 指示字段可以在弹出模板中使用,请参阅 popupTemplate。
supportsLayerQuery 布尔值 指示字段可用于图层查询,请参阅 queryFeatures()
参数:
fieldName String

要获取其使用情况信息的字段的名称。

返回:
类型 说明
Object 字段用法。
hasEventListener(type){Boolean}inherited

指示实例上是否存在与提供的事件名称匹配的事件侦听器。

参数:
type String

事件的名称。

返回:
类型 说明
布尔值 如果类支持输入事件,则返回 true。
isFulfilled(){Boolean}inherited

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

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

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

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

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

返回:
类型 说明
布尔值 指示创建类的实例是否已解决。
load(signal){Promise}inherited

加载此类引用的资源。如果视图是使用地图实例构造的,则此方法会自动为视图及其在地图中引用的所有资源执行。

开发人员在访问不会在视图中加载的资源时必须调用此方法。

load() 方法仅在第一次调用时触发资源的加载。随后的调用返回相同的promise。

可以提供一个 signal 来停止对 Loadable 实例的加载状态感兴趣。当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。

参数:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Promise 资源已加载时解析。
on(type, listener){Object}inherited

在实例上注册事件处理程序。调用此方法以将事件与侦听器挂钩。

参数:

要侦听的事件或事件数组。

listener Function

事件触发时调用的函数。

返回:
类型 说明
Object 返回带有 remove() 方法的事件处理程序,应调用该方法以停止侦听事件。
属性 类型 说明
remove 函数 调用时,从事件中删除侦听器。
示例:
view.on("click", function(event){
  // event is the event handle returned after the event fires.
  console.log(event.mapPoint);
});

                            
queryCachedStatistics(fieldName, options){Object}
起始版本:GeoScene API for JavaScript 4.13

从服务中查询给定字段的缓存统计信息。

参数:
fieldName String

要查询统计信息的字段的名称。

options Object
可选

具有以下属性的对象。

规范:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Object 统计文件。
示例:
layer.queryCachedStatistics("FIELDNAME")
 .then(function(statistics) {
   console.log(statistics);
});

                            
queryExtent(query, options){Promise<Object>}

对关联的要素服务执行查询并返回满足查询的要素的 2D 范围。目前,可以使用 SceneLayerView.queryExtent() 返回 3D 范围,但这只会返回视图中当前要素的 3D 范围。仅当 SceneLayer 具有关联的要素图层时,查询才会成功。如果关联的要素图层不可用,则会引发名为 scenelayer:query-not-available 的错误。在上面类描述的查询部分阅读更多关于查询的信息。

参数:
可选
Autocasts from Object

指定查询参数。

options Object
可选

具有以下属性的对象。

规范:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Promise<Object> 解析后,返回满足输入查询的要素的范围和计数。有关详细信息,请参阅下面的对象规范表。
属性 类型 说明
count 整数 满足输入查询的要素数。
extent 范围 满足查询的要素的范围。
另请参阅:
queryFeatureCount(query, options){Promise<Number>}

对关联的要素服务执行查询并返回满足查询的要素数。仅当启用图层的 supportsLayerQuery 功能时,查询才会成功。使用 getFieldUsageInfo() 方法检查图层是否支持查询。如果未启用查询,则会引发名为 scenelayer:query-not-available 的错误。在上面类描述的查询部分阅读更多关于查询的信息。

参数:
可选
Autocasts from Object

指定查询参数。

options Object
可选

具有以下属性的对象。

规范:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Promise<Number> 解析为满足查询的要素的计数。
另请参阅:
queryFeatures(query, options){Promise<FeatureSet>}

对关联的要素服务执行查询 并返回 FeatureSet。仅当启用图层的 supportsLayerQuery 功能时,查询才会成功。使用 getFieldUsageInfo() 方法检查图层是否支持查询。如果未启用查询,则会引发名为 scenelayer:query-not-available 的错误。在上面类描述的查询部分阅读更多关于查询的信息。

参数:
可选
Autocasts from Object

指定查询参数。

options Object
可选

具有以下属性的对象。

规范:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Promise<FeatureSet> 解析为包含满足查询的要素的 FeatureSet
另请参阅:
queryObjectIds(query, options){Promise<Number[]>}

对关联的要素服务执行查询并返回满足输入查询的要素的 ObjectID 数组。仅当启用图层的 supportsLayerQuery 功能时,查询才会成功。使用 getFieldUsageInfo() 方法检查图层是否支持查询。如果未启用查询,则会引发名为 scenelayer:query-not-available 的错误。在上面类描述的查询部分阅读更多关于查询的信息。

参数:
可选
Autocasts from Object

指定查询参数。

options Object
可选

具有以下属性的对象。

规范:
可选

可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为 AbortError错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。

返回:
类型 说明
Promise<Number[]> 解析为表示满足查询的要素的对象 ID 的数字数组。
另请参阅:
when(callback, errback){Promise}inherited
起始版本:GeoScene API for JavaScript 4.6

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

参数:
callback Function
可选

当 promise 解决时调用的函数。

errback Function
可选

当 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
});

                            

事件概述

隐藏继承事件 显示继承事件
名称 类型 描述
{view: View,layerView: LayerView}

                                
更多信息

在视图中创建并渲染图层的 LayerView 后激发。

更多信息 Layer
{view: View,error: Error}

                                
更多信息

在将图层添加到地图后,在创建 LayerView 期间发出错误时触发。

更多信息 Layer
{view: View,layerView: LayerView}

                                
更多信息

在图层的 LayerView 被销毁且不再在视图中渲染后触发。

更多信息 Layer

事件详述

layerview-createinherited

在视图中创建并渲染图层的 LayerView 后激发。

属性:
view View

创建 layerView 的视图。

layerView LayerView

在视图中呈现的 LayerView 表示 layer 中的图层。

另请参阅:
示例:
// 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 期间发出错误时触发。

属性:
view View

未能为发出此事件的图层创建层视图的视图。

error Error

描述图层视图创建失败原因的错误对象。

另请参阅:
示例:
// 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);
});

                            
layerview-destroyinherited

在图层的 LayerView 被销毁且不再在视图中渲染后触发。

属性:
view View

layerView 被销毁的视图。

layerView LayerView

表示图层的被破坏的 LayerView。

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