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


JavaScript ArcGIS Query用法及代码示例


基本信息

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

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

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

类: esri/rest/support/Query

继承: Query > Accessor

自从:用于 JavaScript 4.20 的 ArcGIS API

用法说明

此类定义用于从图层或图层视图执行要素查询的参数。一旦定义了 Query 对象的属性,就可以将其传递给可执行函数,该函数将返回 FeatureSet 中的特征。

查询分为三种类型:属性查询、空间查询和统计查询。您可以查询这些类别之一中的要素,或在单个查询中使用每个类别的元素。

属性查询

要根据属性值查询要素,请在 where 属性中指定 SQL where 子句。您可以选择将文本属性用于 LIKE 语句。设置查询的outFields将限制查询返回的属性。如果您的应用不需要每个函数的所有属性,这可以提高查询速度。

例如,您可以使用 where 从代表美国县的图层中查询华盛顿州的所有县:

let query = featureLayer.createQuery();
query.where = "STATE_NAME = 'Washington'";
query.outFields = [ "STATE_NAME", "COUNTY_NAME", "POPULATION", "(POPULATION / AREA) as 'POP_DENSITY'" ];

featureLayer.queryFeatures(query)
  .then(function(response){
     // returns a feature set with features containing the following attributes
     // STATE_NAME, COUNTY_NAME, POPULATION, POP_DENSITY
   });

空间查询

您可以按几何/位置查询要素。虽然此工作流程中不需要 where,但您可以使用 where 作为查询的一部分以获得更精确的结果。

要执行空间查询,您必须将几何参数设置为Geometry 对象并指定有效的空间关系。您可以选择提供查询距离和单位,以针对给定几何图形周围的缓冲区查询要素。

例如,要查询鼠标移动 2 英里范围内的所有要素,您可以执行以下操作:

view.on("pointer-move", function(event){
  let query = featureLayer.createQuery();
  query.geometry = view.toMap(event);  // the point location of the pointer
  query.distance = 2;
  query.units = "miles";
  query.spatialRelationship = "intersects";  // this is the default
  query.returnGeometry = true;
  query.outFields = [ "POPULATION" ];

  featureLayerView.queryFeatures(query)
    .then(function(response){
      // returns a feature set with features containing the
      // POPULATION attribute and each feature's geometry
    });
});

例如,您还可以使用 where 来返回 2 英里缓冲区内人口超过 10,000 的所有要素。

已知限制

对于 3D 对象 SceneLayerView 上的客户端空间查询,在评估与几何体的空间关系时使用要素的 Extent。这意味着某个要素可能会从查询中返回,即使其足迹与几何图形不存在空间关系。

时间查询

您可以通过指定 timeExtent 属性来查询基于给定时间范围的要素。仅当要素服务发布时包含 timeInfo 信息时,时态查询才会返回结果。时间查询还可以与属性和几何查询相结合。

例如,您可以使用 timeExtent 和 where 参数来查询给定时间范围内的指定飓风轨迹。

// query katrina tracks that took place in Aug 30 - Aug 31, 2005
const query = new Query({
  outFields: ["Name, WindSpeed"],
  where: "Name = 'Katrina'",
  timeExtent: {
    start: new Date(2005, 7, 30),
    end: new Date(2005, 7, 31)
  }
});
featureLayer.queryFeatures(query)
  .then(function(response){
     // process the results
   });

统计查询

您可以返回字段属性和表达式的统计信息,而不是从查询中返回单个要素。统计查询由 outStatistics 参数定义,该参数需要 StatisticDefinition 对象的数组。

例如,您可以通过以下方式查询上述图层中县的平均人口和总人口:


// query for the sum of the population in all features
let sumPopulation = {
  onStatisticField: "POP_2015",  // service field for 2015 population
  outStatisticFieldName: "Pop_2015_sum",
  statisticType: "sum"
};

// query for the average population in all features
let avgPopulation = {
  onStatisticField: "POP_2015",  // service field for 2015 population
  outStatisticFieldName: "Pop_2015_avg",
  statisticType: "avg"
};

// Notice that you can pass a SQL expression as a field name to calculate statistics
let populationChangeDefinition = {
  onStatisticField: "POP_2015 - POP_2010",  // service field for 2015 population
  outStatisticFieldName: "avg_pop_change_2015_2010",
  statisticType: "avg"
};

let query = layer.createQuery();
query.where = "STATE_NAME = 'Washington'";
query.outStatistics = [ sumPopulation, avgPopulation, populationChangeDefinition ];
layer.queryFeatures(query)
  .then(function(response){
     let stats = response.features[0].attributes;
     console.log("Total Population in WA": stats.Pop_2015_sum);
     console.log("Average Population in WA counties": stats.Pop_2015_avg);
     console.log("Average Population change in WA counties": stats.avg_pop_change_2015_2010);
  });

处理结果

查询结果可以根据用例以多种方式使用。考虑以下影响结果特征集格式的参数。

  • returnGeometry - 返回几何图形对于将结果以图形形式显示回视图中或进行进一步的空间分析非常有用。如果几何图形在您的工作流程中不是必需的,则不要请求它来提高应用程序性能。
  • outStatistics - 查询统计信息永远不会从图层返回要素,只会返回具有所请求统计信息的数字属性的对象。
  • returnDistinctValues - 以字符串数组的形式返回字段中存在的唯一值,因此当此参数为 true 时,不会返回任何函数。

查询中的字段需要可用并列在 FeatureLayerView.availableFieldsSceneLayerView.availableFields 中。在 FeatureLayer.outFieldsSceneLayer.outFields 中定义它们。

相关用法


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