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,多測試,就有結果了