http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcObjects开发 >> 正文

理解ArcObjects中的游标(3)

作者:浩淼的天…    文章来源:http://www.hmgis.cn    点击数:    更新时间:2006-12-29
摘要:

(本文转自 浩淼的天空  http://www.hmgis.cn)

QueryFilter

在从一个数据集产生一个cursor或featurecursor之前,你能定义一个QueryFilter来设置约束限制返回记录的条数。QueryFilter是一个可产生的类(组件类),你可以在VBA中使用NEW关键字来产生一个此类的实例对象。你将能够使用IQueryFilter接口来处理QueryFilter类来定义一个属性约束。WhereClause属性则用于限制这个查询,下列代码就是一个例子:
Dim pQueryFilter as IQueryFilter
Set pQueryFilter=New QueryFilter
pQueryFilter.WhereClause="Prop_Val>=100000"

SpatialFilter

SpatialFilter可以用于产生一个基于空间约束的记录子集。它能够使用在FeatureClass上,但不能用于Table。SpatialFilter是一个组件类,也可以使用New关键字来产生一个类的实例。SpatialFilter使用Geometry属性和SpatialRel属性来设置查询约束条件。Geometry属性用于设置一个特定的地理要素,而SpatialRel则用于预设其空间关系,如相交、叠加或相邻。

由于SpatialFilter是一种QueryFilter,它也可以访问其所有的属性和方法。因此,你能够使用IQueryFilter的WhereClause属性来绑定空间和属性限制。下面是一个联合使用的例子:
Dim pSpatialFilter As ISpatialFilter
Set pSpatialFilter = New SpatialFilter
Set pSpatialFilter.Geometry = pFloodPolygon
pSpatialFilter.SpatialRel = esriSpatialRelContains
pSpatialFilter.WhereClause = “prop_val > 100000”
Set pFCursor = pCustomerLayer.Search(pSpatialFilter,True)

使用Cursor来访问记录

现在你已经对产生cursor的一般机制有了很好的了解,让我们来看看如何使用一个cursor来访问返回的记录。记住,cursor是仅仅存在内存中的来自一个表或要素类的记录集合。

当一个cursor第一次产生后,一个关联指针也产生了。你使用一次可以使用一个cursor来访问一行记录。这个指针可以帮助你追踪目前是哪一条行记录在被访问。使用初始化,指针实际上可以指向第一条记录。为了通过cursor获得第一条记录,你必须调用NextRow或NextFeature方法。这两个方法指向了cursor的下一条记录。但当它第一次调用的时候,实际指向第一条记录。之后每一次调用这些方法都是指向下一条记录。

通过某些方法你还可以到达游标中可以记录的末尾位置,如使用NewRow或NewFeature将返回Nothing对象,指示目前已经在cursor的末尾。在AO中的cursor是一个单向移动的对象,它不允许你返回之前的位置。一旦你访问过了一条记录,你就不能再返回去了。

结论

AO cursor结构提供了程序员查询、插入、更新和删除要素类和表中记录的能力。这些易于产生和适用性强的cursor结构诗存在内存中的记录集合,他们能够使用QueryFilter或SpatialFilter来设置约束条件。一旦成生后,这些cursor结构就能够提供一个易于访问、只能向前移的结构来访问单个记录的内容。为了更到更多的信息,请联系:

Eric Pimpler
President, GeoSpatial Training & Consulting, LLC
E-mail: eric@geospatialtraining.com
Web: www.geospatialtraining.com
Tel.: 210-260-4992

Tags:ArcObjects,游标  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图