• AE地图查询


    原文 AE地图查询

    地图查询主要有两种查询:空间查询和属性查询

    所用到知识点:

    1  Cursor(游标)对象

       本质上是一个指向数据的指针,本身不包含数据内容,提供一个连接到ROW对象或者要素对象(Feature)的桥梁而已。

       游标有三种类型,即查询游标、插入游标和更新游标。每一种游标都是通过与之相适应的方法来获得的,如Search、Insert和Update方法。更新和插入游标都需要使用一个过滤器(Filter)对象,因为它们首先必须获得需要进行操作的要素。

       FeatureCursor是Cursor的一个子类,指向一个或多个要素,它实现了IFeatureCursor接口,ArcGIS Engine开发所对矢量图层实现查询功能都是实行IFeatureCursor;

       其实凡是Search方法,如ILayer::Search、ITable::Search等都可以返回一个游标对象。这个Cursor指向了那些符合选择条件的要素

    IFeatureCursor接口重要成员:

    NextFeature(方法,将游标向前跳到下一个位置,并且返回该位置的Feature)
    UpdateFeature(Feature) (方法,对当前游标位置的Feature进行更新)

    InsertFeature(buffer) (方法,用参数传进来的属性值插入一个新的要素到数据库中,返回该插入新的Feature的ID值,其中参数类型为IFeatureBuffer)

    2  QueryFilter和SpatialFilter对象

     ArcGIS Engine提供了QueryFilter和SpatialFilter两个过滤器对象来配合完成查询条件的设置,从而查询到想要的数据。 QueryFilter过滤器主要用于对属性数据查询条件的设置,它主要实现IQueryFilter接口从而实现属性查询功能。

    IQueryFilter接口成员:

    WhereClause(读写属性,为过滤器设置条件语句)
    注意!各种不同的数据,设置条件查询语句的语法是不相同的,如一个shp文件在设置字段的时候要加“””双引号,而在SDE数据连接中,则什么都不加;在gdb文件的语句中,符号是“*”,而在SDE或者shp文件查询中则是“%”
    SubFields(读写,为过滤器设置提供赛选的字段,用逗号来分隔每一个逗号,如果不设置该属性,则当做所有字段均为查找字段)

    SpatialFilter过滤器主要用于空间范围查询条件的设置,它主要实现ISpatialFilter(继承 IQueryFilter接口)接口从而实现空间查询功能。

    其中SpatialRel属性是一个确定查询几何对象与目标要素几何对象关系的枚举值。

    3 要素选择集(FeatureSelection)对象

       获得符合某种条件的数据,一般有两种不同的手段:

    一种使用Search方法,它返回一个指向数据的查询Cursor对象:

      IFeatureCursor pFeatCursor = pFeatureLayer.Search(pFilter,false);
      IFeature pFeature=pFeatCursor.NextFeature();

    另一种是使用SelectFeatures方法构造一个选择集(SelectionSet),然后在选择集中得到Cursor,后者麻烦了点,但是得到的要素选择集在Map上会高亮度显示。

           IFeatureSelection pFSelection=pFeatureLayer as IFeatureSelection;
           pFSelection.SelectFeatures(pSpatialFilter,esriSelectionResultEnum.esriSelectionResultNew,false);
           ISelectionSet pSelectionset=pFSelection.SelectionSet;
           ICursor pCursor;
           pSelectionset.Search(null,true,out pCursor);
           IFeatureCursor pFeatCursor=pCursor as IFeatureCursor;
           IFeature pFeature=pFeatCursor.NextFeature();

    IFeatureSelection接口重要成员:

    SelectFeatures (Filter, Method, justOne ) (方法,根据指定的标准过滤器filter和方法,选择要素,第一个参数为QueryFilter类型的变量,第二个参数为esriSelectionResultEnum类型的变量,第三个参数为布尔型变量,通常为false)

    当然还有设置颜色的SelectionColor属性等;

    4 SelectionSet对象

         支持ISelectionSet接口,用于管理和查询一个选择集。

    Search(IQueryFilter,bool,ref ICursor)用于在选择集内进行再选择,

    且看示例代码(查询人口>1200000的州并高亮度显示):

    Code1

    IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
    IFeatureSelection pFeatSelection = pFeatureLayer as IFeatureSelection;
    ISpatialFilter pSpatial = new SpatialFilterClass();
    pSpatial.WhereClause = "POP1990>1200000";
    pFeatSelection.SelectFeatures(pSpatial, esriSelectionResultEnum.esriSelectionResultNew, false);
    pFeatSelection.SelectionColor = Get_RGB(0, 255, 0);
    axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

    Code2  统计人口字段的平均值:

    IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
    IFeatureSelection pFeatSelection = pFeatureLayer as IFeatureSelection;
    ISpatialFilter pSpatial = new SpatialFilterClass();
    pSpatial.WhereClause = "POP1990>1200000";
    pFeatSelection.SelectFeatures(pSpatial, esriSelectionResultEnum.esriSelectionResultNew, false);
    
    ISelectionSet pSelectionSet = pFeatSelection.SelectionSet;
    ICursor pCursor;
    pSelectionSet.Search(null, true, out pCursor);
    
    
    IDataStatistics pDataStastics = new DataStatisticsClass();
    pDataStastics.Cursor =pCursor ;
    pDataStastics.Field = "POP1990";
    MessageBox.Show("墨西哥各省平均人口"+pDataStastics.Statistics.Mean.ToString());

     结果如下:

    http://img181.poco.cn/mypoco/myphoto/20110331/23/5640523720110331233734067.png?_=2001647

  • 相关阅读:
    python中自定义模块导入
    EditText------Android
    Fragment类实现
    Android文件访问
    python中pip使用国内镜像提高安装速度
    esri/geometry包 (arcgis api for js)
    【CSDN 编辑器 MarkDowm 使用技巧】
    for 循环 :从指定下标开始,并指定步长
    【车牌识别】-车牌中字符分割代码详解
    【 Linux 常用命令】
  • 原文地址:https://www.cnblogs.com/arxive/p/6109890.html
Copyright © 2020-2023  润新知