此类定义了从 FeatureLayer 执行顶部要素查询的参数。一旦定义了 TopFeaturesQuery 对象的属性,就可将其传递到服务器端 FeatureLayer 上的可执行函数中,该函数可以返回包含组内要素的 FeatureSet。例如,您可以使用 FeatureLayer 的 queryTopFeatures() 方法查询美国每个州人口最多的三个县。
此类具有许多与 Query 类相同的属性。但是,与 Query 类不同的是,此类不支持诸如 outStatistics
及其相关参数或 returnDistinctValues
等属性。
// query the top three most populous counties from each state.
// Results will be ordered based the population of each county in descending order
// top query will run against all features available in the service
const query = new TopFeaturesQuery({
outFields: ["State, Pop_total, County"],
topFilter: new TopFilter({
topCount: 3,
groupByFields: ["State"],
orderByFields: ["Pop_total DESC"]
})
});
featureLayer.queryTopFeatures(query)
.then(function(response){
// returns a feature set with features containing the most populous
// three counties in each state ordered by population.
// The following attributes are returned as well: State, Pop_total, County
});
顶部要素查询分为三种类型:属性查询、空间查询和时间查询。您可以在这些类别之一中查询要素,或在单个查询中使用每个类别的元素。运行顶部要素查询时,必须始终设置 topFilter 参数。
属性查询
要根据属性值查询前几项要素,请在 where 属性和 topFilter 属性中指定 SQL where 子句。设置查询的 outFields 将限制查询返回的属性。如果您的应用不需要每个要素的所有属性,这可提高查询速度。
例如,如果人口超过 1,000,000,您可使用 where 和 topFilter 参数来查询每个国家/地区人口最多的前三个城市。
const query = new TopFeaturesQuery({
where: "Population >= 1000000",
outFields: ["Country, Population, Name"],
topFilter: new TopFilter({
topCount: 3,
groupByFields: ["Country"],
orderByFields: [`Population DESC`]
})
});
featureLayer.queryTopFeatures(query)
.then(function(response){
// returns a feature set with features containing the most populous three cities
// in each country. The query will run only against cities where the population is
// over one million.
});
空间查询
您可以按几何/位置查询前几项要素。虽然在此工作流中不需要 where,但您可将 where
用作查询的一部分以获得更精确的结果。除了 geometry 属性之外,还必须设置 topFilter 属性。要执行空间查询,您必须将 geometry 参数设置为 Geometry 对象,并指定有效的 spatialRelationship。您可以选择性地提供查询距离和单位,以在给定几何的缓冲区中查询要素。
例如,要在鼠标移动 10 英里范围内查询每个分区类别中的两座最高建筑物,您可以执行以下操作:
view.on("pointer-move", function(event){
const query = new TopFeaturesQuery({
outFields: ["Zoning, Floors, Year"],
topFilter: new TopFilter({
topCount: 2,
groupByFields: ["Zoning"],
orderByFields: ["Floors DESC"]
}),
geometry: view.toMap(event),
spatialRelationship: "intersects",
units: "miles",
distance: 10,
returnGeometry: true
});
featureLayer.queryTopFeatures(query)
.then(function(response){
// returns two tallest buildings in zoning category within a given geometry
// The following attributes are returned as well: Zoning, Floors, Year
});
});
例如,您还可以使用 where
来返回 10 英里缓冲区内特定住宅分区中最高的建筑物。
时间查询
您可以通过指定 timeExtent 属性根据给定时间范围查询前几项要素。仅当使用 timeInfo 信息发布要素服务时,时间查询才会返回结果。时间查询也可以与属性和几何查询相结合。
例如,您可使用 timeExtent 和 topFilter 参数查询具有最高风速的飓风轨迹,按给定时间范围内的飓风类别分组。
// query hurricanes that took place in 1992 and
// return a hurricane track with the highest wind speed in each category
const query = new TopFeaturesQuery({
outFields: ["STAGE, WINDSPEED, PRESSURE"],
topFilter: new TopFilter({
topCount: 1,
groupByFields: ["STAGE"],
orderByFields: ["WINDSPEED DESC"]
}),
timeExtent: {
start: new Date(1992, 0, 1),
end: new Date(1992, 11, 31)
}
});
featureLayer.queryTopFeatures(query)
.then(function(response){
// returns a hurricane with the highest wind speed
// in each stage... the query will only run against
// hurricanes that happened in 1992
});
已知限制
- 目前,
TopFeatureQuery
仅支持服务器端 FeatureLayer。
构造函数
属性概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
Boolean | 指示服务是否应缓存查询结果。 更多详情 | TopFeaturesQuery | |
String | 类的名称。 更多详情 | Accessor | |
Number | 指定到空间查询中给定几何的搜索距离。 更多详情 | TopFeaturesQuery | |
Geometry | 应用于空间过滤器的几何。 更多详情 | TopFeaturesQuery | |
Number | 指定查询操作返回的几何中的小数位数。 更多详情 | TopFeaturesQuery | |
Number | 用于概化查询操作返回的几何的最大距离,使用 outSpatialReference 的单位。 更多详情 | TopFeaturesQuery | |
Number | 要检索的要素数。 更多详情 | TopFeaturesQuery | |
Number[] | ObjectID 数组,用于查询图层中的要素。 更多详情 | TopFeaturesQuery | |
String[] | 用于对查询结果进行排序的一个或多个字段名称。 更多详情 | TopFeaturesQuery | |
String[] | 要包含在 FeatureSet 中的属性字段。 更多详情 | TopFeaturesQuery | |
SpatialReference | 返回几何的空间参考。 更多详情 | TopFeaturesQuery | |
Boolean | 如果为 | TopFeaturesQuery | |
Boolean | 如果为 | TopFeaturesQuery | |
Boolean | 如果为 | TopFeaturesQuery | |
String | 对于空间查询,此参数定义了在图层或图层视图中针对输入几何查询要素的空间关系。 更多详情 | TopFeaturesQuery | |
Number | 从零开始的索引,指示从何处开始检索要素。 更多详情 | TopFeaturesQuery | |
TimeExtent | 针对时间感知型图层进行时态查询的时间范围。 更多详情 | TopFeaturesQuery | |
TopFilter |
| TopFeaturesQuery | |
String | 在空间查询中指定距离时计算缓冲距离的单位。 更多详情 | TopFeaturesQuery | |
String | 查询的 where 子句。 更多详情 | TopFeaturesQuery |
属性详细信息
-
cacheHint Boolean
-
指示服务是否应缓存查询结果。它仅适用于图层的 capabilities.queryTopFeatures.supportsCacheHint 设置为
true
时。仅用于每次使用应用程序时具有相同参数的查询。可缓存查询的一些示例:- 默认值:undefined
-
类的名称。声明的类名称格式化为
geoscene.folder.className
。
-
distance Number
-
指定到空间查询中给定几何的搜索距离。units 属性表示测量单位。本质上,设置此属性会在输入几何周围创建一个指定大小的缓冲区。查询将使用该缓冲区返回在图层或图层视图中符合指定空间关系的要素。
如果查询要素服务,supportsQueryWithDistance 功能必须为
true
。
-
应用于空间过滤器的几何。由 spatialRelationship 指定的空间关系将指示应如何使用几何图形来查询要素。
已知限制
当前不支持网格几何类型。
-
geometryPrecision Number
-
指定查询操作返回的几何中的小数位数。
-
maxAllowableOffset Number
-
用于概化查询操作返回的几何的最大距离,使用 outSpatialReference 的单位。它限制了概化几何的任何部分与原始几何的距离。如果
outSpatialReference
未定义,则使用数据的 spatialReference。
-
num Number
-
要检索的要素数。此选项应与 start 属性结合使用。可使用它来实现分页 (即,在查询时检索结果的 "页面")。
如果未提供,但 Query 实例具有
start
属性,则默认num
值为 10。如果未提供num
或start
属性,则默认值num
等于服务的maxRecordCount
,该值可在 FeatureLayer 的 REST 端点中找到。
-
ObjectID 数组,用于查询图层中的要素。
-
用于对查询结果进行排序的一个或多个字段名称。在字段名称后指定
ASC
(升序) 或DESC
(降序) 以控制顺序。默认顺序是ASC
。示例query.orderByFields = ["STATE_NAME DESC"];
-
要包含在 FeatureSet 中的属性字段。字段必须存在于服务图层中。您必须列出实际的字段名称而不是字段别名。但是,您可以在显示查询结果时使用字段别名。
指定输出字段时,应将字段限制为仅希望在查询或结果中使用的字段。您包含的字段越少,有效负载大小越小,因此查询的响应速度就越快。
还可将 SQL 表达式指定为
outFields
,以计算服务器端查询结果的新值。有关此示例,请参阅下面的示例片段。每个查询都必须有权访问图层的
Shape
和ObjectId
字段。但是,outFields 列表不需要包括这两个字段。已知限制
- 如果将 outFields 指定为基于要素服务的 FeatureLayer 上的表达式,则服务功
advancedQueryCapabilities.supportsOutFieldSQLExpression
和useStandardizedQueries
都必须为 true。
- 默认值:null
示例// query for field attributes query.outFields = [ "NAME", "STATE_ABBR", "POP04" ];
// query for data returned from an expressions and other fields as the following field names // POP_CHANGE_2020, NAME, POP2020 // where POP_CHANGE_2020 represents the population change from 2010 - 2020 query.outFields = [ "( (POP2020 - POP2010) / POP2010 ) * 100 as POP_CHANGE_2020", "NAME", "POP2020" ]
- 如果将 outFields 指定为基于要素服务的 FeatureLayer 上的表达式,则服务功
-
outSpatialReference SpatialReferenceautocast
-
返回几何的空间参考。如果未指定,则会在查询图层的空间参考中返回几何。
-
returnGeometry Boolean
-
如果为
true
,则返回的 FeatureSet 中的每个要素都包含几何。- 默认值:false
-
returnM Boolean
-
如果为
true
,且 returnGeometry 也为true
,则 m 值包含在几何中。
-
returnZ Boolean
-
如果为
true
,且 returnGeometry 也为true
,则 z 值包含在几何中。
-
spatialRelationship String
-
对于空间查询,此参数定义了在图层或图层视图中针对输入几何查询要素的空间关系。空间关系可发现要素在空间上是如何相互关联的。例如,您可能想知道代表县的多边形是否完全包含代表定居点的点。
空间关系是由几何的边界或内部是否相交的决定。
- 边界 - 线要素所有线性部分的端点,或多边形的线性轮廓。只有线和多边形具有边界。
- 内部 - 点完全在内部,没有边界。对于线和多边形,内部是不属于边界的几何图形的任何部分。
该参数的可能值如下所述,图像突出显示为给定几何图形的指定空间关系返回的几何图形。
intersects
空间关系在图层视图中返回与查询几何相交的要素。contains
空间关系在图层视图中返回完全包含在查询几何中的要素。当查询几何的内部与图层视图中要素的内部或边界接触时,
crosses
空间关系将返回图层视图中的要素。换句话说,几何图形共享一些内部区域,但不是所有内部区域。envelope-intersects
空间关系在图层视图中返回与过滤器几何的包络 (或范围) 相交的要素。overlaps
空间关系在图层视图中返回与查询几何重叠的要素。只能比较相同几何的要素。touches
空间关系在图层视图中返回与查询几何接触的要素。几何的边界相交,但内部不相交。within
空间关系在图层视图中返回完全包含查询几何的要素。换句话说,过滤器几何完全within
图层视图中的要素。它与contains
相反。已知限制
- 对于 3D 对象 SceneLayers 和 BuildingSceneLayers 上的空间查询,空间关系是根据要素的范围而不是覆盖区进行评估的。这意味着可能会从查询中返回一个要素,即使它的足迹与几何图形没有空间关系。
- 目前,3D Object SceneLayers 和 BuildingSceneLayers 的空间查询仅支持
intersects
、contains
和disjoint
spatialRelationships。
可能值:"intersects"|"contains"|"crosses"|"envelope-intersects"|"index-intersects"|"overlaps"|"touches"|"within"|"relation"
- 默认值:intersects
示例const query = new TopFeaturesQuery({ spatialRelationship: "contains", geometry: extent, topFilter: new TopFilter({ topCount: 3, groupByFields: ["State"], orderByFields: ["Pop_total DESC"] }) });
-
timeExtent TimeExtentautocast
-
针对时间感知型图层进行时态查询的时间范围。例如,它可用于发现在特定日期从晚上 10 点到早上 6 点的夜班期间发生的所有犯罪。
示例// query hurricanes that took place in 1992 and // return a hurricane track with the highest wind speed in each category const query = new TopFeaturesQuery({ outFields: ["STAGE, WINDSPEED, PRESSURE"], topFilter: new TopFilter({ topCount: 1, groupByFields: ["STAGE"], orderByFields: ["WINDSPEED DESC"] }), timeExtent: { start: new Date(1992, 0, 1), end: new Date(1992, 11, 31) } }); featureLayer.queryTopFeatures(query) .then(function(response){ // returns a hurricane with the highest wind speed // in each stage... the query will only run against // hurricanes that happened in 1992 });
-
topFilter
参数用于设置生成结果时使用的 groupByFields、orderByFields 和 topCount 标准。示例// return top three most populous cities from each state const query = new TopFeaturesQuery({ topFilter: new TopFilter({ topCount: 3, groupByFields: ["State"], orderByFields: ["Pop_total DESC"] }) }); layer.queryTopFeatures(query).then(function(featureSet) { ... });
-
units String
-
在空间查询中指定距离时计算缓冲距离的单位。如果未指定
units
,则从几何空间参考派生单位。如果未指定几何空间参考,则从要素服务数据空间参考派生单位。对于基于服务的查询,仅当图层的 capabilities.query.supportsDistance 为true
时,此参数才适用。可能值:"feet"|"miles"|"nautical-miles"|"us-nautical-miles"|"meters"|"kilometers"
- 默认值:null
示例// Query at a distance in pixels of the query geometry. // Use the unit of the query geometry's spatial reference. layerView.queryFeatures({ geometry: event.mapPoint, distance: 2 * view.resolution, returnGeometry: true }).then(processResults);
-
where String
-
查询的 where 子句。允许对图层中的字段进行操作的任何合法 SQL where 子句。在 JavaScript 中编写 where 子句时,请务必使用正确的单引号和双引号顺序。
示例query.where = `NAME = ${stateName}`;
query.where = `POP04 > ${population}`;
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
TopFeaturesQuery | 创建 TopFeaturesQuery 对象的深度克隆。 更多详情 | TopFeaturesQuery | |
* | 创建此类的新实例并使用从 GeoScene 产品生成的 JSON 对象值对其进行初始化。 更多详情 | TopFeaturesQuery | |
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
Object | 将此类的实例转换为 GeoScene Portal JSON 表示。 更多详情 | TopFeaturesQuery |
方法详细说明
-
addHandles(handleOrHandles, groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
添加一个或多个与对象的生命周期相关联的句柄。当对象被销毁时,将移除句柄。
// Manually manage handles const handle = reactiveUtils.when( () => !view.updating, () => { wkidSelect.disabled = false; }, { once: true } ); // Handle gets removed when the object is destroyed. this.addHandles(handle);
参数handleOrHandles WatchHandle|WatchHandle[]对象销毁后,标记为要移除的句柄。
groupKey *optional标识句柄应添加到的组的键。组中的所有句柄稍后都可使用 Accessor.removeHandles() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
clone(){TopFeaturesQuery}
-
创建 TopFeaturesQuery 对象的深度克隆。
返回类型 描述 TopFeaturesQuery TopFeaturesQuery 对象的新实例,其等于用于调用 .clone()
的对象。
-
fromJSON(json){*}static
-
创建此类的新实例并使用从 GeoScene 产品生成的 JSON 对象值对其进行初始化。传入到输入
json
参数的对象通常来自对 REST API 中查询操作的响应或来自另一个 GeoScene 产品的 toJSON() 方法。有关何时以及如何使用该函数的详细信息和示例,请参阅指南中的使用 fromJSON() 主题。参数json ObjectGeoScene 格式实例的 JSON 表示。有关各种输入 JSON 对象的结构示例,请参阅 GeoScene REST API 文档。
返回类型 描述 * 返回该类的新实例。
-
起始版本:GeoScene Maps SDK for JavaScript 4.25
-
如果存在指定的句柄组,则返回 true。
参数groupKey *optional组键。
返回类型 描述 Boolean 如果存在指定的句柄组,则返回 true
。示例// Remove a named group of handles if they exist. if (obj.hasHandles("watch-view-updates")) { obj.removeHandles("watch-view-updates"); }
-
removeHandles(groupKey)inherited起始版本:GeoScene Maps SDK for JavaScript 4.25
-
移除对象拥有的句柄组。
参数groupKey *optional要移除的组键或组键的数组或集合。
示例obj.removeHandles(); // removes handles from default group obj.removeHandles("handle-group"); obj.removeHandles("other-handle-group");
-
toJSON(){Object}
-
将此类的实例转换为 GeoScene Portal JSON 表示。有关详细信息,请参阅使用 fromJSON() 指南主题。
返回类型 描述 Object 此类实例的 GeoScene Portal JSON 表示。