理解ArcObjects中的游标(3)
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
Comments
这篇翻译的文章很好,使我能较好的理解cursor。
请问一个问题: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 ?
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条.
感谢你抽出时间为我解答问题!我是本科生,刚刚开始学习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服务关了也不行。这应该如何解决?谢谢你了!
designer,91,ecp279970139,none,5H8LJALHPCE5Y7ZPM152
把这个删除再试验下.
AO和AE的lic文件有冲突的地方
还是不行。这该怎么办那?
问问。在AE的Icursor查询中,可以使用order by 语句吗?如果可以使用的话。怎么使用啊?(请给个铺句出来)
谢谢
给个例子出来!
不可以,使用ITableSort才行
Leave a comment
Or, take a look at Archives and Categories
想问一下你写的书那里可以买到,是什么名字