ArcEngine 9.3 學習筆記(八):地圖查詢(Cursor對象,QueryFilter對象 和 SpatialFilter對象,SelectionSet要素選擇集對象)


5 地圖查詢

  地圖查詢、統計是GIS系統的基本功能模塊,實際上統計功能的前提也是通過查詢獲取結果,以文字或者圖表等報表的形式展現查詢結果數據。

  地圖查詢有兩種類型的查詢:
  1. 空間查詢:在地圖上設置一定范圍,查詢這一范圍內的要素。
    例如:在地圖上畫一范圍,查詢這一區域內所有消防栓,這一范圍的所有消防栓高亮顯示(或其他顯示方式),並展現出所有消防栓的屬性信息
  2. 屬性查詢:通過一定的查詢條件,獲取目標要素。
    例如:我們需要查詢中國行政區上人口大於5000萬,同時GDP大於1萬億的省份,通過執行查詢,符合條件的省份高亮顯示,並展現出這些省份的屬性信息。

  AE 為開發者提供了無需寫代碼即可進行查詢功能的Identify公交,但是這個工具是一個通用的信息查詢工具
  開發者需要定制出自己需要的查詢功能模塊。

  5.1 目標:
    1、熟悉Cursor,FeatureCursor對象,使用IFeatureCursor接口;
    2、熟悉QueryFilter,SpatialFilter對象,使用IQueryFilter,ISpatialFilter接口
    3、熟悉要素選擇集SelectionSet對象,會使用IfeatureSelection,ISelectionSet接口
    4、開發一個屬性查詢小功能Demo,獲取符合查詢條件的Feature,並用IFeatureLayerDefinition接口創建一個新的要素圖層加載到MapControl上
    5、開發一個空間多邊形查詢功能的demo,學會創建內存半透明圖層用於顯示選擇范圍。

  5.3 Cursor對象

  Cursor對象,本質上是一個指向數據的指針,本身不包含數據內容,他是連接到Row對象或要素對象的橋梁;
  游標有三種類型:查詢游標、插入游標、更新游標;每種游標通過對應方法獲得,如Search(),Insert(),Update();
  更新和插入游標都需要是使用一個過濾器(Filter)對象,因為它們首先必須獲取要進行操作的要素;

  Cursor對象支持的接口是ICursor,它定義了操作一個Row幾何或一個Row對象的屬性和方法;
  1)使用IFeatureClass的Insert方法,返回一個插入型游標,它通常用於往表中插入一條記錄:
    pCursor=IFeatureCLass.Insert();
  2)使用Update方法,返回 一個更新型游標,他勇於更新或者刪除一條記錄:
    pCursor=IFeatureCLass.Update();
  3)使用Search方法對表進行查詢后,可以得到一個查詢型Cursor對象,它指向一個或多個Row對象:
    pCursor=IFeatureCLass.Search();

  本章主要內容是使用查詢游標
  FeatureCursor是Cursor的一個子類,指向一個或多個要素,它實行了IFeatureCursor接口,

  AE開發 所針對矢量圖層實現的查詢功能都是實現IFeatureCursor。

5.4 QueryFilter對象 SpatialFilter對象
  在關系型數據庫中,查詢條件是通過SQL語句的Where子句完成的,
  在AE中不能直接使用SQL語句,但AE提供了QueryFilter和SpatialFilter兩個過濾器對象,來配合完成查詢條件的設置,從而查詢到想要的數據。

  QueryFilter過濾器 主要用於對屬性數據查詢條件的設置,它主要實現IQueryFilter接口,從而實現屬性查詢功能

1   IQueryFilter pQueryFilter = new QueryFilterClass();
2   // 設置過濾器對象的屬性
3   pQueryFilter.WhereClasue="人口>1000000";

  SpatialFilter過濾器主要用於空間范圍查詢條件的設置,它主要實現ISpatialFilter( 繼承IQueryFilter接口) 接口,從而實現空間查詢功能。

1   ISpatialFilter pSpatialFilter = new SpatialFilterClass();
2   // 設置空間過濾器的范圍(多邊形)
3   pSpatialFilter.Geomerty=pGeometry;
4   // 設置空間過濾器空間關系類型
5   pSpatialFilter.SpatialRel= esriSpatialRelEnum.esriSpatialRelContains;

  空間過濾器的空間關系類型主要有以下幾種:
    esriSpatialRelUndefined  未定義;esriSpatialRelIntersects  A與B圖形相交
    esriSpatialRelEnvelopeIntersects A的Envelope和B的Envelope相交
    esriSpatialRelIndexIntersects  A與B 索引相交
    esriSpatialRelTouches A與B 邊界相接
    esriSpatialRelOverlaps A 與B 相疊加
    esriSpatialRelCrosses A與B 相交(兩條線相較於一點,一條線和一個面相交)(與其說相交,不如說空間上穿過)
    esriSpatialRelWithin A在B內
    esriSpatialRelContains  A 包含B
    esriSpatialRelRelation  A 與 B 空間關聯

5.5 SelectionSet要素選擇集對象
  在AG中,當在ArcMap中顯示查詢結果是,所有滿足條件的要素 都以藍色高亮的形式顯示在地圖控件上
  這些高亮顯示選中的要素對應一個要素選擇集對象中,通過IFeatureSelection的SelectionSet屬性可以獲取選擇集
  FeatureLayer對象實現了IFeatureSelection接口.

  IFeatureSelction接口演示:

 1         public void IFeatureSelectionTest(AxMapControl axMapControl)
 2         {
 3             IFeatureLayer pFeatureLayer = axMapControl.get_Layer(0) as IFeatureLayer;
 4             // QI至IFeatureSelection
 5             IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
 6             // 創建過濾器
 7             IQueryFilter pQueryFIlter = new QueryFilterClass();
 8             // 設置過濾器對象的查詢條件
 9             pQueryFIlter.WhereClause = "人口>1000000";
10             // 從選擇集中過濾要素
11             pFeatureSelection.SelectFeatures(pQueryFIlter, esriSelectionResultEnum.esriSelectionResultNew, false);
12             // 獲取選中集對象
13             ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;
14             // 設置選擇集的符號
15             //pFeatureSelection.SelectionSymbol = pSymbol;
16         }
View Code

下一篇,將用兩個實例演示如何對圖層進行查詢操作(屬性查詢、空間查詢)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM