arcgis for js 3.19从图层中读取和统计数据

185 阅读1分钟

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["纬度"]);
        }
        //展示数据
        ……
    });
});