TopFeaturesQuery

AMD: require(["geoscene/rest/support/TopFeaturesQuery"], (TopFeaturesQuery) => { /* code goes here */ });
ESM: import TopFeaturesQuery from "@geoscene/core/rest/support/TopFeaturesQuery";
类: geoscene/rest/support/TopFeaturesQuery
继承于:TopFeaturesQuery Accessor
起始版本:GeoScene Maps SDK for JavaScript 4.20

此类定义了从 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,您可使用 wheretopFilter 参数来查询每个国家/地区人口最多的前三个城市。

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 信息发布要素服务时,时间查询才会返回结果。时间查询也可以与属性和几何查询相结合。

例如,您可使用 timeExtenttopFilter 参数查询具有最高风速的飓风轨迹,按给定时间范围内的飓风类别分组。

// 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
另请参阅

构造函数

new TopFeaturesQuery(properties)
参数
properties Object
optional

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

属性概述

可以设置、检索或侦听任何属性。请参阅使用属性主题。
显示继承属性 隐藏继承属性
名称 类型 描述
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

如果为 true,则返回的 FeatureSet 中的每个要素都包含几何。

更多详情
TopFeaturesQuery
Boolean

如果为 true,且 returnGeometry 也为 true,则 m 值包含在几何中。

更多详情
TopFeaturesQuery
Boolean

如果为 true,且 returnGeometry 也为 true,则 z 值包含在几何中。

更多详情
TopFeaturesQuery
String

对于空间查询,此参数定义了在图层或图层视图中针对输入几何查询要素的空间关系。

更多详情
TopFeaturesQuery
Number

从零开始的索引,指示从何处开始检索要素。

更多详情
TopFeaturesQuery
TimeExtent

针对时间感知型图层进行时态查询的时间范围。

更多详情
TopFeaturesQuery
TopFilter

topFilter 参数用于设置生成结果时使用的 groupByFieldsorderByFieldstopCount 标准。

更多详情
TopFeaturesQuery
String

在空间查询中指定距离时计算缓冲距离的单位。

更多详情
TopFeaturesQuery
String

查询的 where 子句。

更多详情
TopFeaturesQuery

属性详细信息

cacheHint Boolean

指示服务是否应缓存查询结果。它仅适用于图层的 capabilities.queryTopFeatures.supportsCacheHint 设置为 true 时。仅用于每次使用应用程序时具有相同参数的查询。可缓存查询的一些示例:

  • 基于预设输入的查询,例如美国各州的下拉列表。
  • 在 web 地图中基于预设范围的查询,例如书签。
默认值:undefined
declaredClass Stringreadonly inherited

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

distance Number

指定到空间查询中给定几何的搜索距离。units 属性表示测量单位。本质上,设置此属性会在输入几何周围创建一个指定大小的缓冲区。查询将使用该缓冲区返回在图层或图层视图中符合指定空间关系的要素。

如果查询要素服务,supportsQueryWithDistance 功能必须为 true

应用于空间过滤器的几何。由 spatialRelationship 指定的空间关系将指示应如何使用几何图形来查询要素。

已知限制

当前不支持网格几何类型。

geometryPrecision Number

指定查询操作返回的几何中的小数位数。

maxAllowableOffset Number

用于概化查询操作返回的几何的最大距离,使用 outSpatialReference 的单位。它限制了概化几何的任何部分与原始几何的距离。如果 outSpatialReference 未定义,则使用数据的 spatialReference。

num Number

要检索的要素数。此选项应与 start 属性结合使用。可使用它来实现分页 (即,在查询时检索结果的 "页面")。

如果未提供,但 Query 实例具有 start 属性,则默认 num 值为 10。如果未提供 numstart 属性,则默认值 num 等于服务的 maxRecordCount,该值可在 FeatureLayer 的 REST 端点中找到。

objectIds Number[]

ObjectID 数组,用于查询图层中的要素。

orderByFields String[]

用于对查询结果进行排序的一个或多个字段名称。在字段名称后指定 ASC (升序) 或 DESC (降序) 以控制顺序。默认顺序是 ASC

另请参阅
示例
query.orderByFields = ["STATE_NAME DESC"];
outFields String[]

要包含在 FeatureSet 中的属性字段。字段必须存在于服务图层中。您必须列出实际的字段名称而不是字段别名。但是,您可以在显示查询结果时使用字段别名。

指定输出字段时,应将字段限制为仅希望在查询或结果中使用的字段。您包含的字段越少,有效负载大小越小,因此查询的响应速度就越快。

还可将 SQL 表达式指定为 outFields,以计算服务器端查询结果的新值。有关此示例,请参阅下面的示例片段。

每个查询都必须有权访问图层的 ShapeObjectId 字段。但是,outFields 列表不需要包括这两个字段。

已知限制

  • 如果将 outFields 指定为基于要素服务的 FeatureLayer 上的表达式,则服务功 advancedQueryCapabilities.supportsOutFieldSQLExpressionuseStandardizedQueries 都必须为 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" ]
outSpatialReference SpatialReferenceautocast

返回几何的空间参考。如果未指定,则会在查询图层的空间参考中返回几何。

returnGeometry Boolean

如果为 true,则返回的 FeatureSet 中的每个要素都包含几何。

默认值:false
returnM Boolean

如果为 true,且 returnGeometry 也为 true,则 m 值包含在几何中。

returnZ Boolean

如果为 true,且 returnGeometry 也为 true,则 z 值包含在几何中。

spatialRelationship String

对于空间查询,此参数定义了在图层或图层视图中针对输入几何查询要素的空间关系。空间关系可发现要素在空间上是如何相互关联的。例如,您可能想知道代表县的多边形是否完全包含代表定居点的点。

空间关系是由几何的边界或内部是否相交的决定。

  • 边界 - 线要素所有线性部分的端点,或多边形的线性轮廓。只有线和多边形具有边界。
  • 内部 - 点完全在内部,没有边界。对于线和多边形,内部是不属于边界的几何图形的任何部分。

该参数的可能值如下所述,图像突出显示为给定几何图形的指定空间关系返回的几何图形。

intersects 空间关系在图层视图中返回与查询几何相交的要素。

intersects

contains 空间关系在图层视图中返回完全包含在查询几何中的要素。

contains

当查询几何的内部与图层视图中要素的内部或边界接触时,crosses 空间关系将返回图层视图中的要素。换句话说,几何图形共享一些内部区域,但不是所有内部区域。

crosses

envelope-intersects 空间关系在图层视图中返回与过滤器几何的包络 (或范围) 相交的要素。

envelope-intersects

overlaps 空间关系在图层视图中返回与查询几何重叠的要素。只能比较相同几何的要素。

overlaps

touches 空间关系在图层视图中返回与查询几何接触的要素。几何的边界相交,但内部不相交。

touches

within 空间关系在图层视图中返回完全包含查询几何的要素。换句话说,过滤器几何完全 within 图层视图中的要素。它与 contains 相反。

within

已知限制

  • 对于 3D 对象 SceneLayers 和 BuildingSceneLayers 上的空间查询,空间关系是根据要素的范围而不是覆盖区进行评估的。这意味着可能会从查询中返回一个要素,即使它的足迹与几何图形没有空间关系。
  • 目前,3D Object SceneLayers 和 BuildingSceneLayers 的空间查询仅支持 intersectscontainsdisjoint 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"]
  })
});
start Number

从零开始的索引,指示从何处开始检索要素。此属性应与 num 结合使用。可使用它来实现分页并在查询时检索结果的 "页面"。默认情况下,要素按对象 ID 升序排序。

针对时间感知型图层进行时态查询的时间范围。例如,它可用于发现在特定日期从晚上 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 参数用于设置生成结果时使用的 groupByFieldsorderByFieldstopCount 标准。

示例
// 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.supportsDistancetrue 时,此参数才适用。

可能值"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() 进行删除。如果未提供键,则句柄将被添加到默认组。

创建 TopFeaturesQuery 对象的深度克隆。

返回
类型 描述
TopFeaturesQuery TopFeaturesQuery 对象的新实例,其等于用于调用 .clone() 的对象。
fromJSON(json){*}static

创建此类的新实例并使用从 GeoScene 产品生成的 JSON 对象值对其进行初始化。传入到输入 json 参数的对象通常来自对 REST API 中查询操作的响应或来自另一个 GeoScene 产品的 toJSON() 方法。有关何时以及如何使用该函数的详细信息和示例,请参阅指南中的使用 fromJSON() 主题。

参数
json Object

GeoScene 格式实例的 JSON 表示。有关各种输入 JSON 对象的结构示例,请参阅 GeoScene REST API 文档

返回
类型 描述
* 返回该类的新实例。
hasHandles(groupKey){Boolean}inherited
起始版本: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 表示。

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。请参阅浏览器弃用帖子以获取更多信息