基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作

目录

1 接口及帮助

1.1 IWorkspace

1.2 IFeatureDataset

1.3 IFeatureClassContainer

2 具体功能函数

2.1 根据名称删除FeatureClass

2.2 删除GDB下的指定数据集

3 获取给定数据集下的所有要素层的别名、名称

3.1 获取一个Dataset下的所有FeatureClass的别名

3.2 获取所有要素类及要素下的FeatureClass名称


 

 

1 接口及帮助

1.1 IWorkspace

属性或方法描述
IEnumDataset get_Datasets (esriDatasetTypeDatasetType);获取工作空间的要素集
IEnumDatasetName get_DatasetNames (esriDatasetTypeDatasetType);获取工作空间要素集的名称
 

1.2 IFeatureDataset

BrowseNameThe browse name of the dataset.data的浏览名称
CanCopyTrue if this dataset can be copied.数据集是否可拷贝
CanDeleteTrue if this dataset can be deleted.数据集是否可删除
CanRenameTrue if this dataset can be renamed.数据集是否可重命名
CategoryThe category of the dataset. 数据集的目录
CopyCopies this dataset to a new dataset with the specified name.将数据集拷贝到一个新指定的数据集中
CreateFeatureClassCreates a new FeatureClass in this FeatureDataset.创建一个数据集
DeleteDeletes this dataset.删除当前数据集
FullNameThe associated name object.数据集的全名
NameThe name of the Dataset.数据集的名称
PropertySetThe set of properties for the dataset.数据集的属性集合
RenameRenames this Dataset.重命名数据集
SubsetsDatasets contained within this dataset.数据集中包含的子要素类(IfeatureClass)
TypeThe type of the Dataset.数据集的类型
WorkspaceThe workspace containing this dataset.数据集的工作空间

示例代码(获取数据集下的要素类名称):

IWorkspaceFactory worFact =new FileGDBWorkspaceFactory();
IWorkspace workspace = worFact.OpenFromFile("路径", 0);
IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
IFeatureDataset ipFeaterDataset = featureWorkspace.OpenFeatureDataset(checkLayerName);
IEnumDataset ped = ipFeaterDataset.Subsets;

1.3 IFeatureClassContainer

ClassThe FeatureClass associated with the specified index value. 
ClassByIDThe FeatureClass with the specified ID. 
ClassByNameThe FeatureClass with the specified name. 
ClassCountThe number of FeatureClasses in this container. 
ClassesAn enumerator over the FeatureClasses. 

示例代码(获取数据集下的要素类及其别名):

IFeatureDataset ipFeaterDataset = featureWorkspace.OpenFeatureDataset(checkLayerName);
IFeatureContainer pfc = ipFeaterDataset as IFeatureContainer;
IEnumFeatureClass pefc = pfc.Classes;

2 具体功能函数

2.1 根据名称删除FeatureClass

这个函数的缺点是,不能删除FeatureSet中的FeatureClass

public void DeleteFeatureClass(string featueClassName)
{
    //打开GDB文件
    IWorkspaceFactory worFact =new FileGDBWorkspaceFactory();
    IWorkspace workspace = worFact.OpenFromFile("路径", 0);
    IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
 
    //根据名称删除数据库要素
    IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace;
    IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
    IDatasetName datasetName = null;
 
    while ((datasetName = enumDatasetName.Next()) != null)
    {
        if (datasetName.Name.Equals(featueClassName))
        {
            featureWorkspaceMange.DeleteByName(datasetName);//删除指定要素类
            break;
        }
    }
}

2.2 删除GDB下的指定数据集

public void DeleteFeatureDataset(string featueClassName, string featueDatasetName)
{
    //打开GDB文件
    IWorkspaceFactory worFact =new FileGDBWorkspaceFactory();
    IWorkspace workspace = worFact.OpenFromFile("路径", 0);
    IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;
 
    //根据名称删除数据库要素
    IFeatureWorkspaceManage featureWorkspaceMange = (IFeatureWorkspaceManage)featureWorkspace;
    IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
    IDatasetName datasetName = null;
 
    while ((datasetName = enumDatasetName.Next()) != null)
    {
        if (datasetName.Name.Equals(featueDatasetName))
        {
            featureWorkspaceMange.DeleteByName(featueDatasetName);//删除指定要素类
            break;
        }
    }
}

 

3 获取给定数据集下的所有要素层的别名、名称

3.1 获取一个Dataset下的所有FeatureClass的别名

public List<string> getAllFeaClsNamesInDS(IFeatureDataset m_FeatureDataset)
{
    List<string> liFeaClsNames = new List<string>();
    //利用IFeatureClassContainer对象遍历IFeatureDataset
    IFeatureClassContainer m_FeatureClassContainer = (IFeatureClassContainer)m_FeatureDataset;
    IEnumFeatureClass m_EnumFC = m_FeatureClassContainer.Classes;
    IFeatureClass m_FeatureClass = m_EnumFC.Next();
    while (m_FeatureClass != null)
    {         
          liFeaClsNames.Add(m_FeatureClass.AliasName);
          m_FeatureClass = m_EnumFC.Next();

    }
    return liFeaClsNames;
}

3.2 获取所有要素类及要素下的FeatureClass名称

 /// <summary>
        /// 获取GDB MDB工作空间的要素类
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="workspaceType"></param>
        /// <returns></returns>
        public List<string> GetFeatureClassByWorkspace(IWorkspace workspace)
        {
            List<string> listFeaClass = new List<string>();
            try
            {
                //遍历工作空间下的featureclass
                IFeatureWorkspace pFeatureWorkspace = workspace as IFeatureWorkspace;
                IEnumDataset pEnumDatasets = workspace.get_Datasets(esriDatasetType.esriDTAny) as IEnumDataset;
                IDataset pDataset = pEnumDatasets.Next();
                while (pDataset != null)
                {
                    if (pDataset.Type == esriDatasetType.esriDTFeatureClass)
                    {
                        //string aliasName = pFeatureWorkspace.OpenFeatureClass(pDataset.Name).AliasName;
                        listFeaClass.Add(pDataset.Name);
                    }
                    else if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
                    {
                        IEnumDataset pESubDataset = pDataset.Subsets;
                        IDataset pSubDataset = pESubDataset.Next();
                        while (pSubDataset != null)
                        {
                            listFeaClass.Add(pSubDataset.Name);

                            pSubDataset = pESubDataset.Next();
                        }
                    }

                    pDataset = pEnumDatasets.Next();
                }
            }
            catch (Exception ex)
            {
                return null;
            }

            return listFeaClass;
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值