ArcEngine新建文件地理数据库及其要素数据集,要素数据集加载(20190809)
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)相关推荐
- 深度学习数据集定义与加载
深度学习数据集定义与加载 深度学习模型在训练时需要大量的数据来完成模型调优,这个过程均是数字的计算,无法直接使用原始图片和文本等来完成计算.因此与需要对原始的各种数据文件进行处理,转换成深度学习模型可 ...
- detectron2使用自定义数据集及数据加载
1.使用自定义数据集 数据集中列出了detectron2中内置支持的数据集.如果要使用自定义数据集,同时还重复使用detectron2的数据加载器,则需要: 1)注册您的数据集(即,告诉detectr ...
- java接口的映射文件,详解mybatis通过mapper接口加载映射文件
通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合是非常重要的.那么什么是通过 mapper 接口加载映射文件呢? 我们首先看以前的做法,在全局配置文件 mybatis-conf ...
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...
- [css] 如果css文件过大时,如何异步加载它?
[css] 如果css文件过大时,如何异步加载它? 分割成多个CSS文件进行Gzip压缩link preload 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大 ...
- 打开IDE里XXX.rc文件夹的子项,显示“!加载失败”
描述:VS2005,打开IDE里XXX.rc文件夹的子项,显示"!加载失败" 说明:已经关闭了工程的所有文档了,点解决方案下的XXX.rc仍未解决 问题的原因是:资源rc里记录的资 ...
- B站刘二大人-数据集及数据加载 Lecture 8
系列文章: <PyTorch深度学习实践>完结合集-B站刘二大人 Pytorch代码注意的细节,容易敲错的地方 B站刘二大人-线性回归及梯度下降 Lecture3 B站刘二大人-反向传播L ...
- mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)
>>欢迎 点赞,留言,收藏加关注<< 1. 模型构建的步骤: 在构建AI模型时,一般有以下主要步骤:准备数据.数据预处理.划分数据集.配置模型.训练模型.评估优化.模型应用,如 ...
- PyTorch 编写自定义数据集,数据加载器和转换
本文为 pytorch 官方教程https://pytorch.org/tutorials/beginner/data_loading_tutorial.html代码的注释 w3cschool 的翻译 ...
最新文章
- 云计算Python自动化运维开发实战 三、python文件类型
- 如何利用 AI 对抗疫情?
- 【注意】关于Redis存在远程命令执行漏洞的安全公告
- Spring中AOP相关的API及源码解析,原来AOP是这样子的
- firefox BUG --输入法转换时,关闭浏览器. 5555....... 心碎...
- 【译】Tutorials ---- Hello, World
- Kubernetes二进制部署——证书的制作和ETCD的部署
- 00001centos6.3安装
- cake-build -.Net Core 跨平台构建自动化系统。
- java实现map和object互转
- springmvc整合mybatis之准备阶段与文件配置
- JZOJ 3515. 软件公司
- cocos 动画系统
- Java面试题系列(X)优化tomcat配置
- 【bzoj2989】数列 KD-tree+旋转坐标系
- 基于VUE实现的新闻后台管理系统-三
- 启动项目时出现java.io.EOFException异常
- html中背景渐变斜着渐变,CSS3 斜向渐变背景
- 华米 Amazfit 跃我 GTR 4和GTS 4的区别
- 一个数据分析报告的框架,主要包含哪几项?