1. 程式人生 > 其它 >GIS開發之二維地下管線綜合管理系統(Arcgis)第四節 查詢(1)

GIS開發之二維地下管線綜合管理系統(Arcgis)第四節 查詢(1)

目錄

前言

ArcGIS Api for JavaScript 查詢介面分為屬性查詢和空間查詢兩種,具體使用的類如下:

  • 屬性查詢:QueryTask,FindTask(只能屬性,多個圖層)
  • 空間查詢:IdentifyTask(多個圖層),QueryTask(單個圖層)

本文主要介紹空間查詢函式的使用方法及函式封裝過程

IdentifyTask(點選查詢)

功能介紹:滑鼠與地圖互動實現,通過點選地圖上某個圖層的點、線、面資訊,查詢滑鼠點選位置要素詳情。通過解析返回資料格式,進行頁面展示

  1. 類引入
//定義全域性變數,點選查詢任務和查詢引數
var
identifyTask, identifyParams; var callbackFun; var defaultParam; define(["esri/tasks/IdentifyParameters", "esri/tasks/IdentifyTask"], function (IdentifyParameters, IdentifyTask){ // 實現程式碼 function QYIdentifyTask() { ...... return QYIdentifyTask; } }
  1. 定義預設引數
this.defaultParams =
{ // 點選查詢的圖層地址 url: "http://localhost:5013/arcgis/rest/services/test/MapServer", // 容差 tolerance: 3, // 是否返回地理要素資訊 returnGeometry: true, // url中的圖層號 layerIds: [2] }; defaultParam = this.defaultParams;
  1. 引數設定
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(); // 執行點選查詢函式 } };
  1. 執行查詢
this.execute = function () {
    var that = this;
     identifyTask.execute(identifyParams,
      function (evt) {
          callbackFun.success(evt);
      },
      function (err) {
          callbackFun.fail(err);
      });
}
  1. 完整程式碼如下
//定義全域性變數,點選查詢任務和查詢引數
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;
});
  1. 呼叫
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);
        }
    });
})

參考資料

  1. arcgis api官方教程

下一篇主要分享QueryTask類的分析與函式封裝,用以實現空間範圍和屬性結合查詢功能

關注以下公眾號,及時釋出各種技術交流,並下載相關文件和程式

Alt