`
devgis
  • 浏览: 134392 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ArcGIS Engine中的数据访问

 
阅读更多

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

1.Shapefile

2.Coverage

3.Personal Geodatabase

4.EnterpriseGeodatabase

5.Tin

6.Raster

7.CAD

8.RDBMS

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

Shapefile

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

IWorkspaceFactory pWorkspaceFactory;

pWorkspaceFactory =newShapefileWorkspaceFactoryClass();

IFeatureWorkspace pFeatWS;

pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:"Data"",0)asIFeatureWorkspace;

//打开一个要素类

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 =newArcInfoWorkspaceFactoryClass();

IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:"ArcTutor"TopologyData",0);

IFeatureWorkspace pFeatWorkspace = pWorkspaceasIFeatureWorkspace;

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 =newAccessWorkspaceFactoryClass();

IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:"ArcTutor"Monto.mdb",0);

IFeatureWorkspace pFeatWorkspace = pWorkspaceasIFeatureWorkspace;

IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("Water")

EnterpriseGeodatabase

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 =newSdeWorkspaceFactoryClass();

IPropertySet propSet =newPropertySetClass();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 = pWorkspaceasIFeatureWorkspace;

IFeatureClass pFeatureClass= pFeatWS.OpenFeatureClass("ControlPoint");

TIN

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

IWorkspaceFactory pWSFact =newTinWorkspaceFactoryClass();

IWorkspace pWS = pWSFact.OpenFromFile(@"D:"ArcTutor"3DAnalyst"",0);

ITinWorkspace pTinWS = pWSasITinWorkspace;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 =newRasterWorkspaceFactoryClass();

IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(@"D:"data"grid",0)asIRasterWorkspace;

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 =newCadWorkspaceFactoryClass();

IWorkspace pWS = pCadwf.OpenFromFile(@"D:"ArcTutor"Editor"ExerciseData"EditingFeatures",0);

IFeatureWorkspace pCadFWS = pWSasIFeatureWorkspace;

IFeatureClass pFeatClass = pCadFWS.OpenFeatureClass("buildings.dxf:polygon");

RDBMS

一般关系表中的数据也可以通过ArcGIS直接读取,这为数据的共享提供了极大的便利,对于一些业务上的非空间数据,通过使用OLE方式可以很方便的实现数据访问,业务数据可以位于各种关系数据库中,以下代码是访问位于Microsoft Access中的Custom表,当然也可以访问Oralce或SQL Server中的数据,只要变化以下连接字符串(CONNECTSTRING)就可以了。

//创建一个连接

IPropertySet pPropset;pPropset =newPropertySetClass();

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)asIFeatureWorkspace;

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

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

分享到:
评论

相关推荐

    ArcGIS Engine中的数据操作

    ArcGIS Engine中的各种数据访问.txt ArcEngine数据删除几种方法和性能比较.txt ArcGISEngine投影转换与坐标转换研究.txt 均为说明和C#源码

    ArcGIS_Engine中的8种数据访问

    ArcGIS_Engine中的8种数据访问

    ArcGIS_Engine中数据访问

    ArcGIS_Engine中数据访问

    ArcEngine中数据访问

    绍一下以下八种数据格式在ArcGIS Engine中如何访问。对ArcGIS桌面应用有一定了解的读者更适合阅读本文。本文的示例代码是用C#编写。 1. Shapefile 2. Coverage 3. Personal Geodatabase 4. Enterprise ...

    ArcGIS Engine栅格数据使用总结

    ArcGIS Engine栅格数据使用总结 ArcOjects 3D开发方法简介 作者:佚名 文章来源:GIS论坛 点击数:861 更新时间:2009-8-6 一、ArcOjects 3D开发方法简介 众所周知,在ArcGIS 3D分析扩展模块中提供了丰富的三维...

    ArcEngine最全的实验代码(GIS程序设计教程所有源码)

    从地图显示浏览入手,介绍了GIS数据的组织与访问、制图渲染与输出、空间数据编辑、GIS分析及栅格图像处理,涵盖了GIS数据采集、编辑、处理、分析、输出等的基本功能;进一步地,分析了ArcGIS所提供的功能扩展模块,...

    Arc Engine最全的实验代码(GIS程序设计教程所有源码)

    《GIS程序设计教程》主要介绍了组件式GIS开发技术,重点是...从地图显示浏览入手,介绍了GIS数据的组织与访问、制图渲染与输出、空间数据编辑、GIS分析及栅格图像处理,涵盖了GIS数据采集、编辑、处理、分析、输出等的

    ArcGis图形数据格式及连接方法

    主要介绍Shapefile、Coverage、Personal Geodatabase、Enterprise Geodatabase、Tin、Raster、CAD、RDBMS 八种数据格式在ArcGIS Engine中如何访问

    ArcEngineSample.zip

    GIS程序设计教程所有源码,《GIS程序设计教程》主要介绍了...从地图显示浏览入手,介绍了GIS数据的组织与访问、制图渲染与输出、空间数据编辑、GIS分析及栅格图像处理,涵盖了GIS数据采集、编辑、处理、分析、输出等

    ArcGIS Maps SDK for Unreal Engine v1.1.0

    ArcGIS Maps SDK for Unreal Engine:是一个虚幻引擎插件,可让您从ArcGIS访问真实世界的地图和3D内容。它提供模式面板 UI、组件、C++ API 和蓝图,以使用地理空间数据创建交互式、逼真的 3D 和 XR 体验。将提供的...

    基于ArcGIS Engine的高速公路隧道监测信息系统 (2008年)

    分析了目前高速公路隧道监测信息管理主要以传统 MIS管理系统为主,大量隧道空间信息无法有效保存,带有空间属性的数据分析能力不足的现状,针对隧道监测数据的特点,提出采用地理信息系统技术设计基于 ArcGIS Engine的...

    ArcEngine连接SDE总结.docx

    数据库、ArcCatalog空间数据源正常访问,数据库设置没问题时,ArcEngine连接SDE时报"ORA-12560: TNS: 协议适配器错误"的解决办法;ArcEngine连接SDE总结;ArcSDE:C#打开SDE数据库的几种方式总结

    ArcSDE 相关命令

    ArcSDE是美国ESRI公司(环境研究所)开发的空间数据引擎,它以数据库为后台存储中心,为前端GIS应用提供快速的空间数据访问。它允许用户在RDBMS中管理地理信息,并使所有的ArcGIS应用程序都能够使用这些数据;允许...

    2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班

    介绍ArcGIS9.2与Google Earth中Google maps所提供的地理数据应用程序接口(API);重点介绍GOOGLE.EARTH与其它遥感软件互操作与数据下载的使用方法及GOOGLE.EARTH遥感图像数据共享。 主讲人:GIS硕士、南京路川公司...

    5.4空间数据库管理系统.pdf

    ArcGIS的ArcSDE 对象关系数据库管理 5.4.3 对象关系数据库管理基本思想 1 对传统的关系数据库进行扩展,使之能够直接存储 和管理非结构化的空间数据 空间扩展完全包含在DBMS中 —§ˇ ¶+˛ ygd3076¿… ˚`ˇ» ¢...

    SDE三级索引设置程序

    用于连接ArcSDE的C#程序,便于在程序中实现对存储在空间数据库里的数据的访问.

    vc代码合集

    2012-06-11 10:31 2,314,224 ArcGIS Engine开发从入门到精通源码.rar 2012-06-11 10:32 2,177,024 AS3游戏引擎框架大全(ZF).doc 2012-06-11 10:15 99,780 C++“超级玛丽”游戏的源代码.rar 2012-06-11 10:03 27,136 ...

Global site tag (gtag.js) - Google Analytics