GIS開發之二維地下管線綜合管理系統(Arcgis)第四節 查詢(1)
阿新 • • 發佈:2021-04-28
目錄
前言
ArcGIS Api for JavaScript 查詢介面分為屬性查詢和空間查詢兩種,具體使用的類如下:
- 屬性查詢:QueryTask,FindTask(只能屬性,多個圖層)
- 空間查詢:IdentifyTask(多個圖層),QueryTask(單個圖層)
本文主要介紹空間查詢函式的使用方法及函式封裝過程
IdentifyTask(點選查詢)
功能介紹:滑鼠與地圖互動實現,通過點選地圖上某個圖層的點、線、面資訊,查詢滑鼠點選位置要素詳情。通過解析返回資料格式,進行頁面展示
- 類引入
//定義全域性變數,點選查詢任務和查詢引數
var identifyTask, identifyParams;
var callbackFun;
var defaultParam;
define(["esri/tasks/IdentifyParameters", "esri/tasks/IdentifyTask"], function (IdentifyParameters, IdentifyTask){
// 實現程式碼
function QYIdentifyTask() {
......
return QYIdentifyTask;
}
}
- 定義預設引數
this.defaultParams = {
// 點選查詢的圖層地址
url: "http://localhost:5013/arcgis/rest/services/test/MapServer",
// 容差
tolerance: 3,
// 是否返回地理要素資訊
returnGeometry: true,
// url中的圖層號
layerIds: [2]
};
defaultParam = this.defaultParams;
- 引數設定
this.doIdentifyTask = function (options, callback) {
var that = this;
// 設定回撥
callbackFun = callback;
identifyTask = new IdentifyTask(options.url || defaultParam.url);
identifyParams = new IdentifyParameters();
identifyParams.tolerance = options.tolerance || defaultParam.tolerance;
identifyParams.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合物件
identifyParams.layerIds = options.layerIds || defaultParam.layerIds;
// identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL; //指定使用哪個層在使用識別
identifyParams.width = options.width || MWP.map.width; //當前正在檢視地圖的畫素高度
identifyParams.height = options.height || MWP.map.height; //當前正在檢視地圖的畫素寬度
identifyParams.mapExtent = options.extent || MWP.map.extent; //地圖範圍
if (options.geometry) {
identifyParams.geometry = options.geometry;
that.execute(); // 執行點選查詢函式
}
};
- 執行查詢
this.execute = function () {
var that = this;
identifyTask.execute(identifyParams,
function (evt) {
callbackFun.success(evt);
},
function (err) {
callbackFun.fail(err);
});
}
- 完整程式碼如下
//定義全域性變數,點選查詢任務和查詢引數
var identifyTask, identifyParams;
var callbackFun;
var defaultParam;
define(["esri/tasks/IdentifyParameters", "esri/tasks/IdentifyTask"], function (IdentifyParameters, IdentifyTask) {
// 清淤檢測點選查詢建構函式
function QYIdentifyTask() {
this.defaultParams = {
url: "http://localhost:5013/arcgis/rest/services/test/MapServer",
tolerance: 3,
returnGeometry: true,
layerIds: [2]
};
defaultParam = this.defaultParams;
this.doIdentifyTask = function (options, callback) {
var that = this;
callbackFun = callback;
identifyTask = new IdentifyTask(options.url || defaultParam.url);
identifyParams = new IdentifyParameters();
identifyParams.tolerance = options.tolerance || defaultParam.tolerance;
identifyParams.returnGeometry = options.returnGeometry || defaultParam.returnGeometry; //是否返回集合物件
identifyParams.layerIds = options.layerIds || defaultParam.layerIds;
identifyParams.width = options.width || MWP.map.width; //當前正在檢視地圖的畫素高度
identifyParams.height = options.height || MWP.map.height; //當前正在檢視地圖的畫素寬度
identifyParams.mapExtent = options.extent || MWP.map.extent; //地圖範圍
if (options.geometry) {
identifyParams.geometry = options.geometry;
that.execute();
}
};
this.execute = function () {
var that = this;
identifyTask.execute(identifyParams,
function (evt) {
callbackFun.success(evt);
},
function (err) {
callbackFun.fail(err);
});
}
}
return QYIdentifyTask;
});
- 呼叫
MWP.QYJC.click2QueryEvent = On.once(MWP.map, "click", function (me) {
var QYClickTask = new QYIdentifyTask();
var options = {
geometry: me.mapPoint
}
// 此處options中設定的各項引數在執行是可覆蓋封裝函式中的對應的預設引數,如未設定,則選用預設引數
QYClickTask.doIdentifyTask(options, {
success: function (result) {
if (result.length > 0) {
// 後續處理...
} else {
MWP.showMapWarning("無查詢結果!", "提示");
}
//返回資料成功
console.log("res:->");
console.log(result);
},
fail: function (err) {
//查詢失敗
MWP.showMapWarning("查詢錯誤!\n" + err, "提示");
MWP.map.setMapCursor("default");
console.log("err:->");
console.log(err);
}
});
})
參考資料
下一篇主要分享QueryTask類的分析與函式封裝,用以實現空間範圍和屬性結合查詢功能
關注以下公眾號,及時釋出各種技術交流,並下載相關文件和程式