使用CopyFeatures工具将要素类按属性条件分层

0
分享 2013-08-31
有些时候一个要素类包含了很多信息,例如城市的POI点信息,包含了医院、学校、商场、企事业单位、银行等等;而我们实际的使用需求是对这些POI信息分层,然后再做各自的处理。对于数据分层,通过ArcGIS 的CopyFeatures工具就可以轻松实现。下面所示为ArcGISEngine程序实现的数据分层代码:
 ///<summary>
/// 要素类按条件分层
/// </summary>
/// <param name=”sFeatureClass”>要分层的要素类</param>
/// <param name=”sFilter”>分层提取条件(如:Type= “002″)</param>
/// <param name=”sNewFeatureClass”>生成的新要素类名称(保存分层提取后的要素类)</param>
private voidSplitFeatureClassByFilter(string sFeatureClass,string sFilter,stringsNewFeatureClass)
{
try
{
ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWorkspacefactory = newESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory();
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace =pWorkspacefactory.OpenFromFile(@”C: emp2680-498.mdb”, 0);
IFeatureClass pFeatureClass = GetFeatureClass(pWorkspace, sFeatureClass,sFilter);
IVariantArray parameters = new VarArrayClass();
parameters.Add(pFeatureClass);
parameters.Add(@”C:emp2680-498.mdb” +“\” + sNewFeatureClass);
ESRI.ArcGIS.Geoprocessor.Geoprocessor pGeoPro = newESRI.ArcGIS.Geoprocessor.Geoprocessor();
ESRI.ArcGIS.ConversionTools.FeatureClassToFeatureClass feaTofea = newESRI.ArcGIS.ConversionTools.FeatureClassToFeatureClass();
pGeoPro.Execute(“CopyFeatures”, parameters, null);
}
catch(Exception ex)
{

}
}
/// <summary>
/// 根据条件提取要素
/// </summary>
/// <param name=”pWS”>工作空间</param>
/// <param name=”sTabName”>要素类名称</param>
/// <param name=”sAttrFilter”>提取条件</param>
/// <returns>提取要素类(仅包含要提取的要素)</returns>
private IFeatureClassGetFeatureClass(IWorkspace pWS, string sTabName, string sAttrFilter)
{
try
{
if (pWS == null || sTabName == null) return null;
IFeatureWorkspace pFWS = pWS as IFeatureWorkspace;
IFeatureClass pFC = null;
pFC = pFWS.OpenFeatureClass(sTabName);
IQueryDef pQueryDef = pFWS.CreateQueryDef();
pQueryDef.Tables = sTabName;
pQueryDef.WhereClause = sAttrFilter;
IQueryName2 pQueryName = new FeatureQueryNameClass();
pQueryName.PrimaryKey = pFC.OIDFieldName;
pQueryName.QueryDef = pQueryDef;
IDataset pDS = (IDataset)pFWS;
IWorkspaceName pWSName = (IWorkspaceName)pDS.FullName;
IDatasetName pDSName = (IDatasetName)pQueryName;
pDSName.WorkspaceName = pWSName;
IName pName = (IName)pQueryName;
pFC = pName.Open() as IFeatureClass;
return pFC;
}
catch
{
return null;
}
}


文章来源:http://blog.csdn.net/sydbc/article/details/17783301

0 个评论

要回复文章请先登录注册