esri的老师,几十万个图斑,根据条件返回featureclass,看了帮助文档只对gdb有效,shapefile无效,是否有支持shapefile的接口呢?

public IFeatureClass GetFeatureLayer(string path, string featureLayerName, string whereClause)
{
var featureWorkspace = (IFeatureWorkspace)OpenWorkspace(path);
IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(featureLayerName);
IQueryDef queryDef = featureWorkspace.CreateQueryDef();
queryDef.Tables = featureLayerName;
queryDef.WhereClause = whereClause;
IQueryName2 queryName2 = new FeatureQueryNameClass();
queryName2.CopyLocally = false;
queryName2.PrimaryKey = featureClass.OIDFieldName;
queryName2.QueryDef = queryDef;
IDataset dataset = (IDataset)featureWorkspace;
IWorkspaceName workspaceName = (IWorkspaceName)dataset.FullName;
IDatasetName datasetName = (IDatasetName)queryName2;
datasetName.WorkspaceName = workspaceName;
datasetName.Name = featureLayerName;
IName name = (IName)datasetName;
IFeatureClass newfeatureClass = name.Open() as IFeatureClass;
return newfeatureClass;
}
已邀请:

gisweis - GIS应用开发

赞同来自: 随意的风

IQueryDef sets the parameters needed to create an attribute query. The name of the table and a string defining the where clause are required. An optional list of columns may be included to specify the columns to be retrieved. If no columns are specified, all columns will be returned.
 IQueryDef only can be used with ArcSDE, Personal and File Geodatabase data sources.
 

冯驰

赞同来自:

您的意思是”IQueryDef only can be used with ArcSDE, Personal and File Geodatabase data sources.”
建议您试下ISpatialFilter   IQueryFilter?

随意的风 - GIS

赞同来自:

经测试:IQueryDef  支持sde和GDB,mdb没有测试,我后面测试一下;
另:IQueryDef可以直接得到条件选择后的IFeatureClass,而ISpatialFilter、IQueryFilter只能得到条件选择后的IFeatureCursor,遍历得到一个个IFeature,而不是IFeatureClass
 

要回复问题请先登录注册