GIS开发之二维地下管线综合管理系统(Arcgis)第四节 查询(2)


1、前言

  上节主要和大家分享了点击查询相关的参数设置和前端代码封装,GIS开发之二维地下管线综合管理系统(Arcgis)第四节 查询(1)
  本节继续和大家分享讨论ArcGIS Api for Javascript 中查询的接口:QueryTask,各位小伙伴如发现有疑问或者可优化的地方,欢迎评论区留言哈。

2、功能介绍

2.1 关于QueryTask实现空间查询和属性查询

  使用QueryTask类来根据空间关系和属性条件查询要素,QueryTask与IdentifyTask不同的是,QueryTask每次只能针对一个图层进行查询。
  与QueryTask配合使用的设置查询参数的是Query类,Query类包含若干个字段,表示查询的参数,下面一一介绍:

  • geometry,空间属性,指定了用于空间查询的几何对象;可以是Extent\Point\Multipoint\Polyline\Polygon等几何对象;
  • outFields,字符串数组,指定返回结果FeatureSet中包含的属性字段,这些字段必须存在于所要查询的图层中,并且必须使用真实的字段名称,通过该属性可以指定需要显示的字段;
  • returnGeometry,布尔型,用于指定是否在返回结果FeatureSet中的要素中包含几何对象;
  • spatialRelationship,指定了执行空间查询时对输入的几何对象使用何种空间关系策略,ArcGIS API for JavaScript规定了8种查询策略,用字符串来表示,可选值有
    “intersects”|“contains”|“crosses”|“disjoint”|“envelope-intersects”|“overlaps”|“touches”|“within”,默认值为"intersects"
  • where,该字段指定了属性查询的where从句,任何有效的SQL where 从句都可以,如:
    query.where = "NAME='"+stateName+"'";
    query.where = "POP04>"+population;
    

3、示例代码

3.1 QueryTask

  1. 类引入
//定义全局变量,点击查询任务和查询参数
var queryTask, query;
var callbackFun;
var defaultParam;
define(["esri/tasks/query", "esri/tasks/QueryTask"], function (Query, QueryTask){
	// 实现代码
	function QYQueryTask() {
		......
		return QYIdentifyTask;
	}
}
  1. 定义默认参数
this.defaultParams = {
	// 点击查询的图层地址
	url: "http://localhost:5013/arcgis/rest/services/test/MapServer/2",
	// 返回所有字段
	outFields: ["*"],
	spatialRelationship: Query.SPATIAL_REL_INTERSECTS,
	// 是否返回地理要素信息
    returnGeometry: true
};
defaultParam = this.defaultParams;
  1. 参数设置
this.doQueryTask= function (options, callback) {
    var that = this;
    // 设置回调
    callbackFun = callback;
    queryTask = new QueryTask(options.url || defaultParam.url);
    query = new Query();
    query.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合对象
    query.outFields = options.outFields || defaultParam.outFields;
    query.where = options.whereBy || "0=0";
    if (options.geometry) {
    	query.spatialRelationship = options.spatialRelationship || defaultParam.spatialRelationship;
        query.geometry = options.geometry;
    }
    that.execute();
};
  1. 执行查询
this.execute = function () {
    var that = this;
    var timeout = 0;
    var isworking = true;
    queryTask.execute(query, function (evt) {
        isworking = false;
        callbackFun.success(evt);
    },
    function (err) {
        isworking = false;
        callbackFun.fail(err);
    });
}
  1. 完整代码如下 QYQueryTask.js
//定义全局变量,点击查询任务和查询参数
var queryTask, query;
var callbackFun;
var defaultParam;

define(["esri/tasks/query", "esri/tasks/QueryTask"], function (Query, QueryTask) {
    function QYQueryTask() {
        this.defaultParams = {
           	url:"http://localhost:5013/arcgis/rest/services/test/MapServer/2",
            returnGeometry: true,
            outFields: ["*"],
            spatialRelationship: Query.SPATIAL_REL_INTERSECTS
        };

        defaultParam = this.defaultParams;

        this.doQueryTask = function (options, callback) {
            var that = this;
            callbackFun = callback;
            queryTask = new QueryTask(options.url || defaultParam.url);
            query = new Query();
            query.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合对象
            query.outFields = options.outFields || defaultParam.outFields;
            query.where = options.whereBy || "0=0";
            if (options.geometry) {
                query.spatialRelationship = options.spatialRelationship || defaultParam.spatialRelationship;
                query.geometry = options.geometry;
            }
            that.execute();
        };

        this.execute = function () {
            var that = this;
            var timeout = 0;
            var isworking = true;
            queryTask.execute(query, function (evt) {
                isworking = false;
                callbackFun.success(evt);
            },
            function (err) {
                isworking = false;
                callbackFun.fail(err);
            });
        };
    }
    return QYQueryTask;
});
  1. 调用
MWP.QYJC.All2Query = function (geo, sql) {
    $("body").mLoading("show");
    require(["js/module/dredge/QYQueryTask"], function (QYQueryTask) {
        var queryModel = new QYQueryTask();
        queryModel.doQueryTask({
                whereBy: sql, // 属性条件
                geometry: geo // 空间条件
            },
            {
                success: function (res) {
                    if (res.features.length > 0) {
                        QYList.showdata(res.features);
                    } else {
                        MWP.showMapWarning("查询没有结果!", "提示");
                    }
                    $("body").mLoading("hide");
                },
                fail: function(err) {
                    MWP.showMapWarning("查询错误!\n" + err, "提示");
                    $("body").mLoading("hide");
                    console.log(err);
                }
            });
    });
}

4、参考资料

  1. arcgis api官方教程
  2. QueryTask官方文档
  3. Query官方文档
  4. AMD模块开发规范

  下一篇主要分享FindTask类的分析与函数封装,用以实现基于属性条件对多图层进行全文搜索,敬请期待
  关注以下公众号,及时发布各种技术交流,并下载相关文档和程序

Alt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值