1. 程式人生 > >Arcgis api for Javascript中多圖層查詢(上)

Arcgis api for Javascript中多圖層查詢(上)

 在使用arcgis for javascript api 進行地圖要素查詢的過程中,發現使用QueryTask查詢,單次只能查詢單個圖層;如果需要查詢多個圖層,就必須要新建多個QueryTask物件來執行多次查詢。</span>
 <span>有沒有一個方法,可以單次對多個圖層進行屬性欄位的查詢呢?答案是有。官方api中提供了FindTask這一多個圖層執行查詢操作的方法。通過定義FindParameter。SearchText來執行跨越圖層的查詢操作。程式碼如下:
//定義findTask
var findTak = new FindTask("MapServer url"
); var allLayerIds = [012,……];//需要查詢的所有特徵圖層的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 = [012,……];
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”,該如何查詢呢?(未完)
(程式碼手寫,可能有拼寫錯誤,見諒)