ArcGIS Engine中的数据访问

数据是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 访问数据的机制是先打开数据对应的工作空 间,然后用工作空间访问数据。对于不同的数据格式,工作空间的具体情况也是不一样的,下面分别进行阐述。

Shapefile

Shapefile 是文件型的空间数据格式,以文件的形式在磁盘上进行存储空间数据 和属性数据。下面的示例代码是打开位于D:"Data 文件夹下的文件名为CitiesShapefile 要素类。对于Shapefile 来说工作空间就 是它所在的文件夹,打开工作空间需要使用对应的工作空间工厂,即ShapefileWorkspaceFactoryClass ,然后再调用 IWorkspaceFactoryOpenFromFile 方法就可以得到一个工作空间了,这也是设计模式中工厂方法的体现。工作空间工厂的打开方法 返回的是一般意义的工作空间,根据具体数据还需要进行接口转换,因为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 时连接参数需要五个,分别是SERVERINSTANCEUSER PASSWORDVERSIONSERVER 指服务器的主机名,INSTANCE 指服务名或端口号,USER 是数据库的用户名,PASSWORD 数据 库对应用户的密码,VERSIONEnterprise Geodatabase 多版本机制中的某个版本,默认的一个版本是"SDE.DEFAULT" ,如果关系数据库是SQL Server ,那么连接参数还需要Database 参数。下面是打开Enterprise GeodatabaseControlPoint 点要素类的代码,关系数据库为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 文件夹下名称为malTIN

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 中最常用的文件型有GRIDTIFFERDAS 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 的工作空间工厂,以下是打开一个dxfCAD 数据,在打开要素类时使用"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 表,当然也可以访问OralceSQL 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 = new OLEDBWorkspaceFactoryClass() ;

pFeatWorkspace = pWorkspaceFact.Open ( pPropset, 0 ) as IFeatureWorkspace;

ITable pTTable = pFeatWorkspace.OpenTable ( "Custom" ) ;

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值