当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JavaScript ArcGIS TopFeaturesQuery用法及代码示例


基本信息

以下是所在类或对象的基本信息。

AMD: require(["esri/rest/support/TopFeaturesQuery"], (TopFeaturesQuery) => { /* code goes here */ });

ESM: import TopFeaturesQuery from "@arcgis/core/rest/support/TopFeaturesQuery";

类: esri/rest/support/TopFeaturesQuery

继承: TopFeaturesQuery > Accessor

自从:用于 JavaScript 4.20 的 ArcGIS API

用法说明

此类定义用于从 FeatureLayer 执行 top features queries 的参数。一旦定义了 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 作为查询的一部分以获得更精确的结果。除了几何属性之外,还必须设置 topFilter 属性。要执行空间查询,您必须将几何参数设置为Geometry 对象并指定有效的空间关系。您可以选择提供查询距离和单位,以针对给定几何图形周围的缓冲区查询要素。

例如,要在鼠标移动 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

相关用法


注:本文由纯净天空筛选整理自arcgis.com大神的英文原创作品 TopFeaturesQuery。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。