1.业务场景: (这里使用的arcgis js api 版本是 3.17版本)
最近使用arcgis js api 的时候,有这样一种需求,需要统计map server中 不同地块肥沃度好坏的 面积各有多少,用来做饼状图,比如:
好地:100亩
中等:50亩
差地:30亩
2.解决方法:
方法1:刚开始,采用的是,根据不同的肥沃度,分别去查询,但是如果肥沃度 有几个数据,那么 就要查询几次数据,而且要分别把查出来的数据的面积进行相加,从而实现功能,但是后面发现这样太慢了。然后就查阅官方arcgis js api,发现有 分组查询 ,和聚合函数的使用。下面就使用arcgis js api 提供的方法进行实现。
方法2:分析下,就不难,看出地块的肥沃程度,需要使用group by 来进行分组查询,然后对于面积 可以使用 sum 来进行聚合。
测试发现,要使用group by 必须指定 query.outStatistics = [ statDef ]; (statDef 是一个 StatisticDefinition对象,就是统计定义对象,这里官方文档中也有提到),这就是使用的前提。 下面是代码,其实很简单,相比第一种方法简单多了。
queryTask = new esri.tasks.QueryTask(countiesUrl);
query = new esri.tasks.Query();
query.outFields = outFields;
statDef = new esri.tasks.StatisticDefinition();
statDef.statisticType = "sum";
statDef.onStatisticField = "MJ";
statDef.outStatisticName = "MJ";
query.returnGeometry = false;
query.where = "1=1";
query.outStatistics = [ statDef ];
query.groupByFieldsForStatistics = ["GLCS"];
queryTask.execute(query, handleQueryResult, errorHandler);
1. new queryTask 对象
2.new query 对象
3.new statisticDefiniton 对象
4.设置query的outStatistics属性为 statistic Definiton ,然后定义query的 group by 字段 ,即可
这样 查询出来的结果 就会有类似这样的数据[glcs:好地,mj:50亩,glcs:中等,mj:30亩。。。。。。。。。。],
目前我发现的就是这种方法。如有其他,请指正。
3.总结:
其实就是仔细看api,多测试,就有结果了