此类定义用于从 FeatureLayer 执行 TopFeaturesQuery 的参数。一旦定义了 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 ,但您可以将其用作查询的一部分以获得更精确的结果。除了几何属性之外,还必须设置topFilter属性。要执行空间查询,您必须将几何参数设置为 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
});
已知限制
- 目前,仅服务器端FeatureLayer支持
TopFeatureQuery
。
构造函数
属性列表
属性 | 类型 | 描述 | 类 | |
---|---|---|---|---|
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 | 更多信息 如果该值和returnGeometry都是 | 更多信息 | TopFeaturesQuery | |
Boolean | 更多信息 如果该值和returnGeometry都是 | 更多信息 | TopFeaturesQuery | |
String | 更多信息 对于空间查询,此参数定义了在图层或图层视图中针对输入 几何 查询要素的空间关系。 | 更多信息 | TopFeaturesQuery | |
Number | 更多信息 从零开始的索引,指示从何处开始检索要素。 | 更多信息 | TopFeaturesQuery | |
TimeExtent | 更多信息 针对 时间感知层 的时间查询的时间范围。 | 更多信息 | TopFeaturesQuery | |
TopFilter | 更多信息
| 更多信息 | TopFeaturesQuery | |
String | 更多信息 空间查询中指定 距离 时计算缓冲距离的单位。 | 更多信息 | TopFeaturesQuery | |
String | 更多信息 查询的 where 子句。 | 更多信息 | TopFeaturesQuery |
属性详细说明
-
cacheHint Boolean
-
指示服务是否应缓存查询结果。它仅适用于图层的 capabilities.query.supportsCacheHint设置为
true
时。仅用于每次使用应用程序时具有相同参数的查询。可缓存查询的一些示例:- 默认值:undefined
-
类名。类的名称声明格式为
geoscene.folder.className
。
-
distance Number
-
指定到空间查询中给定几何的搜索距离。units 属性表示测量单位。本质上,设置此属性会在输入geometry周围创建一个指定大小的缓冲区。查询将使用该缓冲区在图层或图层视图中返回符合指定空间关系的要素。
如果查询要素服务,supportsQueryWithDistance 的值必须是
true
。
-
应用于空间过滤器的几何图形。由spatialRelationship指定的空间关系 将指示应如何使用几何图形来查询要素。
已知限制
当前不支持网格几何类型。
-
geometryPrecision Number
-
指定查询操作返回的几何图形的小数位数。
-
maxAllowableOffset Number
-
以 outSpatialReference 为单位的最大距离,用于概化查询操作返回的几何。它限制了广义几何的任何部分与原始几何的距离。如果
outSpatialReference
未定义,则使用数据的空间参考。
-
num Number
-
要检索的特征数。此选项应与start 属性结合使用。使用它来实现分页(即在查询时检索结果的“页面”)。
如果未提供,但 Query 的实例有
start
属性,则num
默认值为10。如果未提供num
或start
属性,则num
默认值等于服务的maxRecordCount
,可在 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
-
如果该值和returnGeometry都是
true
,则 m 值包含在几何中。
-
returnZ Boolean
-
如果该值和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 });
-
该参数用于设置生成结果时使用的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}`;
方法列表
属性 | 返回值类型 | 描述 | 类 | |
---|---|---|---|---|
TopFeaturesQuery | 更多信息 创建 TopFeaturesQuery 对象的深拷贝。 | 更多信息 | TopFeaturesQuery | |
* | 更多信息 创建此类的新实例并使用从 GeoScene产品生成的 JSON 对象的值对其进行初始化。 | 更多信息 | TopFeaturesQuery | |
Object | 更多信息 将此类的实例转换为其 GeoScene portal JSON 格式。 | 更多信息 | TopFeaturesQuery |
方法详细说明
-
clone(){TopFeaturesQuery}
-
创建 TopFeaturesQuery 对象的深拷贝。
返回值:类型 描述 TopFeaturesQuery TopFeatureSquary对象的新实例等于用于调用 .clone()的对象。
-
fromJSON(json){*}static
-
创建此类的新实例,并使用从 GeoScene 产品生成的 JSON 对象的值对其进行初始化。传递给输入
json
参数的对象通常来自对 REST API 中的查询操作的响应,或者来自另一个 GeoScene产品的 toJSON() 方法。有关何时以及如何使用此函数的详细信息和示例,请参阅指南中的 使用 fromJSON() 主题。参数:json Object实例的 json 表达式,以geoscene 格式显示。
返回值:类型 描述 * 返回一个该类的新实例。
-
toJSON(){Object}
-
将此类的实例转换为 GeoScene portal JSON 格式。 有关更多信息,请参阅 使用 fromJSON() 指南。
返回值:类型 描述 Object 此类实例的 GeoScene portal JSON 格式。