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

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

1 接口及帮助

1.1 IWorkspace

image.png

1.2 IFeatureDataset

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

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

image.png


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

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;
        }
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
177 61
C# 中的 XML 与 JSON 数据处理
|
数据处理 数据库 C#
C# 实现多线程批量数据处理
应用场景分析:假设有一组已知数量的数据,按照一定的业务处理规则处理并保存数据库,如何提升数据处理的效率并完成数据保存(具体情况具体分析)?此处使用控制台方式模拟输入数据(类比保存数据库处理)...
537 0
C# 实现多线程批量数据处理
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
|
算法 C#
基于C#的ArcEngine二次开发50:生成面空洞连接线
基于C#的ArcEngine二次开发50:生成面空洞连接线
基于C#的ArcEngine二次开发50:生成面空洞连接线
|
NoSQL C#
基于C#的ArcEngine二次开发57:每用户订阅上的所有人SID 不存在
基于C#的ArcEngine二次开发57:每用户订阅上的所有人SID 不存在
|
定位技术 C# 图形学
基于C#的ArcEngine二次开发53: mxd与IPagelayout
基于C#的ArcEngine二次开发53: mxd与IPagelayout
|
13天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
28 3