arcgis for js 3.19里面,从图层中读取和统计数据,主要使用 query、query task、StatisticDefinition。
query和task是什么关系?二者有什么区别?按我的理解,query负责定义查询语句、选项等等,相当于SQL语句;而task是查询引擎,负责将query付诸实施;StatisticDefinition好理解,就是统计。
上代码:
自定义查询控件query.Utils.js
define([
"dojo/_base/declare",
"esri/tasks/QueryTask",
"esri/tasks/query",
], function (declare, QueryTask, Query) {
return declare("query.Utils", [], {
constructor: function () {
},
executeQuery: function (opt, callback) {
var query = new Query();
var task = new QueryTask(opt.url);
for(var key in opt){//查询选项
query[key] = opt[key];
}
if (!opt.outFields) {//默认返回所有字段
query.outFields = ["*"];
}
if(!opt.returnGeometry){//默认不返回几何图形
opt.returnGeometry = false;
}
task.execute(query, callback);
}
});
});
使用query.Utils.js
示例一
require([
"toollib/query.Utils",
"esri/tasks/StatisticDefinition"
], function (QueryUtils, StatisticDefinition) {
/*
综合本段代码,所起作用类似于
select count(位置分布) as num from 表 group by 位置分布;
*/
let def = new StatisticDefinition();
def.statisticType = "count";
def.onStatisticField = "位置分布";
def.outStatisticFieldName = "num";
let queryUtil = new QueryUtils();
queryUtil.executeQuery({
url: layerurl,
outStatistics: [def],
groupByFieldsForStatistics:["位置分布"]
}, function (data) {
let charts = {
category:[],
series:[]
};
//组装数据
for(var i in data.features){
charts.category.push(data.features[i].attributes["位置分布"]);
charts.series.push(data.features[i].attributes["num"]);
}
//展示数据
……
});
});
示例二
require([
"toollib/query.Utils",
"esri/tasks/StatisticDefinition"
], function (QueryUtils, StatisticDefinition) {
let queryUtil = new QueryUtils();
queryUtil.executeQuery({
url: 图层地址,
where: "1=1",
orderByFields: ["分类"],//使用“分类”这个字段进行排序。降序可以用["X desc","Y desc"]
outFields: ["猴子分布区域名称","经度","纬度","分类"]
}, function (data) {
let tableData = {
unit: [],
x:[],
y:[]
};
//获取数据
for (var i in data.features) {
tableData.unit.push(data.features[i].attributes["猴子分布区域名称"]);
tableData.x.push(data.features[i].attributes["经度"]);
tableData.y.push(data.features[i].attributes["纬度"]);
}
//展示数据
……
});
});