用到的引用

using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Controls;

主要的类与接口

类/接口 所在类库 描述
IWorkspaceFactory Geodatabase 提供创建工作空间的方法
FileGDBWorkspaceFactoryClass DataSourcesGDB 连接和访问文件地理数据库的核心类
IWorkspace Geodatabase 提供对数据集的访问,打开具体数据需要向下类型转换为特定类型的工作空间。如Featureworkspace、RasterWorkspace等
IEnumDataset Geodatabase 访问数据集的枚举,可以是要素类数据集或栅格数据集或混合的枚举
IDataset Geodatabase 访问数据集,可以是要素类数据集或栅格数据集
IFeatureWorkspace Geodatabase 提供对要素数据集或要素类的访问
IFeatureLayer Carto 提供操作要素图层的方法
FeatureLayerClass Carto 创建要素图层的核心类
IRasterWorkspaceEx Geodatabase 提供对栅格工作空间的访问
IRasterWorkspaceEx Geodatabase 由此类实现由工作空间抽象类转换为栅格工作空间
IRasterLayer Geodatabase 提供操作栅格图层的方法
RasterLayer Geodatabase 创建栅格图层的核心类

步骤

1、打开工作空间

            //文件地理数据库本身数据以文件形式存储,没有像shp那种类型的指定文件,因此以打开文件夹的格式打开FolderBrowserDialog dlg = new FolderBrowserDialog();if (dlg.ShowDialog() == DialogResult.OK){string path = dlg.SelectedPath;  //保存路径IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();IWorkspace pworkspace = pWorkspaceFactory.OpenFromFile(path, 0);

2、遍历工作空间中的数据,将数据加载到显示

private void AddAllDataset(IWorkspace pWorkspace, AxMapControl mapControl){//根据数据类型不同加载数据//数据集枚举IEnumDataset pEnumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTAny);  //加载各种类型的数据//将IEnumDataset读到Dataset当中IDataset pDataset = pEnumDataset.Next();while (pDataset != null){if(pDataset is IFeatureDataset)  //要素数据集{IFeatureWorkspace pFeatureworkspace = (IFeatureWorkspace)pWorkspace;IFeatureDataset pFeatureDataset = pFeatureworkspace.OpenFeatureDataset(pDataset.Name);IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;  //获取要素集合IDataset pDataset1 = pEnumDataset1.Next();while (pDataset1 != null){if (pDataset1 is IFeatureClass)  //要素类{IFeatureLayer pFeatureLayer = new FeatureLayer();pFeatureLayer.FeatureClass = pFeatureworkspace.OpenFeatureClass(pDataset1.Name);pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;if (pFeatureLayer.FeatureClass != null){mapControl.AddLayer(pFeatureLayer);}}pDataset1 = pEnumDataset1.Next();}}else if(pDataset is IFeatureClass)  //要素类{IFeatureWorkspace pFeatureworkspace = pWorkspace as IFeatureWorkspace;IFeatureLayer pFlyr = new FeatureLayer();pFlyr.FeatureClass = pFeatureworkspace.OpenFeatureClass(pDataset.Name);pFlyr.Name = pDataset.Name;if (pFlyr != null){mapControl.AddLayer(pFlyr);}}else if(pDataset is IRasterDataset)  //栅格数据集{IRasterWorkspaceEx pRasterworkspace = pWorkspace as IRasterWorkspaceEx;  //转为栅格空间IRasterDataset pRasterDataset = pRasterworkspace.OpenRasterDataset(pDataset.Name);if (pRasterDataset != null){IRasterLayer pRasterLayer = new RasterLayer();pRasterLayer.CreateFromDataset(pRasterDataset);pRasterLayer.Name = pDataset.Name;mapControl.AddLayer(pRasterLayer);}}pDataset = pEnumDataset.Next();}}

代码示例:

        private void 打开gdbToolStripMenuItem_Click(object sender, EventArgs e){//文件地理数据库本身数据以文件形式存储,没有像shp那种类型的指定文件,因此以打开文件夹的格式打开FolderBrowserDialog dlg = new FolderBrowserDialog();if (dlg.ShowDialog() == DialogResult.OK){string path = dlg.SelectedPath;  //保存路径IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();IWorkspace pworkspace = pWorkspaceFactory.OpenFromFile(path, 0);AddAllDataset(pworkspace, axMapControl1);   }}//将栅格数据加载到显示private void AddAllDataset(IWorkspace pWorkspace, AxMapControl mapControl){//根据数据类型不同加载数据//数据集枚举IEnumDataset pEnumDataset = pWorkspace.get_Datasets(esriDatasetType.esriDTAny);  //加载各种类型的数据//将IEnumDataset读到Dataset当中IDataset pDataset = pEnumDataset.Next();while (pDataset != null){if(pDataset is IFeatureDataset)  //要素数据集{IFeatureWorkspace pFeatureworkspace = (IFeatureWorkspace)pWorkspace;IFeatureDataset pFeatureDataset = pFeatureworkspace.OpenFeatureDataset(pDataset.Name);IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;  //获取要素集合IDataset pDataset1 = pEnumDataset1.Next();while (pDataset1 != null){if (pDataset1 is IFeatureClass)  //要素类{IFeatureLayer pFeatureLayer = new FeatureLayer();pFeatureLayer.FeatureClass = pFeatureworkspace.OpenFeatureClass(pDataset1.Name);pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;if (pFeatureLayer.FeatureClass != null){mapControl.AddLayer(pFeatureLayer);}}pDataset1 = pEnumDataset1.Next();}}else if(pDataset is IFeatureClass)  //要素类{IFeatureWorkspace pFeatureworkspace = pWorkspace as IFeatureWorkspace;IFeatureLayer pFlyr = new FeatureLayer();pFlyr.FeatureClass = pFeatureworkspace.OpenFeatureClass(pDataset.Name);pFlyr.Name = pDataset.Name;if (pFlyr != null){mapControl.AddLayer(pFlyr);}}else if(pDataset is IRasterDataset)  //栅格数据集{IRasterWorkspaceEx pRasterworkspace = pWorkspace as IRasterWorkspaceEx;  //转为栅格空间IRasterDataset pRasterDataset = pRasterworkspace.OpenRasterDataset(pDataset.Name);if (pRasterDataset != null){IRasterLayer pRasterLayer = new RasterLayer();pRasterLayer.CreateFromDataset(pRasterDataset);pRasterLayer.Name = pDataset.Name;mapControl.AddLayer(pRasterLayer);}}pDataset = pEnumDataset.Next();}}

ArcGIS Engine打开文件地理数据库相关推荐

  1. ArcGIS Pro创建文件地理数据库、要素数据集、要素类

    首先,和大家介绍一下什么是地理数据库.地理数据库(Geodatabase)是一种面向对象的空间数据模型,能够对矢量.栅格.不规格格网.网络等空间数据集进行统一的描述和存储,也就是说它是保存各种数据集的 ...

  2. ArcEngine新建文件地理数据库及其要素数据集,要素数据集加载(20190809)

    1.需求 为了完成拓扑分析模块,需要在系统中新增创建文件地理数据库.要素数据集并加载要素数据集中的数据一系列功能. 2.设计思路 很简单,和ArcGIS中新建文件地理数据库.导入数据.加载数据的功能一 ...

  3. GIS开发进阶之路(十四) ArcEngine打开cad文件的五种方法、ArcGIS Engine错误码

    ArcEngine打开cad文件的几种方法 方法一.通过遍历CAD数据集,依次加载中点线面注记等图层,所加载的数据均为一个独立的图层. IWorkspaceFactory pWorkspaceFact ...

  4. 【QGIS入门实战精品教程】3.3:QGIS如何打开ArcGIS创建的文件数据库(GDB)?

    在行业应用中,GIS地理空间数据往往存储在ESRI ArcGIS的文件地理数据库(File GeodataBase),因此,ArcGIS与QGIS的数据交互.共享就显得非常重要.QGIS3可以直接打开 ...

  5. 【arcgis】文件地理数据库,个人地理数据库与ArcSDE的局别

    地理数据库的类型 地理数据库是用于保存数据集集合的"容器".有以下三种类型: 文件地理数据库 - 在文件系统中以文件夹形式存储.每个数据集都以文件形式保存,该文件大小最多可扩展至 ...

  6. Arcgis Engine之打开MXD文档

    Arcgis Engine之打开MXD文档 概述 方法一: 方法二: 概述 图层加载功能将用到MapControl 控件提供的LoadMxFile 方法. 该方法通过指定的*. Mxd文档路径直接获取 ...

  7. GIS开源框架:ArcGIS文件地理数据库(GDB)解析与入库

    对于GIS专业毕业的同学,想必对于ArcGIS软件不会太陌生,对于地理数据库也有一定的了解和使用经验.但是,撇开软件操作层面不谈,作为一个WebGIS/GIS开发人员,我们如何通过GIS开源框架去完成 ...

  8. ArcGis 中打开 shp 文件时 未知的空间参考 警告

    平常我们难免会遇到各种奇奇怪怪的数据,今天博主在这记录一下关于如何给一份未定义坐标参考系的shp文件定义空间参考及投影的过程.话不多说,马上开始~! 1. 首先看一下打开文件时弹出的警告.如下图 当我 ...

  9. ArcGIS Engine环境下VS窗体与Unity虚拟现实地理空间的嵌套和交互

    本文目录 一.前言 1.结果图片 2.相关系统与平台介绍 3.实践思路与基本流程 4.涉及环境与软件 二.前期操作介绍 1.Unity和Winform窗体的连接交互 1.1.Unity和Winform ...

  10. ArcSDE、ArcGis Engine、ArcGis Desktop的授权配置

    ArcSDE.ArcGis Engine.ArcGis Desktop的授权配置 <?xml:namespace prefix = o ns = "urn:schemas-micros ...

最新文章

  1. 使用VC++6.0创建MFC对话框程序
  2. Learn Python 011: while loop
  3. 我的erlang TCP服务器
  4. 计算机初中教师资格教案,初中教师资格证教学设计
  5. Python学习笔记-EXCEL操作
  6. AJAX应用和传统Web应用有什么不同
  7. do filtering will real delete note in DB
  8. php定界符号,PHP定界符的使用及注意事项
  9. vue监听浏览器刷新和关闭;
  10. 解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名
  11. 安卓系统所有可声明的权限
  12. mysql集群系统_轻松构建Mysql高可用集群系统
  13. SAS Planet下载卫星地图
  14. cmd查看mysql的ip地址_怎么在cmd中查看数据库ip地?
  15. layui select 默认选中 vue select 动态选中
  16. php验证码点击刷新,php点击可刷新验证码
  17. linux swap不可用,linux 禁用 swap
  18. 小白成为大数据工程师 需掌握哪些知识技能
  19. 烤仔的朋友们丨政策暖风吹来,国内公链们的春天来了?
  20. js-cookie设置token过期时间

热门文章

  1. You辉编程_用vue3.0开发移动app的流程
  2. linux 系统中没有rpm命令
  3. 【机器学习算法】聚类算法-4 模糊聚类 密度聚类,如何判断超参数:数据群数
  4. 遗传算法的基本原理和matlab实现
  5. 软件自动化测试的学习路线
  6. PWM智能温控风扇的原理
  7. 三星9158p 升级android版本,三星I9158P官方固件rom系统刷机包_原版系统线刷包_可救砖用...
  8. java两级缓存框架J2cache
  9. 《系统集成项目管理工程师》必背81-100题
  10. css div居中对齐