欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ArcgisapiforJavascript中多图层查询(上)

程序员文章站 2023-10-17 19:06:41
arcgisapiforjavascript中多图层查询。在使用arcgis for javascript api 进行地图要素查询的过程中,发现使用querytask查询...

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”,该如何查询呢?