原文地址没找到。。。

据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提。ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异。本文主要介绍一下以下八种数据格式在ArcGIS Engine中如何访问。对ArcGIS桌面应用有一定了解的读者更适合阅读本文。本文的示例代码是用C#编写。
•        Shapefile
•        Coverage
•        Personal Geodatabase
•        Enterprise Geodatabase
•        Tin
•        Raster
•        CAD
•        RDBMS
在通过ArcGIS访问数据之前,需要首先明确一下什么是"工作空间"。在ArcGIS中工作空间指存放数据的位置,ArcGIS访问数据的机制是先打开数据对应的工作空间,然后用工作空间访问数据。对于不同的数据格式,工作空间的具体情况也是不一样的,下面分别进行阐述。

Shapefile

Shapefile是文件型的空间数据格式,以文件的形式在磁盘上进行存储空间数据和属性数据。下面的示例代码是打开位于D:\Data文件夹下的文件名为Cities的Shapefile要素类。对于Shapefile来说工作空间就是它所在的文件夹,打开工作空间需要使用对应的工作空间工厂,即ShapefileWorkspaceFactoryClass,然后再调用IWorkspaceFactory的OpenFromFile方法就可以得到一个工作空间了,这也是设计模式中工厂方法的体现。工作空间工厂的打开方法返回的是一般意义的工作空间,根据具体数据还需要进行接口转换,因为Shapefile是矢量数据,所以把工作空间接口跳转到IFeatureWorkspace,从而读取其中的要素类,这一点对于接下来的几个数据格式也是同样的打开方式。
IWorkspaceFactory pWorkspaceFactory;
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFeatWS;
pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:\Data\", 0) as IFeatureWorkspace;
//打开一个要素类
IFeatureClass pFeatureClass = pFeatWS.OpenFeatureClass("Cities");

Coverage

Coverage是ArcInfo workstation的原生数据格式。该格式是基于文件夹存储的,是因为在windows资源管理器下,它的空间信息和属性信息是分别存放在两个文件夹里。coverage是一个非常成功的早期地理数据模型,二十多年来深受用户欢迎,很多早期的数据都是coverage格式的。ESRI不公开coverage的数据格式,但是提供了coverage格式转换的一个交换文件(interchange file,即E00),并公开数据格式。但是ESRI为推广其第三代数据模型geodatabase,从ArcGIS 8.3版本开始,屏蔽了对coverage的编辑功能。如果需要使用coverage格式的数据,可以安装ArcInfo workstation,或者将coverage数据转换为其他可编辑的数据格式。Coverage是一个集合,它可以包含一个或多个要素类。 Coverage数据的工作空间也是它所在的文件夹;由于Coverage可以包含多个要素类,得到工作空间后在打开具体的要素类时可以用"Coverage名称:要素类名称",例如下面代码中的"basin:polygon"。
IWorkspaceFactory pFactory = new ArcInfoWorkspaceFactoryClass();
IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\TopologyData", 0);
IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("basin:polygon");

Personal Geodatabase

Geodatabase作为ArcGIS的原生数据格式,体现了很多第三代地理数据模型的优势。Personal Geodatabase基于Microsoft Access一体化存储空间数据和属性数据。Enterprise Geodatabase通过大型关系数据库+ArcSDE实现,ArcSDE作为中间件把关系数据库中的普通表转化为空间对象。Personal Geodatabase数据的工作空间指的是扩展名为mdb的文件。以下是打开位于Monto.mdb中的Water要素类的代码。
IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass();
IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\Monto.mdb", 0);
IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("Water")

Enterprise Geodatabase

ArcSDE(Enterprise Geodatabase)对应的工作空间为数据库连接,关系数据库是Oracle时连接参数需要五个,分别是SERVER、INSTANCE、USER、PASSWORD、VERSION。SERVER指服务器的主机名,INSTANCE指服务名或端口号,USER是数据库的用户名,PASSWORD数据库对应用户的密码,VERSION指Enterprise Geodatabase多版本机制中的某个版本,默认的一个版本是"SDE.DEFAULT",如果关系数据库是SQL Server,那么连接参数还需要Database参数。下面是打开Enterprise Geodatabase中ControlPoint点要素类的代码,关系数据库为Oracle9i。
IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactoryClass();
IPropertySet propSet = new PropertySetClass();
propSet.SetProperty("SERVER", "actc");propSet.SetProperty("INSTANCE", "5151");
propSet.SetProperty("USER", "apdm");
propSet.SetProperty("PASSWORD", "apdm");
propSet.SetProperty("VERSION", "SDE.DEFAULT");
IWorkspace pWorkspace = pWorkspaceFactory.Open(propSet, 0);
IFeatureWorkspace pFeatWS = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass= pFeatWS.OpenFeatureClass("ControlPoint");

TIN

TIN全称不规则三角网,也叫不规则三角表面,采用一系列不规则的三角点来建立表面。例如,每一个采样点有一对x,y坐标和一个表面值(z值),这些点被一组互不重叠的三角形的边所连接,从而构成一个表面。TIN数据是空间分析和三维分析重要的数据格式,以文件的形式在磁盘上存储。TIN的工作空间是所在的文件夹,下面代码是打开D:\ArcTutor\3DAnalyst文件夹下名称为mal的TIN。
IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass();
IWorkspace pWS = pWSFact.OpenFromFile(@"D:\ArcTutor\3DAnalyst\", 0);
ITinWorkspace pTinWS = pWS as ITinWorkspace;
ITin pTin = pTinWS.OpenTin("mal");

Raster

栅格数据也是GIS数据中很重要的一部分,ArcGIS中最常用的文件型有GRID、TIFF、ERDAS IMAGE等,这几种栅格数据的工作空间也是所在的文件夹。打开栅格数据时需要使用栅格工作空间工厂(RasterWorkspaceFactory),然后再使用IRasterWorkspace接口的打开栅格数据集方法即可打开一个栅格数据集。在打开栅格数据集时,如果数据格式为是ESRI GRID,那么OpenRasterDataset()方法的参数为栅格要素集的名称,如果数据格式为TIFF格式,那么该方法的参数为完整的文件名,即要加上.tif扩展名,例如OpenRasterDataset("hillshade.tif")。下面代码为打开GRID格式的栅格数据。
IWorkspaceFactory rasterWorkspaceFactory = new RasterWorkspaceFactoryClass();
IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(@"D:\data\grid", 0) as IRasterWorkspace;
IRasterDataset rasterDataset= rasterWorkspace.OpenRasterDataset("ca_hillshade")

CAD

CAD数据也可以通过AO直接访问,访问CAD数据的方式与Coverage类似,但是注意要使用CAD的工作空间工厂,以下是打开一个dxf的CAD数据,在打开要素类时使用"cad文件名:要素类名称",注意cad文件名要包含扩展名,否则会报错。以下代码是打开位于D:\ArcTutor\Editor\ExerciseData\EditingFeatures文件夹下的buildings.dxf中的多边形要素类。
IWorkspaceFactory pCadwf = new CadWorkspaceFactoryClass();
IWorkspace pWS = pCadwf.OpenFromFile(@"D:\ArcTutor\Editor\ExerciseData\EditingFeatures", 0);
IFeatureWorkspace pCadFWS = pWS as IFeatureWorkspace;
IFeatureClass pFeatClass = pCadFWS.OpenFeatureClass("buildings.dxf:polygon");

RDBMS
一般关系表中的数据也可以通过ArcGIS直接读取,这为数据的共享提供了极大的便利,对于一些业务上的非空间数据,通过使用OLE方式可以很方便的实现数据访问,业务数据可以位于各种关系数据库中,以下代码是访问位于Microsoft Access中的Custom表,当然也可以访问Oralce或SQL Server中的数据,只要变化以下连接字符串(CONNECTSTRING)就可以了。
//创建一个连接
IPropertySet pPropset;pPropset = new PropertySetClass();
pPropset.SetProperty("CONNECTSTRING",@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Company.mdbl\ersist Security Info=False");
//创建一个新的OleDB工作空间并打开
IWorkspaceFactory pWorkspaceFact;
IFeatureWorkspace pFeatWorkspace;
pWorkspaceFact = new OLEDBWorkspaceFactoryClass();
pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;
ITable pTTable = pFeatWorkspace.OpenTable("Custom");

以上为ArcGIS最常用的几种数据的访问方法,访问数据进行GIS分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。

转载于:https://www.cnblogs.com/myssh/archive/2010/08/13/1798957.html

ArcGIS Engine中的8种数据访问【转】相关推荐

  1. ArcGIS Engine中的Symbols详解

    转自原文 ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式 ...

  2. ArcGIS Engine中空间参照(地理坐标)相关方法总结

    转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...

  3. ArcGIS Engine 中的多线程使用

    转自原文ArcGIS Engine 中的多线程使用 一直都想写写AE中多线程的使用,但一直苦于没有时间,终于在中秋假期闲了下来.呵呵,闲话不说了,进入正题! 大家都了解到ArcGIS中处理大数据量时速 ...

  4. 【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题

    ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题,具体如下. 发现在引用列表中找不到ESRI.ArcGIS.AxControls服务. 一直显示感叹号. 多次尝 ...

  5. ArcGIS Engine中删除要素的几种方法总结

    转自原文 ArcGIS Engine中删除要素的几种方法总结 [csharp] view plain copy print? /// <summary> /// 通过IFeature.De ...

  6. ArcGIS Engine中如何获取Map中已经选择的要素呢(转)

    ArcGIS Engine中如何获取Map中已经选择的要素呢   1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的Fe ...

  7. ArcGIS engine中Display类库 (局部刷新)

    转自原文 ArcGIS engine中Display类库 (局部刷新) Display类库包括了用于显示GIS数据的对象.除了负责实际输出图像的主要显示对象(display object)外,这个类库 ...

  8. Arcgis Engine中检索 COM 类工厂中 CLSID 为{*} 的组件失败,原因是出现以下错误: 80040111 的解决方法

    最近在学习Arcgis Engine开发时,创建实例时经常会出现下列错误 网上搜索到的解决办法有两种: 1.操作系统版本问题 如果是在Win7 64版本下,可能出现该问题,需要将把配置管理器里的运行平 ...

  9. arcgis engine中的“System.Runtime.InteropServices.COMException”类型的第一次机会异常在...发生

    1.介绍 在我们利用arcgis engine编写程序时,或多或少会利用GP工具,会感受到GP工具带来的方便,但是GP工具好像有的时候并不是那么听话.比如最近小白我在写arcgis engine时调用 ...

最新文章

  1. telegram 内联模式 介绍
  2. iptables详细说明
  3. Java功底之Reference
  4. CodeForces - 1323C Unusual Competitions(贪心)
  5. 阅文推“单本可选新合同”:授权分级、免费或付费自选
  6. Xcode:PhoneGap 2.5.0项目创建方法
  7. 海洋cms v6.53 v6.54版本漏洞复现
  8. 2019年中国大学生计算机设计大赛--心得总结
  9. mysql批量插入大量数据
  10. 王者荣耀英雄测试用例
  11. java 中文转拼音_JAVA 将中文转化为拼音工具类
  12. html 的页眉页脚,html – 带滚动条的页眉,页脚和内容的CSS布局
  13. 高德地图大头针功能_【iOS】高德地图MAMapKit的使用:地图显示、添加大头针、导航、定位功能介绍...
  14. 面试中C语言常问问题(含答案)
  15. 工作中遇到问题以及解决方法
  16. 【CF718E】Matvey's Birthday BFS+动态规划
  17. 802.11ax简要笔记
  18. 简述对css盒子模型的理解_css 盒子模型理解
  19. sklearn OneHot编码
  20. 关于2022考研报名,这些你需要知道

热门文章

  1. 学python工资高吗-现在Python就业薪资高吗?
  2. python朋友圈为什么这么火-用Python发一个高逼格的朋友圈「附代码」
  3. python中requests库的用途-Python.Requests库的基本使用
  4. python哪个版本好-python应该学习哪个版本
  5. python中文编辑器推荐-推荐10款最好的Python开发编辑器
  6. python的应用领域-Python的应用领域
  7. python开发软件行么-python适合开发桌面软件吗?
  8. python输入语句-Python中的模块导入和读取键盘输入的方法
  9. matlab溢出的标志inf,关于C#:溢出与信息
  10. 题目1033:继续xxx定律