ArcEngine方法之查詢(一)_第1頁
ArcEngine方法之查詢(一)_第2頁
ArcEngine方法之查詢(一)_第3頁
ArcEngine方法之查詢(一)_第4頁
ArcEngine方法之查詢(一)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ArcEngine方法之查詢(一)查詢是GIS不可或缺的功能,今天我寫一下我近期對查詢的理解。先說說屬性查詢;A查詢主要涉及接口:1. IQueryFilter通過設(shè)置這個接口的WhereClause屬性來作 為查詢條件,本屬性的語句為SQL的where后的條件語 句。2. IFeatureLayer矢量圖層,一般由I Layer進(jìn)行轉(zhuǎn)化。 該接口的Search方法進(jìn)行查詢,Search方法的參數(shù)有兩 個,前面的 是IQueryFilter對象,后面的是bool值,一 般設(shè)為false. 3. IFeature要素接口,用來接收查詢出來的要 素。4. IFeatureCursor游標(biāo)接口,通過

2、Search進(jìn)行查詢,可以講結(jié)果保存在這里,從而利用NextFeature方法,遍歷所有要素。B基本的思想獲取圖層,設(shè)置條件,進(jìn)行查詢,顯示要素 類。C如何獲取IFeatureLayer地圖的圖層的 索引從0開始,一般通過get_Layer方法或者Layer屬性 獲取ILayer ,然后將ILayer強制轉(zhuǎn)換為IFeatureLayero D舉例下面是一個整體的過程。首先定義一個方法:/ /查詢并高亮顯示III III為WhereClause賦值/圖 層, ILayer 對象 pub lie void QueryAndHight (string sql, ILayer pLayer) / 查詢

3、this. axMapControll. Map. ClearSelection() ;/ 清除地圖的選 擇 IFeatureLayer pFeatureLayer = pLayer asIFeatureLayer;/ 定義 矢量圖層 IQueryFilter pQueryFilter =newQueryFilter() ;/實例化一個查詢條件對象pQueryFilter. WhereClause = sql;/ 將查詢條件賦值IFeatureCursor pFeatureCursor =pFeatureLayer. Search(pQueryFi 11er, false) ;/ 進(jìn)行查詢IF

4、eature pFeature; pFeature =pFeatureCursor. NextFeature() ; ff此步是將游標(biāo)中的第一個交 給 pFeatureif (pFeature 二二 null)/ 判斷是否查到結(jié)果如果沒有查到報錯并結(jié)束MessageBox. Show(,沒有查詢到地物!','查詢提示', MessageBoxButtons. OK, MessageBoxIcon. Information); return;axMapControll. Map. SelectFeature(pLayer, pFeature);/ X等 查詢到的地物作為選

5、擇對象高亮顯示在地圖上axMapControll. CenterAt(pFeature. Shape asESRI. ArcGIS. Geometry. IPoint) ;/設(shè)置當(dāng)前查詢到的要素為 地 圖的中心axMapControll. MapScale =pLayer. MinimumScale;/將當(dāng)前地圖的比例尺設(shè)置為ILayer 的最小顯示比例尺axMapControll. ActiveView. RefreshO ;/ 刷新地圖,這樣才 能顯示出地物下面我們進(jìn)行方法的調(diào)用:Ilayer pLayer=axMa.pControl 1. Map. get_Layer (0) ;/ 第一

6、個圖層, 在 地 圖中第一個圖層是醫(yī)院QueryAndHight ('name二'市一醫(yī)院 '',pLayer); 調(diào)用函數(shù),在醫(yī)院的圖層上查詢name為市一 醫(yī)院的要素并高量顯示在地圖上。上面的例子有一個問題, 假 設(shè)我們只知道圖層的名字,而不知道索引為多少,這就比 較 復(fù)雜了。所以我們可以提前寫一個方法 通過名字獲得 ILayer 對象。 public ILayer GetLayerByName (string strLayerName)ILayer pLayer = null; for (int i =0; i if (strLayerName =axMa

7、pControll. get_Layer(i). Name) pLayer axMapControll. get_Layer(i);break; return這樣,我們就可以用以下的方法獲得ILayer 對象進(jìn)行查詢:ILayer pLayer=GetLayerByName ('醫(yī) 院);。上面我們只是進(jìn)行單要素的查詢與顯示,但是我 們有時候需要獲得多個查詢結(jié)果,這樣就需要用到 NextFeature方法進(jìn)行遍歷搜索顯示,我們在進(jìn)行高亮顯示 的時候也能獲取要素的屬性 可以將其保存起來。下面就是一個例子:一 strName=new List () ;/用來保存name屬性,這個可以換成l

8、istBox或者comoBox來接受要素的 name IFeatureLayerpFeatureLayer = mainfrm. GetLayerByName (?此處為圖層的名字 ')as IFeatureLayer; IQueryFilter pQueryFilter = newQueryFilter () pQueryFilter. WhereClause = 'name like 'txtName. Text +模糊查詢 IFeatureCursor pFeatureCursor = pFeatureLayer. Search(pQueryFliter, fal

9、se); IFeature pFeature; pFeature = pFeatureCursor. NextFeature () ;/ 獲取第一個要素 if(pFeature = null) /如果要素為空,則提 示并返回MessageBox. Show('沒有查詢到txtName. Text +,','查詢提示',MessageBoxButtons. OK,MessageBoxIcon. Information); return; while (pFeature != null) strName. Add (pFeature. get_Va.lue (pFeature.Fields. FindField(, name,). ToStringO) ;/ 將查詢出的要素 的name屬性加到strName中如果是listbox則可以用 listBoxl. items. add();來將 name 添加到 listbox 中。mainfrm. a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論