ArcGIS Engine中的8种数据访问 (转)

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

1.Shapefile数据库

2.Coveragewindows

3.Personal Geodatabase设计模式

4.Enterprise Geodatabase服务器

5.Tinide

6.Rasterui

7.CADgoogle

8.RDBMSspa

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

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

相关文章
相关标签/搜索