博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

What is the difference between searching a featurelcass versus a featurelayer?

IFeatureClass.Search:

     Returns an object cursor that can be used to fetch feature objects selected by the specified query.

IFeatureLayer2.Search:

     Use this method to return a read-only cursor of the layer’s features.

There is ‘Search; method in both IFeatureLayer and IFeatureClass Interface. Both returns cursor based on search criteria(标准、尺度). What is difference between these?. This question is obivious for a novice(新手). If you have gone through Help documentation you can figure out easily. Else here is a straight answer

They are the same unless you have a definition query assigned to the layer. In that case the FeatureLayer.Search will only return features that also meet the definition query criteria, while FeatureClass.Search will return all features regardless of definition query. 

This FeatureLayer Search method will not work on joined fields. If the FeaureLayer has any joins, you should use the IGeoFeatureLayer::SeachDisplayFeatures method instead.

You cannot use the cursor returned by IFeatureLayer::Search to update features, instead use IFeatureClass::Update.

-----------------------------------------------------------------------------------------------------------------------------------------------

1、FeaturLayer是加载在地图文档中的数据层,只是要素类的表现形式;FeatureClass是一组空间实体的集合,在数据表中存储了统一的属性和行为,每一个FeatureClass都有一个Geometry类型,如shp文件;

2、IFeatureLayer继承自ILayer,IFeatureClass继承自IClass;

3、FeatureLayer可以创建自己的对象,而FeatureClass不行:

IFeatureClass=IFeatureLayer.FeatureClass 或者

IFeatureClass=IFeatureWorkspace.openFeatureClass("xx")