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

理解ArcObjects中的游标(2)

理解ArcObjects中的游标(2)

正如前面提到的,cursor类是用于产生一个与数据库表进行交互交互的对象。在AO中,cursor类是一个非实例化对象,它意味着你必须使用另一个对象来获得一个cursor类的实例。


       Cursor Class

       正如前面提到的,cursor类是用于产生一个与数据库表进行交互交互的对象。在AO中,cursor类是一个非实例化对象,它意味着你必须使用另一个对象来获得一个cursor类的实例。既然如此,在AO中,表类被用于产生一个cursor类的实例,表类包含了三种方法能够产生一个cursor类的实例,而返回的cursor类型取决于程序员调用的方法。Fig1显示了AO中的Table ClassOMDITable接口拥有三种方法能够返回特定类型的cursorITable接口的SearchInsertUpdate方法能够用于返回cursor实例。这些方法的名字与返回的cursor类型相对应。

       在这些方法其中一个被调用以后,AO返回一个ICursor的实例。Fig2显示了一个Cursor类的OMDSearchInsertUpdate都可以返回一个ICursor的实例。ICursor有一个属性Fields和许多能够操作记录子集的方法,但这些方法是否可用取决于你使用的cursor类型。例如,如果你产生了一个search cursor,当你调用InsertRowUpdateRow方法聚会返回一个错误。

       FeatureCursor Class

       FeatureCursor类与Cursor类非常相似,其区别在于前者是操作地理数据集而后者是操作传统数据库表。shapefilegeodatabase的地理数据集在AO中表现为一个AO 要素类的形式。与cursor类相似,FeatureCursor类也是一个通过FeatureClass对象的方法产生的非实例化对象。与ITable接口类似,IFeatureClass接口也包含了SearchInsertUpdate方法用于返回一个IFeatureCursor实例。

       在其中一个方法被调用后,一个IFeatureCursor的实例将会被返回,IFeatureCursor可以的属性和方法尽管与ICursor的在名字上稍微不同,但其功能却是差别很大,例如,InsertFeature VS InsertRow

       使用属性和空间约束条件

       看看FeatureClassTableOMD图,查找SearchInsertUpdate方法。注意每一个方法都可以用于返回一个cursorcursor包含了一个参数,这个参数是IQueryFilter的实例。注意IQueryFilter参数,IQueryFilter是一个可以在内存中产生用于限制记录子集的对象。

       例如,如果正在查询一个parcel数据库,你可能需要限制返回的parcels结果,让它们的值都大于10万美元。你可以使用IQueryFilter接口来约束。除此以外,如果你使用一个FeatureClass对象,还可以使用ISpatialFilter接口来产生SpatialFilter。这样你可以返回所有在洪水区的parcel(使用空间查询),且其价值高于10万美元(使用属性查询)。记住空间查询只能用于要素类上,如果在一个数据库表上使用空间查询则会返回错误,因为没有地理对象可以用过滤器过虑。让我们看看QueryFilterSpatialFilter类的细节。

      京ICP备2025132830号-1 京公网安备 号