图层是地图的最基本组成部分。它是矢量图形或栅格影像形式的空间数据的集合,用于表示现实世界的现象。图层可能包含存储矢量数据的离散要素或存储栅格数据的连续像元/像素。
对于基于矢量的图层,例如 FeatureLayer 和 GraphicsLayer,图层中包含的每个要素都有一个 几何图形,允许将其渲染为具有空间上下文的图形在视图上。图层中的要素还包含提供附加信息的数据属性,这些信息可以在弹出窗口中查看并用于渲染图层。
要创建图层,您必须使用 Layer 的子类之一或调用 Layer.fromPortalItem() 方法。图层的一些示例包括:
- 道路和高速公路可以使用 FeatureLayer 中的线性要素来表示
- 地块可以在 MapImageLayer 中显示为多边形
- 卫星影像可以在 TileLayer 中显示为切片影像
可以将多个图层添加到同一地图中,并相互叠加,以进行可视化和分析。有关如何向地图添加图层 的其他信息,请参阅地图。图层在具有图层视图的视图中呈现。
从广义上讲,图层可用于以下目的:
- 显示地理环境的位置
- 查询数据
- 显示分类和/或数值数据
- 分析学
所有图层类型都继承自图层。要了解有关每种图层类型的详细信息,并比较和对比其数据源和功能,请参阅下表。
用于查询、可视化、分析数据的图层
图层类型 | 数据源 | 数据类型 | 特点 | 局限性 |
---|---|---|---|---|
FeatureLayer | GeoScene FeatureServer/MapServer、GeoScene 门户项目或客户端图形 | 作为矢量图形下载的点、折线、多边形 | 客户端处理、弹出模板、带有 2D 和 3D 符号的渲染器、查询、编辑(在未来版本中) | 显示的要素数量有限; 可能需要大量下载,具体取决于要素数量 |
GraphicsLayer | 客户端图形 | 显示为矢量图形的点、折线、多边形 | 没有几何模式。点、折线和多边形可以存储在单个图层中。 | 没有渲染器或弹出模板; 可视化和弹出模板是逐个图形处理的。 |
MapImageLayer | GeoScene MapServer, GeoScene portal item | 在单个影像中导出的点、折线、面、栅格 | 可能包含嵌套的子图层。渲染器、弹出窗口模板、不透明度和标签的服务器端处理,可快速显示许多要素。可用于显示、查询和联接已注册工作区中的数据 | 无编辑支持 |
SceneLayer | GeoScene SceneServer, GeoScene portal item | 点和多面体几何形状 | 可以在客户端上显示大量要素。非常适合渲染 3D 要素 | 没有2D支持;通过关联的要素图层进行编辑 |
CSVLayer | CSV 文件 | 作为矢量图形下载的点 | 客户端处理、弹出模板、带有 2D 和 3D 符号的渲染器 | 可能需要大量下载,具体取决于要素的数量 |
KMLLayer | KML 文件(.kml、.kmz)、GeoScene 门户项目 | 显示为矢量图形的点、折线、多边形 | 在地图或 web 地图中显示 KML 文件 | 没有3D支持;需要从geoscene.cn 或 GeoScene Enterprise 访问实用程序服务 |
StreamLayer | GeoScene StreamServer | 作为矢量图形下载的点 | 实时下载和更新功能位置 | N/A |
ImageryLayer | GeoScene ImageServer, GeoScene portal item | 导出为单个影像的栅格数据 | 客户端和服务器端像素过滤和渲染;弹出模板;查询 | N/A |
ImageryTileLayer | GeoScene ImageServer, GeoScene portal item | 导出为单个影像的栅格数据 | 客户端渲染;弹出模板 | N/A |
GeoJSONLayer | GeoJSON | 点、折线、多边形 | 渲染器、标签、编辑、弹出窗口 | 数据必须符合 RFC 7946 规范,该规范指出坐标位于空间参考 WGS84 中 |
OGCFeatureLayer | OGC API - Features | 点、折线、多边形 | 渲染器、标签、弹出窗口 | 数据必须符合 RFC 7946 规范,该规范指出坐标位于空间参考 WGS84 中 |
GeoRSSLayer | GeoRSS feed | 点、折线、多边形 | 无几何架构;弹出模板 | 没有3D支持;不支持渲染器 |
MapNotesLayer | GeoScene WebMap, GeoScene portal item | 点、折线、多边形、文本 | Web 地图中的地图注释 | 没有3D支持;只读 |
WCSLayer | WCS 服务 | 导出为单个影像的栅格数据 | OGC 规范 | N/A |
WFSLayer | WFS 服务, GeoScene portal item | 点、多点、线、面 | OGC 规范 | 数据必须为 GeoJSON 格式,仅支持版本 2.0.0 |
WMSLayer | WMS 服务, GeoScene portal item | 导出为单个影像的数据 | OGC 规范 | N/A |
BaseDynamicLayer | GeoScene MapServer, WMS 服务 | 导出为单个影像的数据 | 可以扩展此类以创建动态地图图层 | 没有3D支持;导出的影像无法在浏览器中缓存 |
BuildingSceneLayer | GeoScene SceneServer, GeoScene portal item | 数据在 BuildingGroupSublayers 中进行组织,其中包含 BuildingComponentSublayers | 可视化建筑物的复杂数字模型并与其组件进行交互 | 无 2D 支持 |
SubtypeGroupLayer | GeoScene FeatureServer/MapServer, GeoScene portal item | 作为矢量图形下载的点、折线、多边形 | 包含要素服务中每个子类型的子图层;每个子图层都可以使用自己的渲染器、弹出窗口和标注进行单独配置 | 没有3D支持;在子图层级别没有编辑支持 |
用于提供地理环境的图层
图层类型 | 数据源 | 数据类型 | 特点 | 局限性 |
---|---|---|---|---|
TileLayer | GeoScene MapServer, GeoScene portal item | 影像切片 | 大型数据集的性能更好;查询要素 | 无需编辑,客户端渲染或弹出模板;3D 视图中的一些架构限制。 |
BaseTileLayer | GeoScene MapServer, GeoScene portal item | 影像切片 | 可以扩展此类以创建自定义切片图层 | 无需编辑,客户端渲染或弹出模板;3D 视图中的一些架构限制。 |
VectorTileLayer | GeoScene Portal item | 渲染为矢量切片的点、折线和面 | 要素可在客户端设置样式并用作切片底图 | 无需编辑、客户端呈现或弹出模板。 |
IntegratedMeshLayer | GeoScene SceneServer, GeoScene portal item | 具有纹理的三角网 | 显示具有高细节的 3D 对象 | 无 2D 支持 |
VoxelLayer | GeoScene SceneServer, GeoScene portal item | 多维体素立方体 | 显示多维体积现象(例如地下模型) | 无 2D 支持 |
ElevationLayer | GeoScene ImageServer, GeoScene portal item | 切片高程网格/表面 | 在 3D 视图中渲染高程表面 | 无 2D 支持 |
BaseElevationLayer | GeoScene ImageServer, GeoScene portal item | 切片高程网格/表面 | 可以扩展此类以创建自定义高程图层 | 无 2D 支持 |
PointCloudLayer | GeoScene SceneServer, GeoScene portal item | 点云(例如从 LiDAR 收集) | 渲染器; 点云的快速显示 | 无 2D 支持 |
OpenStreetMapLayer | OpenStreetMap 切片服务 | 影像切片 | 显示 OpenStreetMap 切片内容 | N/A |
WMTSLayer | WMTS 切片服务、GeoScene 门户项目 | 影像切片 | OGC 规范 | N/A |
WebTileLayer | 非 GeoScene、非 OGC 和非 OSM 切片服务 | 影像切片 | N/A | 无需编辑、客户端呈现或弹出模板。 |
BingMapsLayer | 必应空间数据服务数据 | 影像切片 | 显示 Microsoft 的 Bing 切片内容 | 必应地图密钥是必需的; 支持三种地图样式:road , aerial 和 hybrid |
其他图层
图层类型 | 数据源 | 数据类型 | 特征 | 局限性 |
---|---|---|---|---|
GroupLayer | 其他图层类型的任意组合 | N/A | 将两个或多个图层合并为一个图层 | N/A |
属性概述
图层 | 类型 | 描述 | 类 | |
---|---|---|---|---|
String | 更多信息 类的名称。 | 更多信息 | Accessor | |
范围 | 更多信息 图层的全图范围。 | 更多信息 | Layer | |
String | 更多信息 分配给图层的唯一 ID。 | 更多信息 | Layer | |
String | 更多信息 指示图层在图层列表微件中的显示方式。 | 更多信息 | Layer | |
布尔值 | 更多信息 指示图层的资源是否已加载。 | 更多信息 | Layer | |
错误 | 更多信息 如果加载时发生错误,则返回 Error 对象。 | 更多信息 | Layer | |
String | 更多信息 表示加载操作的状态。 | 更多信息 | Layer | |
Object[] | 更多信息 加载时发生的警告列表。 | 更多信息 | Layer | |
整数 | 更多信息 图层不透明。 | 更多信息 | Layer | |
String | 更多信息 图层的标题,用于在“图层列表”微件等位置标识该图层。 | 更多信息 | Layer | |
String | 更多信息 图层类型提供了一种方便的方法来检查图层的类型,而无需导入特定的图层模块。 | 更多信息 | Layer | |
布尔值 | 更多信息 指示图层在视图中是否可见。 | 更多信息 | Layer |
属性详情
-
起始版本:GeoScene API 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 String
-
分配给图层的唯一 ID。如果未由开发人员设置,则会在加载图层时自动生成。
-
listMode String
-
指示图层在图层列表微件中的显示方式。下面列出可能值为:
值 说明 show 该图层在内容列表中可见。 hide 图层隐藏在内容列表中。 hide-children 如果图层时 GroupLayer, BuildingSceneLayer, KMLLayer, MapImageLayer, TileLayer 或 WMSLayer,请从内容列表中隐藏子图层。 可能值:"show"|"hide"|"hide-children"
- 默认值:show
-
loaded Booleanreadonly
-
指示图层的资源是否已加载。当
true
时,可以访问对象的所有属性。- 默认值:false
-
loadError Errorreadonly
-
如果加载时发生错误,则返回 Error 对象。
- 默认值:null
-
loadStatus Stringreadonly
-
表示加载操作的状态。
值 说明 not-loaded 对象的资源尚未加载。 loading 对象的资源当前正在加载。 loaded 对象的资源已加载且未出现错误。 failed 无法加载对象的资源。有关更多详情,请参阅加载错误。 可能值:"not-loaded"|"loading"|"failed"|"loaded"
- 默认值:not-loaded
-
加载时发生的警告列表。
-
opacity Number
-
图层不透明。此值的范围在
1
到0
之间,其中0
是 100% 透明,而1
为完全不透明。- 默认值:1
示例:// Makes the layer 50% transparent layer.opacity = 0.5;
-
title String
-
层的标题,用于在“图层列表”微件等位置标识该图层。
如果图层是从门户项目加载的,则将使用门户项目的标题。如果图层作为 webmap 或 webscene 的一部分加载,则将使用存储在 webmap/webscene 中的图层标题
-
type Stringreadonly
-
图层类型提供了一种方便的方法来检查图层的类型,而无需导入特定的图层模块。
可能值:"base-dynamic"|"base-elevation"|"base-tile"|"bing-maps"|"building-scene"|"csv"|"elevation"|"feature"|"geojson"|"geo-rss"|"graphics"|"group"|"imagery"|"imagery-tile"|"integrated-mesh"|"kml"|"map-image"|"map-notes"|"ogc-feature"|"open-street-map"|"point-cloud"|"route"|"scene"|"stream"|"tile"|"unknown"|"unsupported"|"vector-tile"|"wcs"|"web-tile"|"wfs"|"wms"|"wmts"|"voxel"|"subtype-group"
-
visible Boolean
-
- 默认值:true
示例:// The layer is no longer visible in the view layer.visible = false;
方法概述
名称 | 返回类型 | 描述 | 类 | |
---|---|---|---|---|
更多信息 如果 load() 操作已在进行中,则取消该操作。 | 更多信息 | Layer | ||
Promise<LayerView> | 更多信息 当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapView 和 SceneView)调用。 | 更多信息 | Layer | |
更多信息 销毁图层和任何关联的资源(包括其 portalItem,如果它是图层上的属性)。 | 更多信息 | Layer | ||
布尔值 | 更多信息 在实例上发出事件。 | 更多信息 | Layer | |
Promise<Object> | 更多信息 在图层可用时提取图层的自定义归因数据。 | 更多信息 | Layer | |
Promise<Layer> | 更多信息 从 GeoScene Server URL 创建一个新图层实例。 | 更多信息 | Layer | |
Promise<Layer> | 更多信息 从 GeoScene Online 或 GeoScene Enterprise 门户项目创建适当图层类的新图层实例。 | 更多信息 | Layer | |
布尔值 | 更多信息 指示实例上是否存在与提供的事件名称匹配的事件侦听器。 | 更多信息 | Layer | |
布尔值 | 更多信息
| 更多信息 | Layer | |
布尔值 | 更多信息
| 更多信息 | Layer | |
布尔值 | 更多信息
| 更多信息 | Layer | |
Promise | 更多信息 加载此类引用的资源。 | 更多信息 | Layer | |
Object | 更多信息 在实例上注册事件处理程序。 | 更多信息 | Layer | |
Promise | 更多信息
| 更多信息 | Layer |
方法详情
-
cancelLoad()
-
如果 load() 操作已在进行中,则取消该操作。
-
当图层添加到 Map.layers 集合并且必须为其创建图层视图时,由视图(例如 MapView 和 SceneView)调用。此方法在内部使用,没有直接调用它的用例。
参数:view *父视图。
options Object可选指定其他选项的对象。有关此对象的必需属性,请参阅下面的对象规范表。
规范:signal AbortSignal可选中止层视图创建的信号。
返回:类型 说明 Promise<LayerView> 使用 LayerView 实例进行解析。 - 另请参阅:
-
destroy()起始版本:GeoScene API for JavaScript 4.17
-
销毁图层和任何关联的资源(包括其 portalItem,如果它是图层上的属性)。该图层一旦被破坏就不能再使用了。
被破坏的图层将从其父对象(如 Map、 WebMap、 WebScene、 Basemap、 Ground、GroupLayer)中移除。
-
emit(type, event){Boolean}起始版本:GeoScene API for JavaScript 4.5
-
在实例上发出事件。仅当创建此类的子类时,才应使用此方法。
参数:type String事件的名称。
event Object可选事件负载。
返回:类型 说明 布尔值 true
如果通知了侦听器
-
从 GeoScene Server URL 创建一个新图层实例。根据 URL,返回的图层类型可能是 FeatureLayer, TileLayer, MapImageLayer, ImageryLayer, ImageryTileLayer, SceneLayer,StreamLayer, IntegratedMeshLayer,PointCloudLayer,BuildingSceneLayer, ElevationLayer,GroupLayer。
这在您使用各种 GeoScene Server URL 时很有用,但您不一定知道它们创建了哪些图层类型。此方法将为您创建适当的图层类型。对于要素服务或场景服务,当 URL 指向该服务并且该服务具有多个图层时,返回的承诺将解析为 GroupLayer。
从版本 4.17 开始,可以从托管要素服务加载表。这仅适用于要素图层,如果 FeatureLayer.isTable 返回
true
,将成功加载。下表详细说明了加载特定 URL 类型时返回的内容。
URL 返回 单层要素服务 isTable 返回 false
的 FeatureLayer。单表要素服务 isTable 返回 true
的 FeatureLayer。具有多个层/表的要素服务 带有图层和表格的 GroupLayer。 类型不是“要素图层”的层被丢弃,例如 公共设施网络图层 N/A 参数:规范:params Object用于创建图层的输入参数。
规范:url String用于创建图层的 GeoScene Server URL。
properties Object可选在此处设置任何层的属性以构建图层实例(例如 popupTemplate、渲染器等)。
返回:类型 说明 Promise<Layer> 返回一个解析为新的 Layer 实例的 Promise。 - 另请参阅:
示例:// This snippet shows how to add a feature layer from an GeoScene Server URL // Get an GeoScene Server URL from a custom function const geosceneUrl = getLayerUrl(); Layer.fromGeoSceneServerUrl({ url: geosceneUrl, properties: { // set any layer properties here popupTemplate: new PopupTemplate() } }).then(function(layer){ // add the layer to the map map.add(layer); });
// This snippet shows how to add a table from an GeoScene Server URL // Get an GeoScene Server URL from a custom function const geosceneUrl = getLayerUrl(); Layer.fromGeoSceneServerUrl({ url: geosceneUrl }).then(function(layer){ // Load the table before it can be used layer.load().then(function() { // Check that it is the right type if (layer.isTable) { // Add table to map's tables collection map.tables.add(layer); } }); });
-
从 GeoScene Online 或 GeoScene Enterprise 门户项目创建适当图层类的新图层实例。如果项目指向具有多个图层的要素服务,则会创建 GroupLayer。如果项目指向具有单层的服务,则它解析为与该服务具有相同类型类的图层。
从版本 4.17 开始,可以从 GeoScene Online 和 GeoScene Enterprise 中托管的要素服务项目加载表。这仅适用于要素图层,如果 FeatureLayer.isTable 返回
true
,将成功加载。下表详细说明了加载特定项目类型时返回的内容。
项目 返回 单层要素服务 isTable 返回 false
的 FeatureLayer。单表要素服务 isTable 返回 true
的 FeatureLayer。具有多个层/表的要素服务 带有图层和表格的 GroupLayer。 单层要素集合 isTable 返回 false
的 FeatureLayer。单表要素集合 isTable 返回 true
的 FeatureLayer。具有多个层/表的要素集合 带有图层和表格的 GroupLayer。 已知限制
- 此方法当前不适用于 OGCFeatureServer 门户项目。
参数:params Object用于加载门户项目的参数。
规范:portalItem PortalItem表示要从中加载图层的 GeoScene Online 或 GeoScene Enterprise 门户项目的对象。
返回:类型 说明 Promise<Layer> 返回一个解析为新的图层实例的 Promise。 示例:// Create a layer from a specified portal item and add to the map Layer.fromPortalItem({ portalItem: { // autocasts new PortalItem() id: "8444e275037549c1acab02d2626daaee" } }).then(function(layer){ // add the layer to the map map.add(layer); });
// Create a table from a specified portal item and add it to the map's tables collection Layer.fromPortalItem({ portalItem: { // autocasts new PortalItem() id: "123f4410054b43d7a0bacc1533ceb8dc" // This is a hosted table stored in a feature service } }).then(function(layer) { // Necessary to load the table in order for it to be read correctly layer.load().then(function() { // Confirm this reads as a table if (layer.isTable) { // Add the new table to the map's table collection map.tables.add(layer); } }); });
-
hasEventListener(type){Boolean}
-
指示实例上是否存在与提供的事件名称匹配的事件侦听器。
参数:type String事件的名称。
返回:类型 说明 布尔值 如果类支持输入事件,则返回 true。
-
isFulfilled(){Boolean}
-
isFulfilled()
可用于验证创建类的实例是否已完成(已解决或已拒绝)。如果满足,则返回true
。返回:类型 说明 布尔值 指示创建类的实例是否已完成(已解决或已拒绝)。
-
load(signal){Promise}
-
加载此类引用的资源。如果视图是使用地图实例构造的,则此方法会自动为视图及其在地图中引用的所有资源执行。
开发人员在访问不会在视图中加载的资源时必须调用此方法。
load()
方法仅在第一次调用时触发资源的加载。随后的调用返回相同的promise。可以提供一个
signal
来停止对Loadable
实例的加载状态感兴趣。当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。参数:signal AbortSignal可选可用于中止异步任务的信号对象。当发出中止信号时,返回的 Promise 将被一个名为
AbortError
的错误 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止信号的控制器的更多信息。返回:类型 说明 Promise 资源已加载时解析。
-
on(type, listener){Object}
-
在实例上注册事件处理程序。调用此方法以将事件与侦听器挂钩。
参数:要侦听的事件或事件数组。
listener Function事件触发时调用的函数。
返回:类型 说明 Object 返回带有 remove()
方法的事件处理程序,应调用该方法以停止侦听事件。属性 类型 说明 remove 函数 调用时,从事件中删除侦听器。 示例:view.on("click", function(event){ // event is the event handle returned after the event fires. console.log(event.mapPoint); });
-
when(callback, errback){Promise}起始版本: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-create
-
在视图中创建并渲染图层的 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-error
-
在将图层添加到地图后,在创建 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); });