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

本文目录
  • 正文

上文中我们已经提到了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 字段,数据量打的时候要考虑内存压力。

Cursor和FeatureCursor对象

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

QueryFilter与SpatialFilter对象

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

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

ArcGIS Engine 10 开发手册全集

ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论