基于C#的ArcEngine二次开发29:GDB文件操作及异常处理(上)

简介: 基于C#的ArcEngine二次开发29:GDB文件操作及异常处理

1. ArcCatalog创建GDB、MDB、SHP

  • 打开arccatalog

aHR0cHM6Ly9pbWdzYS5iYWlkdS5jb20vZXhwL3c9NTAwL3NpZ249NDg0NzdlYmQyZGE0NDYyMzdlY2FhNTYyYTgyMzcyNDYvYzc1YzEwMzg1MzQzZmJmMjk3NzRhMmU0YmQ3ZWNhODA2NDM4OGY5OC5qcGc.png

  • 选择要建库的位置——右键——新建

aHR0cHM6Ly9pbWdzYS5iYWlkdS5jb20vZXhwL3c9NTAwL3NpZ249NWE2NmEwZDQ5YWRkYTE0NGRhMDk2Y2IyODJiNWQwMDkvZjJkZWI0OGY4YzU0OTRlZWE2YWUwYmRlMjBmNWUwZmU5ODI1N2U2Yy5qcGc.png

文件地理数据库就是格式为gdb的数据


aHR0cHM6Ly9pbWdzYS5iYWlkdS5jb20vZXhwL3c9NTAwL3NpZ249NzcxNDk2NzFjNDE3N2YzZTEwMzRmYzBkNDBjZDNiYjkvZDUwNzM1ZmFlNmNkN2I4OTM4OGQzZTQ0MDIyNDQyYTdkODMzMGUxNy5qcGc.png


个人地理数据库就是格式为mdb的数据


aHR0cHM6Ly9pbWdzYS5iYWlkdS5jb20vZXhwL3c9NTAwL3NpZ249MjUzNWMwZThiMzA5NmI2MzgxMTk1ZTUwM2MzMjg3MzMvOTZkZGExNDRhZDM0NTk4MjlkYzRlMjU1MDFmNDMxYWRjYWVmODRhZS5qcGc.png


shapefile就是格式为shp的数据


aHR0cHM6Ly9pbWdzYS5iYWlkdS5jb20vZXhwL3c9NTAwL3NpZ249NjA4OTVmZDU0MjRhMjBhNDMxMWUzY2M3YTA1MDk4NDcvMzQyYWM2NWMxMDM4NTM0M2Q4NmQ4MGU2OWUxM2IwN2VjYjgwODg1Mi5qcGc.png


2. 代码创建gdb工作空间

2.1 CreateFileGDB Class创建

Creates a file geodatabase in a folder. [在给定目录下创建一个地理数据库]


20200330162633899.png

//创建GDB文件对象
CreateFileGDB process1 = new CreateFileGDB {out_folder_path = @"D:\新建文件夹", out_name = "temp.gdb"}

注意上述代码中为out_folder_path设定的目录必须是已存在的目录,否则在使用GP工具执行时,会报错:对COM组件的调用返回了错误 HRESULT E_FAIL

GP.Execute(processor1, null);//将创建的GDB文件加入到GP工具中

2.2 Acrivator.CreateInstance创建

2.2.1 实现代码

        /// <summary>
        /// 在指定目录下创建gdb文件
        /// </summary>
        /// <param name="path">创建目录</param>
        /// <returns>返回工作空间</returns>
        public static IWorkspace CreateFileGdbWorkspace(string gdbFileName)
        {
            Type factoryType = Type.GetTypeFromProgID(
                "esriDataSourcesGDB.FileGDBWorkspaceFactory");
            IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance
                (factoryType);
            string path = System.IO.Path.GetDirectoryName(gdbFileName);
            string fileName = System.IO.Path.GetFileName(gdbFileName);
            IWorkspaceName workspaceName = workspaceFactory.Create(path, fileName, null, 0);
            IName name = (IName)workspaceName;
            IWorkspace workspace = (IWorkspace)name.Open();
            return workspace;
        }

2.2.2 空间索引格网大小无效异常及解决方案

20200403090831620.png


错误:空间索引格网大小无效

当通过 CreateFeature 和 Store 方法或使用 InsertCursor 创建新要素时,可能发生以下错误而导致创建失败:“FDO_E_INVALID_GRID_SIZE -2147216894 空间索引格网大小无效。”

原因: 在创建要素的要素类的格网过小而无法处理要素,所以将出现 FDO_E_INVALID_GRID_SIZE 错误。 仅在使用文件地理数据库或 ArcSDE 地理数据库时会发生此错误。


根据错误消息出现方式的不同,可采用两种不同的方式来处理此错误。


如果在 ArcMap 中进行编辑时出现此错误,可重新计算或修改要素类的格网大小以容纳新要素。 必须在 ArcCatalog 的“要素类”属性对话框中重新计算格网大小。 此操作需要使用“停止编辑”功能,保存一切更改并关闭包含要素类的地图文档。 有关如何重新计算或修改要素类格网大小的步骤,请参阅以下 Web 帮助文档:设置空间索引。

如果在 ArcObjects API 中以编程方式遇到此错误,则通知用户手动修改空间索引不是理想的解决方案。 相反,可以在插入要素之前将要素类置于 LoadOnly 模式,以避免发生此错误。 当要素类退出 LoadOnly 模式时,地理数据库将自动重新计算适合的格网大小。 以下代码示例演示了如何将 LoadOnly 模式与要素类配合使用:


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
5月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
5月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
72 0
|
1月前
|
安全 C# 开发者
C# 一分钟浅谈:文件操作与文件流详解
【9月更文挑战第4天】在日常开发中,文件的读写是基本而重要的任务。C# 通过 `System.IO` 命名空间提供了多种工具,如 `FileStream`、`StreamReader` 和 `StreamWriter` 等,用于处理文件和流。本文从基础概念入手,详细介绍了这些类的使用方法,并讨论了常见错误及其避免策略,包括文件不存在、权限问题和文件被占用等。通过示例代码,展示了如何创建、读取文件以及进行二进制数据操作,并强调了异常处理和性能优化的重要性。掌握这些技巧对于提升编程能力至关重要。
35 2
|
2月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
102 19
|
1月前
|
运维 C# UED
C# 一分钟浅谈:异常处理的最佳实践
【9月更文挑战第5天】在软件开发中,异常处理对保证程序稳定性和用户体验至关重要。本文从基础概念入手,详细讲解C#中的异常处理策略,并通过代码示例说明如何有效实现异常管理。文章涵盖`try`、`catch`和`finally`块的使用,探讨常见问题如忽略异常和过度捕获,并提出最佳实践建议,如使用具体异常类型、记录异常信息及优雅地处理异常,助力开发者构建更健壮的应用程序。
62 0
|
2月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
120 2
|
2月前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
25 3
|
2月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
2月前
|
C#
C# 写日志文件
C# 写日志文件
40 0
|
2月前
|
消息中间件 开发框架 安全
WPF/C#:异常处理
WPF/C#:异常处理
36 0