1、需求

为了完成拓扑分析模块,需要在系统中新增创建文件地理数据库、要素数据集并加载要素数据集中的数据一系列功能。

2、设计思路

很简单,和ArcGIS中新建文件地理数据库、导入数据、加载数据的功能一样:
(1)创建文件地理数据库:选择某一位置,在选定的位置创建文件地理数据库;
(2)创建要素数据集:选择已经建立的文件地理数据库,在该数据库中新建要素数据集(IFeatureWorkspace接口中的CreateFeatureDataset方法)并选择shp文件将其导入到建立好的要素数据集中(FeatureClassToFeatureClass类和Geoprocessor实现)
(3)遍历要素数据集,将要素数据集中的要素类和拓扑数据加载到地图中。

3、界面设计

主要有三个界面,分别是主界面、创建要素数据集界面和加载要素数据集界面:
(1)主界面:设计得比较简单,满足基本的显示功能,以及三个功能按钮。

(2)新建要素数据集窗体:选择数据集的创建路径,即创建要素数据集的文件地理数据库。选择数据集的坐标系,定义数据集名称,选择要导入要素数据集的shp要素将其名称加到列表框中。

(3)加载数据集窗体:选择文件地理数据库,遍历数据库中的要素数据集,将其名称显示在列表框中,勾选需加载的数据集将其加载到地图中。

4、关键代码

(1)新建文件地理数据库,通过IWorkspaceFactory接口的Create方法实现,主要代码:

//按下新建文件GDB按钮private void button1_Click(object sender, EventArgs e){SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "文件地理数据库(*.gdb)|*.gdb";saveFileDialog.Title = "新建文件地理数据库";if (saveFileDialog.ShowDialog() == DialogResult.OK){if (System.IO.File.Exists(saveFileDialog.FileName)){MessageBox.Show("文件已存在!");return;}try{int index = saveFileDialog.FileName.LastIndexOf("\\");string GDBName = saveFileDialog.FileName.Substring(index + 1);string GDBPath = saveFileDialog.FileName.Substring(0, index);IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();pWorkspaceFactory.Create(GDBPath, GDBName, null, 0);MessageBox.Show("创建成功!", "提示");}catch(Exception ex){MessageBox.Show(ex.Message);}}}

(2)新建要素数据集,三个参数分别为:创建要素数据集的工作空间即选择的文件地理数据库、要素数据集的名称、要素数据集的坐标系

//在文件数据库中新建要素数据集public IFeatureDataset CreateDatasetInGDB(IWorkspace pWorkspace, string name, ISpatialReference pSpatialReference){IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;IFeatureDataset pFeatureDataset = pFeatureWorkspace.CreateFeatureDataset(name, pSpatialReference);return pFeatureDataset;}

(3)要素数据集中导入shp要素类,参数分别是待导入的要素类,输出的路径名称即文件数据库的地址,导入后要素类的名称。

//将要素类导入要素数据集方法public static bool ImportFeatureIntoDS(IFeatureClass pInFeatureClass, string outPath, string name){object sev = null;Geoprocessor GP = new Geoprocessor();try{FeatureClassToFeatureClass featureClassToFeatureClass = new FeatureClassToFeatureClass();featureClassToFeatureClass.in_features = pInFeatureClass;featureClassToFeatureClass.out_path = outPath;featureClassToFeatureClass.out_name = name;GP.OverwriteOutput = false;IGeoProcessorResult pResult = new GeoProcessorResult();GP.Execute(featureClassToFeatureClass, null);return true;}catch (Exception ex){MessageBox.Show(GP.GetMessages(ref sev));return false;}}

(4)加载要素数据集中的要素类和拓扑,主要是分别遍历要素数据集中的要素类和拓扑。

//加载数据集private void button3_Click(object sender, EventArgs e){IFeatureWorkspace pFeaWS = pWorkspace as IFeatureWorkspace;List<IFeatureDataset> FeatureDSList2 = new List<IFeatureDataset>();for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++){foreach (IFeatureDataset eachDS in FeatureDSList){if (eachDS.Name == checkedListBox1.CheckedItems[i].ToString()){FeatureDSList2.Add(eachDS);}}}foreach (IFeatureDataset FeaDS2 in FeatureDSList2){IEnumDataset pEnumDS = FeaDS2.Subsets;IDataset pFeaDS2;while ((pFeaDS2 = pEnumDS.Next()) != null){if (pFeaDS2 is IFeatureClass){IFeatureLayer pFeaLayer = new FeatureLayer();pFeaLayer.FeatureClass = pFeaWS.OpenFeatureClass(pFeaDS2.Name);pFeaLayer.Name = pFeaDS2.Name;pMap.AddLayer(pFeaLayer as ILayer);}}//加载拓扑结果ITopologyLayer pTopolayer;ITopology pTopology;ILayer pLayer;ITopologyContainer pTopoContainer = (ITopologyContainer)FeaDS2;for (int i = 0; i < pTopoContainer.TopologyCount; i++){pTopolayer = new TopologyLayerClass();pTopology = pTopoContainer.Topology[i];pTopolayer.Topology = pTopology;pLayer = pTopolayer as ILayer;pLayer.Name = FeaDS2.Name + "_拓扑" + i + 1;pMap.AddLayer(pLayer);}}}

5、代码下载

(1)github:https://github.com/ranhongwu/190807CreateFileGDB 。
(2)CSDN:https://download.csdn.net/download/weixin_41607453/11506201 。

ArcEngine新建文件地理数据库及其要素数据集,要素数据集加载(20190809)相关推荐

  1. 深度学习数据集定义与加载

    深度学习数据集定义与加载 深度学习模型在训练时需要大量的数据来完成模型调优,这个过程均是数字的计算,无法直接使用原始图片和文本等来完成计算.因此与需要对原始的各种数据文件进行处理,转换成深度学习模型可 ...

  2. detectron2使用自定义数据集及数据加载

    1.使用自定义数据集 数据集中列出了detectron2中内置支持的数据集.如果要使用自定义数据集,同时还重复使用detectron2的数据加载器,则需要: 1)注册您的数据集(即,告诉detectr ...

  3. java接口的映射文件,详解mybatis通过mapper接口加载映射文件

    通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合是非常重要的.那么什么是通过 mapper 接口加载映射文件呢? 我们首先看以前的做法,在全局配置文件 mybatis-conf ...

  4. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  5. [css] 如果css文件过大时,如何异步加载它?

    [css] 如果css文件过大时,如何异步加载它? 分割成多个CSS文件进行Gzip压缩link preload 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大 ...

  6. 打开IDE里XXX.rc文件夹的子项,显示“!加载失败”

    描述:VS2005,打开IDE里XXX.rc文件夹的子项,显示"!加载失败" 说明:已经关闭了工程的所有文档了,点解决方案下的XXX.rc仍未解决 问题的原因是:资源rc里记录的资 ...

  7. B站刘二大人-数据集及数据加载 Lecture 8

    系列文章: <PyTorch深度学习实践>完结合集-B站刘二大人 Pytorch代码注意的细节,容易敲错的地方 B站刘二大人-线性回归及梯度下降 Lecture3 B站刘二大人-反向传播L ...

  8. mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)

    >>欢迎 点赞,留言,收藏加关注<< 1. 模型构建的步骤: 在构建AI模型时,一般有以下主要步骤:准备数据.数据预处理.划分数据集.配置模型.训练模型.评估优化.模型应用,如 ...

  9. PyTorch 编写自定义数据集,数据加载器和转换

    本文为 pytorch 官方教程https://pytorch.org/tutorials/beginner/data_loading_tutorial.html代码的注释 w3cschool 的翻译 ...

最新文章

  1. 云计算Python自动化运维开发实战 三、python文件类型
  2. 如何利用 AI 对抗疫情?
  3. 【注意】关于Redis存在远程命令执行漏洞的安全公告
  4. Spring中AOP相关的API及源码解析,原来AOP是这样子的
  5. firefox BUG --输入法转换时,关闭浏览器. 5555....... 心碎...
  6. 【译】Tutorials ---- Hello, World
  7. Kubernetes二进制部署——证书的制作和ETCD的部署
  8. 00001centos6.3安装
  9. cake-build -.Net Core 跨平台构建自动化系统。
  10. java实现map和object互转
  11. springmvc整合mybatis之准备阶段与文件配置
  12. JZOJ 3515. 软件公司
  13. cocos 动画系统
  14. Java面试题系列(X)优化tomcat配置
  15. 【bzoj2989】数列 KD-tree+旋转坐标系
  16. 基于VUE实现的新闻后台管理系统-三
  17. 启动项目时出现java.io.EOFException异常
  18. html中背景渐变斜着渐变,CSS3 斜向渐变背景
  19. 华米 Amazfit 跃我 GTR 4和GTS 4的区别
  20. 一个数据分析报告的框架,主要包含哪几项?

热门文章

  1. matlab六杆机构运动分析
  2. 对象存储服务----OSS
  3. 互融云软件系统提供商|一款成熟的数字资产交易系统
  4. mc服务器地皮系统权限指令,服务器地皮(plot)指令,还有领地指令
  5. Syslog配置——NE路由器,日志定向转发。
  6. 年终福利,Smartbi手把手教你做汇报型分析报告
  7. vue + echarts实现数据可视化统计页面
  8. 安卓开发的java文件与xml文件
  9. java计算机毕业设计小型健身俱乐部网站源码+lw文档+系统+数据库
  10. Kuberntes云原生实战04 安装前置条件及Docker环境