表示 MapImageLayer 或 TileLayer 中的子图层。 MapImageLayer 允许您根据地图服务中定义的数据显示、查询和分析图层。 地图服务包含具有诸如渲染器、标签信息和 definitionExpression 等属性的子图层,以及在服务器上定义的其他属性。 地图服务上每个 MapImageLayer 子图层的属性可以由用户或开发人员动态更改。 每个 TileLayer 子图层的属性都是只读的,不能修改。
动态图层
子图层可以动态渲染为动态图层。动态图层是使用子图层的 source 属性创建的。动态图层有两种类型:动态地图图层和动态数据图层。
动态地图图层允许您使用新的渲染器、定义表达式、不透明度、比例可见性等覆盖地图服务中的子图层。单个地图服务图层可能存在多个动态地图图层。
动态数据图层提供了从已注册工作空间内的数据动态创建子图层的功能。数据可以是具有或不具有几何、要素类或栅格的表。这些数据源对服务目录不直接可见,但可以使用 GeoScene 服务器管理器进行发布和配置。表中的数据可以连接到其他表或动态地图图层。
- 示例:
// 定义地图服务中各种子图层的属性
let layer = new MapImageLayer({
url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer",
sublayers: [
{ // 在子图层 3 上设置定义表达式
id: 3,
definitionExpression: "pop2000 > 40000000"
},
{ // 子图层 2 将按照地图服务中的定义进行渲染
id: 2
},
{ // 子图层 1 将包含在图层中,可见性关闭
id: 1,
visible: false
},
{ // 子图层 0 将在动态视图中应用新的渲染器和标签表达式
id: 0,
renderer: {
type: "class-breaks" // 转换成 new ClassBreaksRenderer()
// 在此处设置渲染器属性
},
labelingInfo: [ new LabelClass ( ... ) ]
}
]
});
构造函数
-
new Sublayer(properties)
-
参数:properties Objectoptional
所有可传入构造函数的属性,请参见属性列表。
示例代码:// 典型用法
let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [ // 转换成 a Collection of Sublayers { // 在子图层 0 上设置定义表达式
id: 0, definitionExpression: "pop2000 > 40000000" }, { // 创建动态数据层
source: { type: dynamic-layer, dataSource: { type: "table", workspaceId: "MyDatabaseWorkspaceIDSSR2", dataSourceName: "ss6.gdb.Railroads" } } } ] });
属性列表
属性 | 类型 | 描述 | 类 | |
---|---|---|---|---|
String | 更多信息 类名。 | 更多信息 | Accessor | |
String | 更多信息 用于筛选图像中要素的 SQL where 子句。 | 更多信息 | Sublayer | |
Field[] | 更多信息 子图层中的字段数组。 | 更多信息 | Sublayer | |
FieldsIndex | 更多信息 一个方便的属性,可用于按名称对字段进行不区分大小写的查找。 | 更多信息 | Sublayer | |
LayerFloorInfo | 更多信息 如果地图图像图层包含可识别楼层的子图层,则该子图层必须具有 floorInfo 属性,其中包含一个 LayerFloorInfo 对象,该对象具有表示 floorField 的字符串属性。 | 更多信息 | Sublayer | |
Extent | 更多信息 子图层的全图范围。 | 更多信息 | Sublayer | |
Number | 更多信息 子图层的图层 ID。 | 更多信息 | Sublayer | |
LabelClass[] | 更多信息 此图层的标签定义,指定为 LabelClass 对象的数组。 | 更多信息 | Sublayer | |
Boolean | 更多信息 指示子图层的标注在视图中是否可见。 | 更多信息 | Sublayer | |
MapImageLayer|TileLayer | 更多信息 子图层所属的 MapImageLayer 或 TileLayer。 | 更多信息 | Sublayer | |
Boolean | 更多信息 指示图层是否将包含在图例中。 | 更多信息 | Sublayer | |
String | 更多信息 指示图层应如何在 LayerList 微件中显示。 | 更多信息 | Sublayer | |
Error | 更多信息 如果在加载时发生错误,则返回 Error 对象。 | 更多信息 | Sublayer | |
String | 更多信息 表示加载操作的状态。 | 更多信息 | Sublayer | |
Object[] | 更多信息 加载时出现的警告列表。 | 更多信息 | Sublayer | |
Number | 更多信息 图层在视图中可见的最大比例(最大放大)。 | 更多信息 | Sublayer | |
Number | 更多信息 图层在视图中可见的最小比例(最大程度缩小)。 | 更多信息 | Sublayer | |
String | 更多信息 包含子层中每个要素的唯一值或标识符的 | 更多信息 | Sublayer | |
Number | 更多信息 在子图层上设置的不透明度级别,范围为 0.0 - 1.0,其中 | 更多信息 | Sublayer | |
Boolean | 更多信息 表示点击图层中的要素时是否显示弹出窗口。 | 更多信息 | Sublayer | |
PopupTemplate | 更多信息 子图层的弹出模板。 | 更多信息 | Sublayer | |
Renderer | 更多信息 要应用于子图层的渲染器。 | 更多信息 | Sublayer | |
DynamicMapLayer|DynamicDataLayer | 更多信息 一个对象,可用于使用来自地图服务子图层或已注册工作空间的数据创建动态图层。 | 更多信息 | Sublayer | |
Object | 更多信息 GeoScene REST API 公开的地图服务元数据 JSON。 | 更多信息 | Sublayer | |
Collection<Sublayer> | 更多信息 如果子图层包含子图层,则此属性是属于具有子图层的给定子图层的 Sublayer 对象的Collection。 | 更多信息 | Sublayer | |
String | 更多信息 | 更多信息 | Sublayer | |
String | 更多信息 包含要素的类型 ID 或子类型的字段的名称。 | 更多信息 | Sublayer | |
FeatureType[] | 更多信息 在由 GeoScene REST API 公开的要素服务中定义的子类型的数组。 | 更多信息 | Sublayer | |
String | 更多信息 指向子图层的 REST 端点的 URL。 | 更多信息 | Sublayer | |
Boolean | 更多信息 指示图层是否在视图中可见。 | 更多信息 | Sublayer |
属性详细说明
-
起始版本: GeoScene API for JavaScript 4.22
-
类名。类的名称声明格式为
geoscene.folder.className
。
-
definitionExpression String
-
用于过滤图像中要素的 SQL where 子句。 只有满足定义表达式的特征才会显示在View中。 定义表达式可以在子图层加载到视图之前或添加到 MapImageLayer 之后构建时设置。 要查看是否可以使用此属性,请检查 MapImageLayer.capabilities 的
supportsSublayerDefinitionExpression
属性。示例代码:let countiesLyr = layer.sublayers.find(function(sublayer){ return sublayer.title === "States"; }); countiesLyr.definitionExpression = "STATE = 'Nebraska'"
// 在 MapImageLayer 构造函数中创建子层时添加定义表达式 let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ id: 0, definitionExpression: "STATE = 'Nebraska'" }] });
// Set a definition expression on the sublayer with ID of 0 layer.findSublayerById(0).definitionExpression = "STATE = 'Nebraska'";
-
起始版本: GeoScene API for JavaScript 4.22
-
子图层中的字段数组。每个字段都表示一个属性,该属性可能包含子图层中每个要素的值。此属性仅在加载子图层后可用。
- 示例:
示例代码:// 将第一个子层第一个字段打印到控制台
console.log(mapImageLayer.sublayers.items[0].fields[0]); // 输出: alias: "OBJECTID" defaultValue: undefined description: "the objectid" domain: null editable: false length: -1 name: "objectid" nullable: false type: "oid" valueType: null
-
fieldsIndex FieldsIndexreadonly起始版本: GeoScene API for JavaScript 4.22
-
示例代码:
// 按名称查找字段,名称不区分大小写
const fieldsIndex = mapImageLayer.sublayers.items[0].fieldsIndex.get("OBjecTID"); // 如果有该名称的字段,请将其打印到控制台
if (fieldsIndex) { console.log("fieldsIndex: ", fieldsIndex); }
-
floorInfo LayerFloorInfoautocast起始版本: GeoScene API for JavaScript 4.22
-
如果地图图像图层包含可识别楼层的子图层,则该子图层必须具有 floorInfo 属性,其中包含一个 LayerFloorInfo 对象,该对象具有表示 floorField 的字符串属性。
-
id Number
-
子图层的图层 ID。如果未在图层上定义source,则此值表示由地图服务定义的子图层的 ID。如果创建 DynamicDataLayer 或 MapDataLayer 并将其添加到子图层的 source 属性中,则此属性的值可以是开发人员设置的任何值。
示例代码:// 创建一个 MapImageLayer 实例,其中仅包含下面定义的子图层。
let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", // 该服务有四个子层,但我们只包含三个。
sublayers: [ { id: 2 }, { id: 1 }, { id: 0 } ] });// 创建一个 MapImageLayer 实例,其中仅包含下面定义的子图层。
let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ // 在这个子层上设置一个新的渲染器
id: 2, renderer: { type: "class-breaks" // 转换成 new ClassBreaksRenderer() // 在此处设置渲染器属性
} }, { // 在子层上设置新的标签信息
id: 1, labelingInfo: [ new LabelClass( ... ) ] }, { // 保留服务定义的属性,但使子层不可见
id: 0, visible: false }] });
-
labelingInfo LabelClass[]
-
此图层的标注定义,指定为 LabelClass 对象数组。使用此属性可以为图层指定标注属性,例如标注表达式、放置位置和大小。
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ id: 3, labelsVisible: true, // labelingInfo 自动转换为 LabelClass 对象数组
labelingInfo: [{ labelExpression: "[name]", labelPlacement: "always-horizontal", symbol: { type: "text", // 转换成 new TextSymbol() color: [255, 255, 255, 0.7], haloColor: [0, 0, 0, 0.85], haloSize: 1, font: { size: 11 } }, minScale: 2400000, maxScale: 73000 }] }] });
-
labelsVisible Boolean
-
指示子图层的标注在视图中是否可见。
- 默认值:true
- 示例:
示例代码:// 打开为子图层 0 定义的标签
layer.findSublayerById(0).labelsVisible = true;
-
-
子图层所属的 MapImageLayer 或 TileLayer。
-
legendEnabled Boolean
-
指示图层是否将包含在图例中。 当为
false
时,图层将从图例中排除。- 默认值:true
-
listMode String起始版本: GeoScene API for JavaScript 4.22
-
指示图层应如何在 LayerList 微件中显示。 下面列出了可能的值。
值 描述 show 该图层在内容列表中可见。 hide 该图层在内容列表中不可见。 hide-children 从内容列表中隐藏子图层。 可选值:"show"|"hide"|"hide-children"
- 默认值:show
-
loadError Errorreadonly
-
如果在加载时发生错误,则返回 Error 对象。
- 默认值:null
-
loadStatus Stringreadonly
-
表示加载操作的状态。
值 描述 not-loaded 该对象的资源尚未加载。 loading 该对象的资源正在加载。 loaded 该对象的资源已正确加载。 failed 对象的资源加载失败。 有关详细信息,请参阅 loadError。 可选值:"not-loaded"|"loading"|"failed"|"loaded"
- 默认值:not-loaded
-
加载时出现的警告列表。
-
maxScale Number
-
图层在视图中可见的最大比例(最大放大)。 如果地图放大超过此比例,则图层将不可见。
0
的值表示图层没有最大比例。 maxScale 值应始终小于 minScale 值,并且大于或等于服务规范。示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [ { id: 0, minScale: 5000000, maxScale: 24000 }, { id: 1 minScale: 24000, maxScale: 100 } ] });
-
minScale Number
-
图层在视图中可见的最小比例(最大缩小)。如果地图缩小超过此比例,图层将不可见。值
0
表示图层不可见 没有最小比例。minScale 值应始终大于 maxScale 值,并且小于或等于服务规范。示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [ { id: 0, minScale: 5000000, maxScale: 24000 }, { id: 1, minScale: 24000, maxScale: 100 } ] });
-
objectIdField Stringreadonly起始版本: GeoScene API for JavaScript 4.22
-
包含子层中每个要素的唯一值或标识符的
oid
field的名称。
-
opacity Number
-
在子图层上设置的不透明度级别,范围为 0.0 - 1.0,其中 0 表示完全透明,1.0 表示完全不透明。 如果设置了 MapImageLayer.opacity,则子图层的实际不透明度值将是 MapImageLayer.opacity 的值乘以子图层的不透明度。
示例代码:// 将图层的不透明度设置为 0.5
layer.findSublayerById(0).opacity = 0.5;
-
popupEnabled Boolean起始版本: GeoScene API for JavaScript 4.22
-
指示单击图层中的要素时是否显示popupTemplate。 该层需要有一个 popupTemplate 来定义应该在弹出窗口中显示哪些信息。 或者,如果 Popup.defaultPopupTemplateEnabled 设置为
true
,则可以自动使用默认弹出模板。- 默认值:true
-
popupTemplate PopupTemplate
-
子图层的弹出模板。 设置后,
popupTemplate
允许用户访问属性并在用户单击图像时在视图的弹出窗口中显示其值。无法查询带有 RasterDataSource 的子图层,因此不支持 PopupTemplate。
或者,如果 Popup.defaultPopupTemplateEnabled 设置为
true
,则可以自动使用默认弹出模板。已知限制
- 在 MapImageLayer 子图层或 TileLayer 子图层上设置的 PopupTemplates 中不支持 Arcade 表达式,除非它们引用从 GeoScene Pro 创建的 GeoScene Enterprise 2.0 地图服务(或更高版本)。
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ id: 0, popupTemplate: { title: "{COUNTY}", content: "{POP2007} people lived in this county in 2007" } }] });
-
应用于子层的渲染器。 此值会覆盖从地图服务读取的渲染器。 要查看是否可以使用此属性,请检查 MapImageLayer.capabilities 的
supportsDynamicLayers
属性。示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ id: 0, renderer: { type: "simple", // 转换成 new SimpleRenderer() symbol: { type: "simple-marker", // 转换成 new SimpleMarkerSymbol() color: "black", size: 8 } } }] });
-
-
一个对象,可用于使用来自地图服务子图层或已注册工作空间的数据创建动态图层。有关从地图服务图层创建动态图层以进行动态渲染、标注和过滤(定义表达式)的信息,请参阅 DynamicMapLayer。要从已注册工作空间中的其他源(如表和表连接)创建动态图层,请参阅DynamicDataLayer。
示例代码:// 创建两个指向同一地图服务图层的子图层。
// 每一层使用定义表达式和渲染器渲染数据中的不同要素。 let mapImageLayer = new MapImageLayer({ sublayers: [{ id: 10, definitionExpression: "POP < 100000", renderer: { type: "simple", // 转换成 new SimpleRenderer() symbol: smallMarker }, source: { type: "map-layer", mapLayerId: 0 } }, { id: 11, definitionExpression: "POP > 100001", renderer: { type: "simple", // 转换成 new SimpleRenderer() symbol: largeMarker }, source: { type: "map-layer", mapLayerId: 0 } }] });
-
sourceJSON Object起始版本: GeoScene API for JavaScript 4.22
-
地图服务的元数据 JSON 由 GeoScene REST API 公开。虽然最常用的属性直接显示在 Sublayer 类上,但此属性可用于访问地图服务返回的所有信息。如果在使用较旧版本的 API 构建的应用程序(需要从较新版本访问地图服务属性)中工作,则此属性很有用。
-
sublayers Collection<Sublayer>
-
如果子图层包含子图层,则此属性是属于具有子图层的给定子图层的 Sublayer 对象的Collection。
示例代码:// 用于确定 MapImageLayer 子层是否包含至少一个动态数据层的测试函数 function hasDynamicDataLayer (layer){ if (layer.sublayers && layer.sublayers.sublayers){ return layer.sublayers.sublayers.some(function(sublayer){ return sublayer.source.type === "data-layer"; }); } else { console.log("layer does not have sublayers or nested sublayers"); return false; } }
-
title String
-
示例代码:
let radarSublayer = layer.sublayers.find(function(sublayer){ return sublayer.title === "radar"; });
-
typeIdField Stringreadonly起始版本: GeoScene API for JavaScript 4.22
-
包含要素的类型 ID 或子类型的字段的名称。此属性仅在加载子图层后可用。
- 示例:
-
types FeatureType[]readonly起始版本: GeoScene API for JavaScript 4.22
-
在由 GeoScene REST API 公开的要素服务中定义的子类型的数组。每个项都包含有关类型的信息,如类型 ID、名称和定义表达式。此属性仅在加载子图层后可用。
- 示例:
-
url String
-
指向子图层的 REST 端点的 URL。这允许您查看位于已注册工作区中的字段和查询表的架构。
-
visible Boolean
-
指示图层在视图中是否可见。 要查看是否可以使用此属性,请检查 MapImageLayer.capabilities
supportsSublayerVisibility
属性。示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ // 该子图层默认可见
id: 0 }, { // 此子图层将添加到图层但不可见
id: 1, visible: false }] // 服务中的所有其他子图层都被排除在图层之外
});
方法列表
属性 | 返回值类型 | 描述 | 类 | |
---|---|---|---|---|
更多信息 如果 load() 操作已经在进行中,则取消它。 | 更多信息 | Sublayer | ||
Sublayer | 更多信息 创建子图层的深度克隆。 | 更多信息 | Sublayer | |
Promise<FeatureLayer> | 更多信息 一种基于子图层的配置(包括动态源)创建 FeatureLayer 实例的便捷方法。 | 更多信息 | Sublayer | |
PopupTemplate | 更多信息 为子图层创建弹出模板,并使用子图层的所有字段进行填充。 | 更多信息 | Sublayer | |
Query | 更多信息 使用表示图层状态的默认值创建 Query 对象,包括图层要素上的过滤器(定义表达式)。 | 更多信息 | Sublayer | |
FeatureType | 更多信息 返回描述要素类型的FeatureType。 | 更多信息 | Sublayer | |
Domain | 更多信息 返回与给定字段名称关联的Domain。 | 更多信息 | Sublayer | |
Boolean | 更多信息
| 更多信息 | Sublayer | |
Boolean | 更多信息
| 更多信息 | Sublayer | |
Boolean | 更多信息
| 更多信息 | Sublayer | |
Promise | 更多信息 加载该类引用的资源。 | 更多信息 | Sublayer | |
Promise<FeatureSet> | 更多信息 对子图层中的要素执行查询。 | 更多信息 | Sublayer | |
Promise | 更多信息
| 更多信息 | Sublayer |
方法详细说明
-
cancelLoad()
-
如果 load() 操作已经在进行中,则取消它。
-
createFeatureLayer(){Promise<FeatureLayer>}起始版本: GeoScene API for JavaScript 4.22
-
一种基于子图层的配置(包括动态源)创建 FeatureLayer 实例的便捷方法。这允许您利用子图层中不支持的功能图层功能,例如智能制图创建器功能。
返回值:类型 描述 Promise<FeatureLayer> 解析为与调用此方法的子图层实例的配置匹配的 FeatureLayer 的promise。 示例代码:let sublayer = mapImageLayer.findSublayerById(0); // 当 createFeatureLayer() promise解析时,加载 FeatureLayer 并将其传递给 createParameters 函数 sublayer.createFeatureLayer() .then(function(featureLayer){ return featureLayer.load(); }) .then(createParameters); function createParameters (featureLayer) { let colorParams = { layer: featureLayer, basemap: map.basemap, field: "POPULATION", normalizationField: "SQ_MILES", legendOptions: { title: "Population density (sq. miles)" } }; } // 当 promise 解析时,将渲染器应用到子图层
colorRendererCreator.createContinuousRenderer(colorParams) .then(function(response){ sublayer.renderer = response.renderer; });
-
createPopupTemplate(options){PopupTemplate}起始版本: GeoScene API for JavaScript 4.22
-
为子图层创建弹出模板,并使用子图层的所有字段进行填充。
参数:options CreatePopupTemplateOptionsoptional用于创建弹出模板的选项。
返回值:类型 描述 PopupTemplate 弹出模板,如果图层没有任何字段,则为 null
。
-
createQuery(){Query}
-
使用表示图层状态的默认值创建 Query 对象,包括图层要素上的过滤器(定义表达式)。
返回值:类型 描述 Query 默认查询对象,包括子图层的定义表达式。
-
getFeatureType(feature){FeatureType}起始版本: GeoScene API for JavaScript 4.22
-
返回描述要素类型的 FeatureType。如果包含要素的图层具有typeIdField,则此方法适用。
参数:feature Graphic此子图层中的要素。
返回值:类型 描述 FeatureType 描述要素类型的FeatureType 。
-
getFieldDomain(fieldName, options){Domain}起始版本: GeoScene API for JavaScript 4.22
-
返回与给定字段名称关联的Domain。 Domain可以是 CodedValueDomain 或 RangeDomain。
参数:fieldName String字段名称。
options Objectoptional指定附加选项的对象。 有关此对象所需的属性,请参阅下面的对象规格表。
规范:feature GraphicDomain 被分配到的要素。
返回值:类型 描述 Domain 与给定要素的给定字段名称相关联的Domain对象。 示例代码:// 获取从 queryFeatures() 返回的第一个特征关联的范围域。 sublayer.queryFeatures(query).then(function(results){ const domain = sublayer.getFieldDomain("Height", {feature: results.features[0]}); console.log("domain", domain) });
-
isFulfilled(){Boolean}
-
isFulfilled()
可用于验证创建类的实例是否已完成(无论成功或失败)。 如果已完成,将会返回true
。返回值:类型 描述 Boolean 指示创建类的实例是否已完成(无论成功或失败)。
-
isRejected(){Boolean}
-
isRejected()
可用于验证创建类的实例是否失败。 如果失败, 将会返回true
。返回值:类型 描述 Boolean 指示是否已拒绝创建类的实例。
-
isResolved(){Boolean}
-
isResolved()
可用于验证创建类的实例是否成功。 如果成功, 将会返回true
。返回值:类型 描述 Boolean 指示是否已解析创建类的实例。
-
load(signal){Promise}
-
加载此类引用的资源。 此方法自动为 View 及其在 Map 中引用的所有资源执行 如果视图是用地图实例构造的。
当访问一个不会在View中加载的资源时,开发者必须调用这个方法。
load()
方法仅在第一次调用时触发资源的加载。 随后的调用返回相同的promise。可以提供一个
signal
来停止对Loadable
实例加载状态的关注。 当信号中止时,实例不会停止其加载过程,只有 cancelLoad 可以中止它。参数:signal AbortSignaloptional可用于中止异步任务的 Signal 对象。 当发出中止信号时,返回的 Promise 将被一个名为
AbortError
的 Error 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止 signals 的控制器的更多信息。返回值:类型 描述 Promise 资源已加载时解析。
-
queryFeatures(query, options){Promise<FeatureSet>}
-
对子图层中的要素执行query。 要查看是否可以使用此属性,请检查 MapImageLayer.capabilities 的
supportsQuery
属性。参数:optional 自动转换自 Object指定查询的属性和空间过滤器。如果未指定参数,则返回满足图层配置/过滤器的所有要素。
options Objectoptional具有如下属性的对象。
规范:signal AbortSignaloptional可用于中止异步任务的 Signal 对象。 当发出中止信号时,返回的 Promise 将被一个名为
AbortError
的 Error 拒绝。另请参阅 AbortController 以获取有关如何构造可用于传递中止 signals 的控制器的更多信息。返回值:类型 描述 Promise<FeatureSet> 返回一个 Promise,该 Promise 解析为包含满足查询的要素的FeatureSet。
-
when(callback, errback){Promise}起始版本: GeoScene API for JavaScript 4.22
-
when()
创建类的实例后,会被执行一次。该方法接受两个参数:callback
函数和errback
函数。callback
在类的实例加载时执行。 如果类的实例无法加载,则执行errback
。参数:callback Functionoptional当 Promise 成功时,该函数将被调用。
errback Functionoptional当 Promise 失败时,该函数将被调用。
返回值:类型 描述 Promise 返回回调结果的新promise,可用于 链接其他函数。 示例代码:// 尽管此示例使用 MapView,但任何作为 Promise 的类实例都可以以相同的方式使用 when() let view = new MapView(); view.when(function(){ // 当 Promise resolved 时,函数将被执行 }, function(error){ // 当 Promise 通过 rejected 抛错时,这个函数将被执行 });
类型定义
-
DynamicDataLayer
-
动态数据层是使用存储在已注册工作区中的数据动态创建的层。这是可以动态渲染和查询的数据,但不会显式显示为服务子层。根据数据源的类型,这些图层分为以下之一:
数据源 描述 TableDataSource 具有几何的要素类或不带几何的表。当表数据源不包含几何图形时,它可以用作联接操作中的源之一。要素类表可以单独使用,因为它们包含几何字段。 QueryTableDataSource 可以使用 SQL where 子句动态查询的要素类或表。此数据源适用于以下情况:您的表包含唯一几何图形,而另一个表具有与每个几何图形匹配的多个记录。可以使用 QueryTableDataSource 仅选择这些匹配记录的子集(因此两个表中的记录彼此之间具有一对一关系),并将它们联接到具有几何图形的表中。 RasterDataSource 仅用于可视化目的的栅格数据集。 JoinTableDataSource 此数据源由两个由公共属性或键连接的数据源组成。左表数据源通常包含几何图形,而右表数据源可能是没有几何图形的表或查询表。 - 属性:
-
type String
此值始终是
data-layer
,并在设置dataSource
属性时推断。该值通常是 "data-layer".
驻留在已注册工作空间(文件夹或地理数据库)中的表、要素类或栅格。默认情况下,数据源在"服务目录"中不可见。可以使用 GeoScene 服务器管理器查看、发布和配置它们。
控制图层中的字段可见性。 只有指定的字段是可见的。 如果为
null
,则所有字段在动态层中都是可见的。 下面提供了字段对象的规范。 - 示例:
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer", sublayers: [{ id: 0, renderer: renderer, opacity: 0.9, source: { type: "data-layer", dataSource: { type: "join-table", leftTableSource: { type: "map-layer", mapLayerId: 3 }, rightTableSource: { type: "data-layer", // 引用已注册工作空间中没有几何图形的表
dataSource: { type: "table", workspaceId: "CensusFileGDBWorkspaceID", dataSourceName: "ancestry" } }, leftTableKey: "STATE_NAME", rightTableKey: "State", joinType: "left-outer-join" } } } ] });
-
DynamicMapLayer
-
动态地图图层是指在启用了动态图层的地图服务中发布的图层。此图层类型可用于创建指向同一服务图层的多个子图层,但会为其分配不同的定义表达式、渲染器和其他属性。
- 属性:
-
type String
此值始终为
map-layer
,并在设置mapLayerId
属性时推断。该值通常是 "map-layer".
mapLayerId Number服务子图层的 id。
gdbVersion String用于指定 GDB 版本的可选属性。
- 示例:
示例代码:// 创建两个指向同一地图服务图层的子图层。
// 每一层使用定义表达式和渲染器渲染数据中的不同要素。 let mapImageLayer = new MapImageLayer({ sublayers: [{ id: 10, definitionExpression: "POP < 50000", renderer: { type: "class-breaks" // 转换成 new ClassBreaksRenderer() // 在此处设置渲染器属性
}, source: { type: "map-layer", mapLayerId: 0 } }, { id: 11, definitionExpression: "GRADUATED_HS > 0.449", renderer: { type: "class-breaks" // 转换成 new ClassBreaksRenderer() // 在此处设置渲染器属性
}, source: { type: "map-layer", mapLayerId: 0 } }] });
-
JoinTableDataSource
-
运行时即时连接操作的结果。 支持嵌套连接。 要使用嵌套连接,请将
leftTableSource
或rightTableSource
设置为join-table
。- 属性:
-
type String
此值始终为
join-table
,并在设置此对象的其他连接表属性时推断。该值通常是 "join-table".
leftTableKey String用于将左表中的记录联接或匹配到右表中的记录的字段名称。
rightTableKey String用于将右表中的记录联接或匹配到左表中的记录的字段名称。
leftTableSource DynamicMapLayer|DynamicDataLayer用于联接到右表源的左表。这可以是动态地图图层或动态数据图层。动态数据层可能包含另一个用于嵌套联接的联接数据源。
rightTableSource DynamicMapLayer|DynamicDataLayer用于联接到左表源的右表。这可以是动态地图图层或动态数据图层。动态数据层可能包含另一个用于嵌套联接的联接数据源。
joinType String将执行的连接类型。
可选值 描述 left-outer-join 左表源中的不匹配记录被保留并与右表源中的 null
连接。left-inner-join 如果左表源中的记录与右表源中的记录不匹配,则将丢弃这些记录。 可选值:"left-outer-join"|"left-inner-join"
- 示例:
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer", sublayers: [{ id: 0, renderer: renderer, opacity: 0.9, source: { type: "data-layer", dataSource: { type: "join-table", leftTableSource: { type: "map-layer", mapLayerId: 3 }, rightTableSource: { type: "data-layer", dataSource: { type: "table", workspaceId: "CensusFileGDBWorkspaceID", dataSourceName: "ancestry" } }, leftTableKey: "STATE_NAME", rightTableKey: "State", joinType: "left-outer-join" } } }] });
-
QueryTableDataSource
-
查询表是由 SQL 查询动态定义的要素类或表。查询图层允许将存储在数据库中的空间和非空间信息轻松集成到地图服务操作中。由于查询表使用 SQL 直接查询数据库表和视图,因此查询表使用的空间信息不需要位于地理数据库中。
此数据源适用于以下情况:表包含多个记录,这些记录与另一个表或地图服务图层中的单个几何匹配。可以使用 QueryTableDataSource 仅选择这些匹配记录的子集,并将它们联接到具有几何图形的表中,以便两个表中的记录彼此具有一对一的关系。
- 属性:
-
type String
此值始终是
query-table
,并在设置此对象的query
属性时推断。该值通常是 "query-table".
workspaceId String数据所在的工作区(在 GeoScene 服务器管理器中定义)。
query String用于筛选记录的 SQL 查询。
oidFields String包含表中每条记录的唯一 ID 的字段名称。如果在 JoinTableDataSource 中使用查询表,则可以将此列表设置为逗号分隔的列表。
spatialReference SpatialReference表源中每个要素的几何的空间参考。
geometryType String表中每条记录的几何类型。
可选值:"point"|"multipoint"|"polyline"|"polygon"|"multipatch"
- 示例:
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ title: "Places", renderer: renderer, source: { type: "data-layer", dataSource: { type: "query-table", workspaceId: "MyDatabaseWorkspaceIDSSR2", query: "SELECT * FROM ss6.gdb.Places", oidFields: "objectid" } } }] });
-
RasterDataSource
-
驻留在已注册栅格工作空间中的基于文件的栅格。栅格只能显示在视图中,不能查询或分配渲染器。
- 属性:
-
type String
值始终是
raster
.该值通常是 "raster".
workspaceId String栅格所在的工作空间,如 GeoScene 服务器管理器中所定义。
dataSourceName String已注册工作空间中栅格的名称。
- 示例:
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Elevation/GlacierBay/MapServer", sublayers: [{ title: "slope", opacity: 0.75, source: { type: "data-layer", dataSource: { type: "raster", workspaceId: "MyDatabaseWorkspaceIDSSR2", dataSourceName: "slope.tiff" } } }] });
-
TableDataSource
-
驻留在已注册工作空间(文件夹或地理数据库)中的表或要素类。 对于地理数据库,如果版本化,则使用
version
切换到备用地理数据库版本。- 属性:
-
type String
值始终是
table
.workspaceId String表所在的工作空间,如 GeoScene 服务器管理器中所定义。
dataSourceName String已注册工作区中表的名称。
gdbVersion String如果地理数据库中存在多个版本,则引用地理数据库版本。
- 示例:
示例代码:let layer = new MapImageLayer({ url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer", sublayers: [{ renderer: renderer, source: { type: "data-layer", dataSource: { type: "table", workspaceId: "MyDatabaseWorkspaceIDSSR2", dataSourceName: "ss6.gdb.Railroads" } } }] });