zoukankan      html  css  js  c++  java
  • ArcGIS Engine中的8种数据访问

    数据是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 = new OLEDBWorkspaceFactoryClass();pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;ITable pTTable = pFeatWorkspace.OpenTable("Custom");

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

  • 相关阅读:
    左偏树
    论在Windows下远程连接Ubuntu
    ZOJ 3711 Give Me Your Hand
    SGU 495. Kids and Prizes
    POJ 2151 Check the difficulty of problems
    CodeForces 148D. Bag of mice
    HDU 3631 Shortest Path
    HDU 1869 六度分离
    HDU 2544 最短路
    HDU 3584 Cube
  • 原文地址:https://www.cnblogs.com/tiandi/p/3259886.html
Copyright © 2011-2022 走看看