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分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。

AE的8种数据访问方式相关推荐

  1. php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)

    PHP面向对象之3种数据访问方式详解(代码实例) 本文目标 掌握PHP中数据访问的3种方式的定义和作用 1.public 2.protected 3.private (一).数据访问的3种方式 1.P ...

  2. ArcGIS Engine中的8种数据访问【转】

    原文地址没找到... 据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种 ...

  3. php 访问 sharepoint列表,SharePoint—用REST方式访问列表

    REST的定义与作用 在SharePoint 2010中,基本上有如下几种数据访问方式: 服务器端对象模型 LINQ to SharePoint Web Service 客户端对象模型 ADO.NET ...

  4. web 前后台数据交互的方式

    做web开发,很重要的一个环节就是前后台的数据的交互,数据从页面提交到contoller层,数据从controler层传送到jsp页面来显示.这2个过程中数据具体是如何来传送的,是本节讲解的内容. 首 ...

  5. c\c++ 笔试面试大汇总

    <div id="post_detail"> C/C++ 笔试.面试题目大汇总 <div class="postText"><di ...

  6. C,C++面试题之2

    华为面试题及答案 1.局部变量能否和全局变量重名 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量, ...

  7. ADO与ADO.NET的区别与介绍

    1. ADO与ADO.NET简介 ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用.高速度.低内存支出和占用磁盘空间较少,支持用于建立 ...

  8. 对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式

    作者:卢彦 .NET PetShop和Duwamish简单介绍 相信大家一定听说过有名的"宠物店大战",没错,本文的主角之一就是获胜方.NET PetShop,微软号称以27倍的速 ...

  9. Caffe源码中blob文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/blob.hpp文件的内容 ...

最新文章

  1. SQL Server 数据库清除日志的方法
  2. python 管道 非阻塞_python – 非阻塞Scrapy管道到数据库
  3. SQL Server 数据库崩溃后的恢复之法
  4. 简单工厂模式--加减乘除运算
  5. java发送gmail_如何在Gmail中轻松通过电子邮件发送人群
  6. Istio 1.7——进击的追风少年
  7. Centos 6.x
  8. 前端学习(2261)总结
  9. href中使用javascript:void(0)无法执行操作
  10. struts2:数据标签
  11. 标定_基于全景基础设施的多摄像机和3D激光雷达校准
  12. 前端三剑客---HTML
  13. 内大计算机学院在哪个校区,2021年福建船政交通职业学院有几个校区,大一新生在哪个校区...
  14. React使用高德地图
  15. java面向对象(封装、重载、构造、继承)
  16. 虚拟串口工具VSPD简单使用
  17. 简单有趣的互动小游戏介绍:好玩的密室脱逃H5互动小游戏
  18. 二.linux应用网络编程之文件属性
  19. cisco 2821 路由器的端口映射
  20. java 对图片解码_java对图片的转码和解码 实用

热门文章

  1. Javascript中不等于的代码是什么
  2. 关于 Word2Vec 使用时遇到的一系列问题。
  3. 启动kafka出现找不到或无法加载主类
  4. 《Redis开发与运维》---- 集合Set
  5. 计算机仿真在线投稿,计算机仿真期刊投稿_计算机仿真投稿格式要求
  6. 王阳明心学的基础概念和核心思想
  7. R语言下的frontcon函数,由mean-variance画有效前沿。
  8. Python运行环境搭建
  9. [转帖]你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下)
  10. 电子书阅读器,在线电子书阅读系统,小说阅读器计算机毕业设计