数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提。ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异。本文主要介绍一下以下八种数据格式在ArcGIS Engine中如何访问。对ArcGIS桌面应用有一定了解的读者更适合阅读本文。本文的示例代码是用C#编写。

1.Shapefile

2.Coverage

3.Personal Geodatabase

4.Enterprise Geodatabase

5.Tin

6.Raster

7.CAD

8.RDBMS

在通过ArcGIS访问数据之前,需要首先明确一下什么是"工作空间"。在ArcGIS中工作空间指存放数据的位置,ArcGIS访问数据的机制是先打开数据对应的工作空间,然后用工作空间访问数据。对于不同的数据格式,工作空间的具体情况也是不一样的,下面分别进行阐述。

1.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");

2.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");

3.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")

4.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");

5.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");

6.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");

7.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");

8.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.mdb;Persist Security Info=False");//创建一个新的OleDB工作空间并打开IWorkspaceFactory pWorkspaceFact;IFeatureWorkspace pFeatWorkspace;pWorkspaceFact = newOLEDBWorkspaceFactoryClass();pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;ITable pTTable = pFeatWorkspace.OpenTable("Custom");

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

转帖。来源未知

转:http://blog.chinaunix.net/uid-18899774-id-120895.html

ArcGIS Engine中的8种数据访问 (转)的更多相关文章

  1. ArcGIS Engine中的8种数据访问

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

  2. ArcGIS Engine中的数据访问

    ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...

  3. [转载]ArcGIS Engine 中的多线程使用

    ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写 ...

  4. ArcGIS Engine中加载数据

    ArcGIS Engine中加载数据 http://blog.csdn.net/gisstar/article/details/4206822   分类: AE开发积累2009-05-21 16:49 ...

  5. [转] ArcGIS engine中气泡标注的添加、修改

    小生 原文 ArcGIS engine中气泡标注的添加.修改! 你微微地笑着,不同我说什么话.而我觉得,为了这个,我已等待得久了.                                   ...

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

    ArcGIS Engine中空间参照(地理坐标)相关方法总结 来自:http://blog.csdn.net/u011170962/article/details/38776101 1.创建空间参考 ...

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

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

  8. ArcGIS engine中Display类库——Display

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

  9. ArcGIS Engine中的Symbols详解

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

随机推荐

  1. robotframework接口测试初探3

    接口自动化环境搭建好了 requests接口测试模块也会用了 那么怎样整合到RF的框架呢? 写一个小例子

  2. Java的数组长度无需编译指定,因为它是对象

    大家可以看从Thinking in Java中摘出来的代码理解一下,甚至.多维数组的子数组无须等长 //: MultiDimArray.java// Creating multidimensional ...

  3. 创建html模板

    打开写好的html 复制  在页面上右击------属性  --会出现下面情况

  4. WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传

    CKEDITOR  编辑器   图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...

  5. php-长文章分页函数

    <?php function ff_page($content,$page) { global $expert_id; $PageLength = 2000; //每页字数 $CLength = ...

  6. linux bond配置步骤,七种bond模式说明

    一.网卡绑定: 第一步:创建一个ifcfg-bondX # vi /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BONDING_OPT ...

  7. ubuntu 14.04 下通过apt-get 安装jdk

    Installing default JRE/JDK sudo apt-get update sudo apt-get install default-jre sudo apt-get install ...

  8. java代码

    io的使用 package com.tan.io; import java.io.*; import java.util.*; class Employee{ private String name; ...

  9. ExtJs 学习之开篇(三)Ext.grid.Panel表格中的处理

    Ext.grid.Panel Ext.create('Ext.grid.Panel',{        title:'测试表格',        width:400,        height:20 ...

  10. ASP.NET(转自wiki)

    ASP.NET是由微软在.NET Framework框架中所提供,开发Web应用程序的类库,封装在System.Web.dll文件中,显露出System.Web名字空间,并提供ASP.NET网页处理. ...