『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS Engine 10 开发手册(4-18)细讲FeatureClass对象

ArcGIS Engine 10 开发手册(4-18)细讲FeatureClass对象
上文中我们已经提到了FeatueClass对象,这是ArcGIS Engine常用的对象之一,FeatureClass 对象实现了 IFeatureClass 接口, IFeatureClass 对查询定义了两个方法IFeatureClass.Search 和 IFeatureClass.Select。

    上文中我们已经提到了FeatueClass对象,这是ArcGIS Engine常用的对象之一,FeatureClass 对象实现了 IFeatureClass 接口, IFeatureClass 对查询定义了两个方法IFeatureClass.Search IFeatureClass.Select


    Search 方法需要传入两个参数,一个是过滤器;另外一个是布尔值,用于说明放回的要素游标是否被回收, 一般的,如果仅仅是为了读取数据,那么这个参数应该是 true,如果要对选择出来的要素更新,那么这个参数应该设置为 false。那么这两个参数到底有什么意义,我们从下面的代码中看一下。

 

    false true参数的差别

     我们定义一个 Search 函数,通过传 false true 来对这两个参数进行说明,代码如下:

 

void Search (IFeatureClass _pFeatureClass, bool _Bool)

{

  IFeature pFt1, pFt2;

  IFeatureCursor pFtCursor;

  if (_Bool == false)

  {

    pFtCursor = _pFeatureClass.Search (null, _Bool);

    pFt1 = pFtCursor.NextFeature ();

    while (pFt1 != null)

    {

      pFt2 = pFtCursor.NextFeature ();

      if (pFt1 == pFt2)

      {

        MessageBox.Show ("Recycling 参数是 false");

      }

      pFt1 = pFtCursor.NextFeature ();

    }

  } else

  {

    pFtCursor = _pFeatureClass.Search (null,Bool);

    pFt1 = pFtCursor.NextFeature ();

    while (pFt1 != null)

    {

      pFt2 = pFtCursor.NextFeature ();

      if (pFt1 == pFt2)

      {

        MessageBox.Show ("Recycling 参数是true");

      }

      pFt1 = pFtCursor.NextFeature ();

    }

  }

}

     当 recycling true 的时候,我们会看到程序执行到 MessageBox.Show("Recycling 参数是 true"),如 下图:

 

 

 

     等号成立,说明了当为 true,程序返回的是同一个 Feature 的引用,查询后的要素共享同一内存,说名 Next 之后前一个游标所占的内存被回收了,当为 false 的时候,等号不成立。说明系统给每一个要素分配了一 个游标。

 

      Search Select方法的比较

      Search 返回游标,Select 返回选择集;

 

      游标:必须遍历游标才能得到所有的结果,不必太关注内存;

      选择集: 查询后既可得到,但是通常只保留 OID 字段,数据量打的时候要考虑内存压力。

 

 

     CursorFeatureCursor对象

     Cursor 中文‘游标“,它本质上是一个指向数据的指针,自身并不包含数据。游标有三类,查询游标, 插入游标和更新游标,每一游标都是又其相应的方法得到,如查询游标是由 ITable.Search 方法得到。游 标是 GIS 中使用频率很高的,凡是和数据的查询,更新,删除等都跟他有关。ICursor 定义了对游标的操 作。当我们通过 ITable.Search 对数据进行查询,要获取具体 Row 的信息的时候,要通过 ICursor.NextRow 方法向前遍历,游标是不能后退的。游标是和 Table 相对应的。IFeatureCursor 继承了 ICursor IFeatureCursor 是和要素类相对应。

 

     QueryFilterSpatialFilter对象

      在 ArcGIS Engine 中进行查询或者选择,都需要传给一个查找条件,或者过滤条件,这个条件就相当 于一般的 SQL 语句中的 Where 语句,如 Select * from 用户 where 性别=’女’;我们知道 GIS 不仅仅有 属性查询,还有一般关系型数据库不具有的空间查询。而 QueryFilter 对象和 SpatialFilter 对象分别对 应了 ArcGIS Engine 中的属性查询和空间查询。

 

      IQueryFilter 被两个类实现 QueryFilterClass SpatialFilterClass,前者是针对属性查询的,后 者是针对空间查询的。在介绍下这些对象后,我们现在来做一个高亮显示的查询操作。

      京ICP备08100627号-22 京公网安备 11010802030428号