(转)ArcEngine读取数据(数据访问)

读取和访问数据是进行任何复杂的空间分析及空间可视化表达的前提,ArcGIS支持的数据格式比较丰富,下面就这些格式Shapefile、Coverage、Personal
Geodatabase、Enterprise Geodatabase、Tin、Raster
、CAD、RDBMS等类型。

一 Shapefile

Shapefile是ESRI提供的一种无拓扑信息的矢量数据格式,一个 Shape
file由一组文件组成,其中必要的基本文件包括坐标文件(主文件)(*.shp )、索引文件(*.shx )和属性文件(*.dbf
)三个文件。主文件每个记录描述构成一个地理特征(Feature)的所有vertices坐标值;索引文件(.shx)主要包含坐标文件的索引信息;属性文件包含SHP文件中每一Feature的特征属性;

方法1:

//打开工作空间需要使用对应的工作空间工厂,即ShapefielWorkspaceFactoryClass

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass()
;

//打工作空间工厂的打开方法返回的是一般意义的工作空间,根据具体数据还需要进行接口转换

IWorkspace pWorkSpace= pWorkspaceFactory.OpenFromFile(@"D:\Data" , 0) ;

IFeatureWorkspace pFeatWorkSpace = pWorkSpaceas IFeatureWorkspace

//打开一个要素类

IFeatureClass pFeatureClass = pFeatWorkSpace.OpenFeatureClass("Cities") ;

方法2:

string [email protected]"D:\Data\Cities.shp";

IWorkspaceName pWorkspaceName = new WorkspaceNameClass();

pWorkspaceName.WorkspaceFactoryProgIDle="esriDataSourcesFile.ShapefileWorkspaceFactory";

pWorkspaceNamePathName =
System.IO.Path.GetDirectoryName(strShpFile);

IName pName = (IName)pWorkspaceNamePathName;

IWorkspace pWorkspace =(IWorkspace)pName.Open();

IFeatureWorkspace pFeatureWorkspace = pWorkspace as
IFeatureWorkspace;

IFeatureClass pFeatureClass =
pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(strShpFile));

二 Coverage

Coverage是ArcInfo
workstation的原生数据格式。该格式是基于文件夹存储的,Coverage文件夹可能存储lab.adf、arc.adf、sec.adf、pal.adf、cnt.adf、tic.adf、lnk.adf、bnd.adf等坐标文件,arx.adf、pax.adf等索引文件和pat.adf、aat.adf等属性文件。(.Lab)
表示标识点坐标数据文件 (.Prj) 表示投影信息文件 (.Tol) 表示记录坐标距离容限和悬挂长度的值的文件 (.Arx) 表示弧段索引文件 (.Cnx)
表示多边形中心点索引文件 (.Pax)表示标识点索引文件 (.arf)表示弧坐标和拓扑关系表 (.cnt)表示多边形中心表
(.log)表示工作空间的日志文件(.msk)表示记录修改过的geometry的信息,重建拓扑时用到。(.pal)表示多边形图形文件
(.pat)表示多边形属性文件 (.arc)表示弧线图形文件 (.aat)表示弧线属性文件 (.bnd)表示边框文件
(.tic)表示控制点文件。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 要素类的代码。

方法1:

IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass() ;

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

IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;

IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("Water")

方法2:

string strMdbFile = @"D:\ArcTutor\Monto.mdb";

IWorkspaceName pWorkspaceName = new WorkspaceNameClass();

pWorkspaceName.WorkspaceFactoryProgIDle="esriDataSourcesFile.AccessWorkspaceFactory";

pWorkspaceNamePathName = strMdbFile;

IName pName = (IName)pWorkspaceNamePathName;

IWorkspace pWorkspace =(IWorkspace)pName.Open();

IFeatureWorkspace pFeatureWorkspace = pWorkspace as
IFeatureWorkspace;

IFeatureClass pFeatureClass =
pFeatureWorkspace.OpenFeatureClass("Water");

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

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

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

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

八 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
分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。

时间: 2024-10-02 22:42:42

(转)ArcEngine读取数据(数据访问)的相关文章

ArcEngine读取数据(数据访问) (转)

读取和访问数据是进行任何复杂的空间分析及空间可视化表达的前提,ArcGIS支持的数据格式比较丰富,下面就这些格式Shapefile.Coverage.Personal Geodatabase.Enterprise Geodatabase.Tin.Raster .CAD.RDBMS等类型. 一 Shapefile Shapefile是ESRI提供的一种无拓扑信息的矢量数据格式,一个 Shape file由一组文件组成,其中必要的基本文件包括坐标文件(主文件)(*.shp ).索引文件(*.shx 

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据

这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序读取相关数据 原文:Reading Related Data with the Entity Framework in an ASP.NET MVC Application 译文版权所有,谢绝全文转载--但您可以在您的网站上添加到该教程的链接. 在之前的教程中您已经完成了学校数据模型.在本教程中你将

猜想-未做 利用office组件读取excel数据

---未实际使用过 用SQL-Server访问Office的Access和Excel http://blog.sina.com.cn/s/blog_964237ea0101532x.html 2007 Office system 驱动程序:数据连接组件 http://www.microsoft.com/zh-CN/download/details.aspx?id=23734 2007 Office system 驱动程序:数据连接组件 详情 版本:All File Name:AccessData

mysql 读取硬盘数据

innodb 的最小管理单位是页 innodb的最小申请单位是区,一个区 1M,内含64个页,每个页16K ,即 64*16K=1M, 考虑到硬盘局部性,每次读取4个区,即读4M的数据加载至内存 线性预读: innodb的读线程从disk读取4M数据后,如果这4个区中被连接访问的页的数据大于或等于innodb_read_ahead_threshold (默认为56)时,就会提前把后面4个区的数据 load 至内存 注意: InnoDb存储引擎这本书中说至少向硬盘申请4个区的数据, 但大多数文章说

Oracle字符乱码、数据越界访问典型Bug分析

前言: 作为乙方,在甲方客户那里验收阶段发现两个诡异Bug.以下就问题来源.问题根因.解决方案.如何避免做详细描述. 一.Bug1:Oracle读写字符乱码. 1.问题来源 Oracle数据库监听http://blog.csdn.net/laoyang360/article/details/46524519 需要获取最新插入的中文类别字符,以判定分类.单步调试发现每次接收到的都是乱码. 2.问题根因 编码格式不一致导致. 3.解决方案 第一步:查看oracle自身的编码格式,可以通过命令sele

Android 读取网络数据

通过HttpResponse  实现 首先在AndroidManifest中配置允许网络访问    <uses-permissionandroid:name="android.permission.INTERNET"/> 然后实现代码 示例代码如下 String url = "http://www.baidu.com"; HttpGet request = new HttpGet(url); try { HttpResponseresponse = ne

python3随笔-opencv读取图像数据

如何安装opencv-python $pip3 install opencv-python 如何读取图像数据 import numpy as np import cv2 as cv img = cv.imread('1.png') print(img) print(img.dtype) [[[200 228 197][200 228 197][200 228 197]......[200 228 197][200 228 197][200 228 197]]] dtype('uint8') 使用

读取数据库数据,并将数据整合成3D饼图在jsp中显示

首先我将生成饼图的方法独立写成一个PieChar.java类,详细代码如下:(数据库需要自己建,如有需要的话) 1 import java.io.IOException; 2 import java.sql.SQLException; 3 import org.jfree.chart.ChartFactory; 4 import org.jfree.chart.JFreeChart; 5 import org.jfree.data.general.DefaultPieDataset; 6 7 p

asp.net读取Excel数据

先通过控件FileUpload获取excel文件路径 protected void btnReadExcelFromFileUpload_Click(object sender, EventArgs e) { if (fupExcel.PostedFile.ContentLength > 0) { //获取全路径 string fullFileName = fupExcel.PostedFile.FileName.ToString(); //获取文件名 string fileName = fup