ArcgisapiforJavascript中多图层查询(上)
arcgisapiforjavascript中多图层查询。在使用arcgis for javascript api 进行地图要素查询的过程中,发现使用querytask查询,单次只能查询单个图层;如果需要查询多个图层,就必须要新建多个querytask对象来执行多次查询。
有没有一个方法,可以单次对多个图层进行属性字段的查询呢?答案是有。官方api中提供了findtask这一多个图层执行查询操作的方法。通过定义findparameter。searchtext来执行跨越图层的查询操作。代码如下:
//定义findtask
var findtak = new findtask("mapserver url");
var alllayerids = [0,1,2,……];//需要查询的所有特征图层的id,即url最后一位
var findparameters = new findparameters();//创建findparameters
findparameters.returngemotry = true;//是否返回几何对象
findparameters.layerids = alllayerids;
findparameters.searchfields = ["属性字段名1","属性字段名2","属性字段名3",……];//限定查询的字段
findparameters.searchtext = "0";//查询字段中包含"0"
//执行查询,回调函数中返回查询结果
fintask.execute(findparameters,function(results){
console.log(results);
});
这样就查询出了字段中包括“0”的所有数据,解决了跨图层查询的问题。
但是笔者在测试过程中发现,searchtext是不支持sql的,即这样的查询只能实现精确到某数据某字段的查询任务,无法实现范围查询。于是,就找到了findparameters的layerdefinitions属性。findparameters.layerdefinitions[layerid]即定义简单sql用来进行范围查询。代码如下:
var findtak = new findtask("mapserver url");
var alllayerids = [0,1,2,……];
var findparameters = new findparameters();
findparameters.returngemotry = true;
findparameters.layerids = alllayerids;
findparameters.searchfields = ["属性字段名1","属性字段名2","属性字段名3",……];
findparameters.searchtext = "0";//这里的‘0’是指每条数据都包括的一个字符串
var layerdefinition = [];
for(var i = 0; i< alllayerids.length;i++){
findparameters.layerdefinition[i] = "字段1 like '%"+文本参数1+"%' or 字段2 like '%"+文本参数2+%'";//可继续拼接更多字段,也可使用<、>、=等where语句。
}
fintask.execute(findparameters,function(results){
console.log(results);
});
这样,就查询除了包含0,并且包含文本参数的范围查询。那么,这样的查询,必须要有一个“0”。假如说某些数据所有字段都没有包含“0”,该如何查询呢?
下一篇: PHP和.net中des加解密的实现方法