ArcGIS Engine 对要素操作

获取所有要素集

/// <summary>
/// 获取所有要素集
/// </summary>
/// <param name="workspace">工作空间对象</param>
/// <returns>要素集列表</returns>
public static List<IFeatureDataset> GetAllFeatureClass(IWorkspace workspace)
{
    IEnumDataset dataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
    IFeatureDataset featureDataset = dataset.Next() as IFeatureDataset;
    List<IFeatureDataset> featureDatasetList = new List<IFeatureDataset>();
    while (featureDataset != null)
    {
        featureDatasetList.Add(featureDataset);
        featureDataset = dataset.Next() as IFeatureDataset;
    }
    return featureDatasetList;
}

获取所有要素类

/// <summary>
/// 获取所有要素类
/// </summary>
/// <param name="featureDataset">要素集</param>
/// <returns>要素类列表</returns>
public static List<IFeatureClass> GetAllFeatureClass(IFeatureDataset featureDataset)
{
    IFeatureClassContainer featureClassContainer =(IFeatureClassContainer)featureDataset;
    IEnumFeatureClass enumFeatureClass = featureClassContainer.Classes;
    IFeatureClass featureClass = enumFeatureClass.Next();
    List<IFeatureClass> featureClassList = new List<IFeatureClass>();
    while (featureClass != null)
    {
        featureClassList.Add(featureClass);
        featureClass = enumFeatureClass.Next();
    }
    return featureClassList;
}

获取所有要素

/// <summary>
/// 获取所有要素
/// </summary>
/// <param name="featureClass">要素类</param>
/// <returns>要素列表</returns>
public static List<IFeature> GetAllFeatureClass(IFeatureClass featureClass)
{
    List<IFeature> featureList = new List<IFeature>();
    IFeatureCursor featureCursor = featureClass.Search(null, false);
    IFeature feature = featureCursor.NextFeature();
    while (feature != null)
    {
        featureList.Add(feature);
        feature = featureCursor.NextFeature();
    }
    return featureList;
}

通过名称来删除要素类

//注: 在程序运行中往往有些要素类因为出错而无法删除,这时IDataset.Delete这个方法则无法成功,可以用轻量级的名称对象来完成这个任务
//删除要素类
public static bool DeleteFeatureDataset(IWorkspace ws, string name)
{
    if (ws == null || string.IsNullOrEmpty(name))
    {
        ErrMsg = "工作空间或要素类名称不能为空!";
        return false;
    }
    IFeatureDataset pFeaDataSet;
    IEnumDatasetName pEnumDatasetName;
    IFeatureWorkspace pFeaWorkspace;
    IDatasetName pDatasetName;
    try
    {
        pFeaWorkspace = ws as IFeatureWorkspace;
        pEnumDatasetName = ws.get_DatasetNames(esriDatasetType.esriDTFeatureClass ^ esriDatasetType.esriDTFeatureDataset);
        pEnumDatasetName.Reset();
        pDatasetName = pEnumDatasetName.Next();
        while (pDatasetName != null)
        {
            if (pDatasetName.Type == esriDatasetType.esriDTFeatureDataset)
            {
                //如果是要素集,则对要素集内的要素类进行查找
                IEnumDatasetName pEnumFcName = (pDatasetName as IFeatureDatasetName).FeatureClassNames;
                IDatasetName pFcName = pEnumFcName.Next();
                while (pFcName != null)
                {
                    if (pFcName.Name.IndexOf(name) >= 0)
                    {
                        DeleteByName(pFeaWorkspace, pFcName);
                        return true;
                    }
                    pFcName = pEnumFcName.Next();
                }
            }
            else
            {
                if (pDatasetName.Name.IndexOf(name) >= 0)
                {
                    DeleteByName(pFeaWorkspace, pDatasetName);
                    return true;
                }
            }
            pDatasetName = pEnumDatasetName.Next();
        }
        return false;
    }
    catch (Exception ex)
    {
        ErrMsg = ex.Message;
        return false;
    }
}
//删除名称对象
public static void DeleteByName(IFeatureWorkspace pFeaWorkspace, IDatasetName pDatasetName)
{
    IFeatureWorkspaceManage pWorkspaceManager = pFeaWorkspace as IFeatureWorkspaceManage;
    pWorkspaceManager.DeleteByName(pDatasetName);
}

猜你喜欢

转载自www.cnblogs.com/King2019Blog/p/11288183.html