使用 Statistics Definition() 计算多个字段中的总和

Calculate sum in several fields with StatisticsDefinition()

我在 WebAppBuilder for ArcGis 中构建了一个小部件,您可以在其中 select 一个区域并查看其中的信息,selection 基于您选择的半径,在此100 到 300 米之间的情况。

我想添加一个功能,所以我想从第一个查询结果中创建四个字段的总和到属性 table。

我在 API 统计定义 class 上找到了,所以我使用了第一个查询的结果,但它不起作用。

如果有人可以就求和查询提供一些建议,我将不胜感激。

提前致谢。

代码下方:

 var myQuery = new Query();
         myQuery.where = "1 = 1";
         myQuery.outFields = ["POB_TOT", "EDAD0015", "EDAD1664","EDAD65_"];

         myQuery.returnGeometry = true;
         var myQueryTask = new QueryTask(_poblacion);

           myQuery.geometry = circle;
           myQuery.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;


    var sumfields = new StatisticDefinition();
          sumfields.statisticType = "sum";

          sumfields.onStatisticField = "POB_TOT", "EDAD0015", "EDAD1664","EDAD65_";

          myQuery.outStatistics = sumfields;

嗯,恐怕我们不能在onStatisticField中传递多个字段。

这是一种设计方式,它将添加(在 sum 的情况下)特定字段的所有值。

outStatistics 仅在 layers/tables 上受支持,其中 supportsStatistics 为真。

示例-

require([
  "esri/tasks/query", "esri/tasks/StatisticDefinition", ... 
], function(Query, StatisticDefinition, ... ) {
  var query = new Query();
  var statisticDefinition = new StatisticDefinition();
  statisticDefinition.statisticType = "sum";
  statisticDefinition.onStatisticField = "POP2000";
  statisticDefinition.outStatisticFieldName = "TotalPop";

  query.outStatistics = [statisticDefinition];
  ...
});

来源-

https://developers.arcgis.com/javascript/3/jsapi/query-amd.html#outstatistics

https://developers.arcgis.com/javascript/3/jsapi/statisticdefinition-amd.html#outstatisticfieldname

你的情况-

var sumfields = new StatisticDefinition();
sumfields.statisticType = "sum";
sumfields.onStatisticField = "POB_TOT"; //any one numeric field
sumfields.outStatisticFieldName = "sum_Pob_Tot";   

myQuery.outStatistics = [sumfields];

注意 - 但是,您需要先验证您的 GIS 图层是否已启用 StatisticDefinition

如果您仍然遇到问题,请分享您的 GIS 图层。

希望对您有所帮助:)

据我所知,有不同的解决方法。你不能传递多个字段但是你可以传递多个 outStatistics 在你的情况下。

所以在你的例子下面-

示例-

var sumfields1 = new StatisticDefinition();
sumfields1.statisticType = "sum";
sumfields1.onStatisticField = "POB_TOT"; //any one numeric field
sumfields1.outStatisticFieldName = "sum_Pob_Tot";

var sumfields2 = new StatisticDefinition();
sumfields2.statisticType = "sum";
sumfields2.onStatisticField = "EDAD0015"; //any one numeric field
sumfields2.outStatisticFieldName = "sum_EDAD0015"; 

var sumfields3 = new StatisticDefinition();
sumfields3.statisticType = "sum";
sumfields3.onStatisticField = "EDAD1664"; //any one numeric field
sumfields3.outStatisticFieldName = "sum_EDAD1664";    
.
.
.
.
.
myQuery.outStatistics = [sumfields1, sumfields2, sumfields3 .... ];

这可能会解决您的问题。

如有任何疑问,欢迎随时提出。