當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


JavaScript ArcGIS Query用法及代碼示例


基本信息

以下是所在類或對象的基本信息。

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

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

類: esri/tasks/support/Query

繼承: Query > Accessor

自從:用於 JavaScript 4.0 的 ArcGIS API

用法說明

已棄用 從 4.20 版開始。請改用Query

此類定義用於從圖層或圖層視圖執行要素查詢的參數。一旦定義了 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。這意味著某個要素可能會從查詢中返回,即使其足跡與幾何圖形不存在空間關係。

統計查詢

您可以返回字段屬性和表達式的統計信息,而不是從查詢中返回單個要素。統計查詢由 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。