「Arcgis的」空间查询和属性查询
「Arcgis的」空間查詢和屬性查詢
概述
目錄
「Arcgis的」空間查詢和屬性查詢
概述
流程
FindTask
QueryTask
IdentifyTask
在ArcGIS API中查詢功能是非常常用的,Esri給我們提供了三個類用于查詢功能,FindTask,QueryTask,IdentifyTask,他們之間的區(qū)別為:
查詢分為屬性查詢和空間查詢類
屬性查詢:QueryTask,FindTask(只能屬性。多個圖層)
空間查詢:IdentifyTask(多個圖層),QueryTask(單個圖層)
?
任務,查詢,和FeatureSet一起被用于查詢地圖里的圖層并顯示結果。流程
FindTask
FindTask是在某個地圖服務中進行屬性查詢的功能類,FindTask以FindParameters對象為參數(shù),能查詢同一個地圖服務的一個或多個圖層,并且可以在多個字段中進行查詢.DindTask?
只能用于屬性資訊的查詢,在FindTask執(zhí)行結束后,可以從其回傳結果中獲取查詢的對象來自哪個圖層和哪個字段。
###代碼上
基本頁面
創(chuàng)建屬性查詢對象并給按鈕綁定點擊事件
//地圖服務的URL var MapServer = "http://localhost:6080/arcgis/rest/services/Test/MyService/MapServer"; //創(chuàng)建屬性查詢對象 var findTask = new FindTask(MapServer); //創(chuàng)建屬性查詢參數(shù) var findParams = new FindParameters(); on(dom.byId("Btn"),"click",function(){//是否返回給我們幾何信息findParams.returnGeometry = true;//對哪一個圖層進行屬性查詢findParams.layerIds = [1];//查詢的字段findParams.searchFields = ["name"];//searchText和searchFields結合使用,即查詢name=J4findParams.searchText = "J4";//執(zhí)行查詢對象findTask.execute(findParams, ShowFindResult); })處理屬性查詢返回給我們的數(shù)據(jù)
function ShowFindResult(queryResult) {//創(chuàng)建線符號var lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new dojo.Color([255, 0, 0]), 3);//創(chuàng)建面符號var fill=new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol);if (queryResult.length == 0) {dom.byId("divShowResult").innerHTML = "";return;}var htmls = "";if (queryResult.length >= 1) {htmls = htmls + "<table style=\"width: 100%\">";htmls = htmls + "<tr><td>名稱</td></tr>";for (var i = 0; i < queryResult.length; i++) {//獲得圖形graphicvar graphic = queryResult[i].feature;//賦予相應的符號graphic.setSymbol(fill);//將graphic添加到地圖中,從而實現(xiàn)高亮效果map.graphics.add(graphic);//獲得教學樓名稱(此處是和shp屬性表對應的)var ptName = graphic.attributes["alias"];if (i % 2 == 0)htmls = htmls + "<tr>";elsehtmls = htmls + "<tr bgcolor=\"#F0F0F0\">";htmls = htmls + "<td><a href=\"#\" \">" + ptName + "</a></td>";htmls = htmls + "</tr>";}htmls = htmls + "</table>";//將屬性綁定在divShowResult上面dom.byId("divShowResult").innerHTML = htmls;} }QueryTask
QueryTask是進行空間和屬性查詢的功能類,可以在某個地圖服務的某個子圖層進行查詢。
###先決條件
###上代碼
// 新建QueryTask var queryTask = new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/0"); // 新建Query物件 var query = new esri.tasks.Query(); // 是否返回 查詢結果的空間幾何資訊 query.returnGeometry = true; // 設定要回傳的欄位 // 若要全部欄位皆回傳可輸入["*"] query.outFields = ["CITY_NAME", "STATE_NAME", "POP1990"]; // 欄位查詢 query.where="OBJECTID="+schoolObjecid; //查詢全部 //query.where="1=1";/********有多重查詢方式://字符串查詢: query.where = "NAME = '" + stateName + "'";//數(shù)字查詢: query.where = "POP04 > " + population;//使用"like"的where子句的縮寫: query.text = stateName;//當用戶在地圖上選擇要素時使用(使用地圖查詢的意思): query.geometry = evt.mapPoint;**********/ // 創(chuàng)建了查詢過濾器以後,執(zhí)行查詢。通過QueryTask.execute()方法執(zhí)行查詢。 queryTask.execute(query,function(featureSet){var fs = featureSet.features[0];//如果查詢成功並有返回值,控制臺輸出其他屬性if(fs){console.log(fs.attributes.CITY_NAME);console.log(fs.attributes.STATE_NAME);console.log(fs.attributes.POP1990);}else{alert("訊息獲取錯誤");} }, (err) => {console.log(' doXmQuerty ERROR!')console.log(err)});IdentifyTask
IdentifyTask的使用與QueryTask十分類似,唯一不同的是IdentifyTask可以作用于多個圖層,而QueryTask是作用于一個圖層的。
###上代碼
總結
以上是生活随笔為你收集整理的「Arcgis的」空间查询和属性查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html音视频app制作,怎么实现HTM
- 下一篇: geoserver wfs属性查询