1、前言
上节主要和大家分享了单图层图属查询相关的参数设置和前端代码封装,GIS开发之二维地下管线综合管理系统(Arcgis)第四节 查询(2)。
本节继续和大家分享讨论ArcGIS Api for Javascript 中查询的接口:FindTask,各位小伙伴如发现有疑问或者可优化的地方,欢迎评论区留言哈。
2、功能介绍
2.1 关于FindTask实现多图层属性查询
FindTask类是专门用于属性查询的类,与QueryTask的区别是:QueryTask每次只能针对一个图层进行查询,而FindTask类可以同时对多个图层的多个字段进行查询,从而实现类似类似全文搜索的功能。
与FindTask类配合使用的设置查询参数的是FindParameters类,FindParameters类包含若干个字段,表示查询的参数,下面一一介绍:
- layerIds,指定了针对哪些图层进行查询;
- searchFields,指定了针对哪些字段进行查询,如果有多个图层都包含了某指定的字段,那么将同时查询这些字段,如果没有设置该属性的值,那么将搜索所有的字段;
- searchText,指定了查询的字符串;
- contains,指定查询的匹配程度,如果该属性设置为false,那么将执行严格的完全匹配,如果为true,则执行模糊查询;
- returnGeometry,指定在返回的结果地理特征中是否包含几何对象数据
- outFields,字符串数组,指定返回结果FeatureSet中包含的属性字段,这些字段必须存在于所要查询的图层中,并且必须使用真实的字段名称,通过该属性可以指定需要显示的字段。
- where,该字段指定了属性查询的where从句,任何有效的SQL where 从句都可以,如:
query.where = "NAME='"+stateName+"'"; query.where = "POP04>"+population;
FindTask类查询返回的记过是一个FindResult类对象数组,其feature属性是查询得到的地理特征;layerId与layerName属性表示地理特征所在的图层的ID与名称;foundFieldName属性表示包含查询字符串的字段;displayFieldName属性表示该图层的首要显示字段。
3、示例代码
3.1 FindTask
- 类引入
//定义全局变量,点击查询任务和查询参数
var findTask, findParameters;
var callbackFun;
var defaultParam;
define(["esri/tasks/FindTask", "esri/tasks/FindParameters"], function (FindTask, FindParameters){
// 实现代码
function QYFindTask() {
......
return QYFindTask;
}
}
- 定义默认参数
this.defaultParams = {
// 图层url
url: "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer",
// 返回所有字段
outFields: ["*"],
// 是否返回地理要素信息
returnGeometry: true,
layerIds:[0],
searchFields:["CITY_NAME","NAME","SYSTEM","STATE_ABBR"]
};
defaultParam = this.defaultParams;
- 参数设置
this.doFindTask= function (options, callback) {
var that = this;
// 设置回调
callbackFun = callback;
findTask= new FindTask(options.url || defaultParam.url);
findParameters= new FindParameters();
findParameters.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合对象
findParameters.outFields = options.outFields || defaultParam.outFields;
findParameters.searchFields = options.searchFields||defaultParam.searchFields;
findParameters.searchText = options.searchText;
findParameters.where = options.whereBy || "0=0";
that.execute();
};
- 执行查询
this.execute = function () {
var that = this;
var timeout = 0;
var isworking = true;
findTask.execute(findParameters, function (evt) {
isworking = false;
callbackFun.success(evt);
},
function (err) {
isworking = false;
callbackFun.fail(err);
});
}
- 完整代码如下 QYFindTask.js
//定义全局变量,点击查询任务和查询参数
var findTask, findParameters;
var callbackFun;
var defaultParam;
define(["esri/tasks/FindTask", "esri/tasks/FindParameters"], function (FindTask, FindParameters) {
function QYFindTask() {
this.defaultParams = {
// 图层url
url:"http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer",
// 返回所有字段
outFields: ["*"],
// 是否返回地理要素信息
returnGeometry: true,
layerIds:[0],
searchFields:["CITY_NAME","NAME","SYSTEM","STATE_ABBR"]
};
defaultParam = this.defaultParams;
this.doFindTask= function (options, callback) {
var that = this;
callbackFun = callback;
findTask= new FindTask(options.url || defaultParam.url);
findParameters= new Query();
findParameters.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合对象
findParameters.outFields = options.outFields || defaultParam.outFields;
findParameters.searchFields = options.searchFields||defaultParam.searchFields;
findParameters.searchText = options.searchText;
findParameters.where = options.whereBy || "0=0";
that.execute();
};
this.execute = function () {
var that = this;
var timeout = 0;
var isworking = true;
findTask.execute(findParameters, function (evt) {
isworking = false;
callbackFun.success(evt);
},
function (err) {
isworking = false;
callbackFun.fail(err);
});
};
}
return QYFindTask;
});
- 调用
MWP.QYJC.All2Find = function (text) {
$("body").mLoading("show");
require(["js/module/dredge/QYFindTask"], function (QYFindTask) {
var findModel = new QYFindTask();
findModel.doFindTask({
searchText: text // 模糊查询条件
},
{
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、参考资料
下一篇主要分享基于ArcGIS的几何服务,用于在前端页面处理几何对象,如缓冲区及空间关系计算等,敬请期待
关注以下公众号,及时发布各种技术交流,并下载相关文档和程序