理解ArcObjects中的游标(3)

Posted by 蒋波涛 9 October,2006 Views (10)Comment

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

Related Items

Categories : ArcObjects Tags : ArcObjects  
Comments
2006-11-1 11:29:26

想问一下你写的书那里可以买到,是什么名字

Posted by vicky Gravatar Icon

2007-2-24 10:27:16

这篇翻译的文章很好,使我能较好的理解cursor。

Posted by weiwei Gravatar Icon

2007-2-24 10:32:15

请问一个问题:Set variable = object.Search (filter, Recycling )中recycling参数到底是干什么用的?“The recycling parameter controls row object allocation behavior. Recycling cursors rehydrate a single feature object on each fetch and can be used to optimize read-only access, for example, when drawing.”这句到底是什么意思?怎么还有 Recycling cursors 和non-recycling cursor ?

Posted by weiwei Gravatar Icon

2007-2-27 10:52:47

The recycling parameter controls row object allocation behavior. Recycling cursors rehydrate a single feature object on each fetch and can be used to optimize read-only access, for example, when drawing

recycling参数用于控制row对象的定位行为,recycling类型游标每次只会取一个要素对象,这个参数一般用于只读型的操作中,如绘图过程的优化.
游标总是单向的,但在取出记录的时候,可以通过这个参数来控制,我们一般将它设置为false,这样每次取出的记录为2000条.

Posted by 蒋波涛 Gravatar Icon

2007-3-1 19:31:47

感谢你抽出时间为我解答问题!我是本科生,刚刚开始学习AO,这几天拜读你的大作,觉得很有启发。

请问我装了ArcGIS 9.1 Desktop和developerkit,后来又装了ArcEngine 9.1developerkit,但是我在vb6.0中添加控件Toccontrol时总是显示this control requires an ESRI Designer license。我在网上下了授权文件如下:
3dengine,91,ecp387942929,none,NKMGJE0LX0S5RJE15061
designer,91,ecp279970139,none,5H8LJALHPCE5Y7ZPM152
gdbedit,91,ecp226004169,none,ZZYP340LLBC2LMZ59250
networkengine,91,ecp694040297,none,KGEAFAXSTLJSA1GJH027
spatialengine,91,ecp351946892,none,ZZ1THK6Z4HBPDPF44025
standardengine,91,ecp172022654,none,JFC42XKEJ1L5GTJ89099
我到控制版面把license服务关了也不行。这应该如何解决?谢谢你了!

Posted by weiwei Gravatar Icon

2007-3-4 0:13:15

designer,91,ecp279970139,none,5H8LJALHPCE5Y7ZPM152
把这个删除再试验下.
AO和AE的lic文件有冲突的地方

Posted by 蒋波涛 Gravatar Icon

2007-3-4 23:32:01

还是不行。这该怎么办那?

Posted by weiwei Gravatar Icon

2009-3-12 9:42:06

问问。在AE的Icursor查询中,可以使用order by 语句吗?如果可以使用的话。怎么使用啊?(请给个铺句出来)
谢谢

Posted by birdman Gravatar Icon

2009-3-12 9:42:23

给个例子出来!

Posted by birdman Gravatar Icon

2009-3-12 15:13:42

不可以,使用ITableSort才行

Posted by 蒋波涛 Gravatar Icon

Leave a comment

Or, take a look at Archives and Categories

目录

存档