(转)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 strShpFile=@"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 分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。
(转)ArcEngine读取数据(数据访问)的更多相关文章
- ArcEngine读取数据(数据访问) (转)
读取和访问数据是进行任何复杂的空间分析及空间可视化表达的前提,ArcGIS支持的数据格式比较丰富,下面就这些格式Shapefile.Coverage.Personal Geodatabase.Ente ...
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第七篇:为ASP.NET MVC应用程序 ...
- Contoso 大学 - 5 – 读取关联数据
原文 Contoso 大学 - 5 – 读取关联数据 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's ...
- mysql 读取硬盘数据
innodb 的最小管理单位是页 innodb的最小申请单位是区,一个区 1M,内含64个页,每个页16K ,即 64*16K=1M, 考虑到硬盘局部性,每次读取4个区,即读4M的数据加载至内存 线性 ...
- SQLite数据库如何存储和读取二进制数据
SQLite数据库如何存储和读取二进制数据 1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, co ...
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...
- 为ASP.NET MVC应用程序读取相关数据
为ASP.NET MVC应用程序读取相关数据 2014-05-08 18:24 by Bce, 299 阅读, 0 评论, 收藏, 编辑 这是微软官方教程Getting Started with En ...
- Windows下Python读取GRIB数据
之前写了一篇<基于Python的GRIB数据可视化>的文章,好多博友在评论里问我Windows系统下如何读取GRIB数据,在这里我做一下说明. 一.在Windows下Python为什么无法 ...
随机推荐
- Mineweep(扫雷)
题目描述: 每周一题之2 Mineweep(扫雷) Minesweeper (扫雷) PC/UVa IDs: 110102/10189, Popularity: A, Success rate: h ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型转换
1. C# 不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换: 2. 然而,将对象转换为它的某个派生类型时,C#要求开发人员只能进行显示转换,因为这样 ...
- html一些常用的符号
< : < > : > & : & " : " @ : © ® : ...
- tomcat故障——数据库未授权
- zookeeper崩溃修复
cat /etc/zookeeper/conf/zoo.cfg 找到dataDir=/var/lib/zookeeper 切换到路径/var/lib/zookeeper cd /var/lib/zoo ...
- c语言中有关0和1的运算问题
/*有关0和1 的总结 最近做题总是混淆0 和 1 对于/ 和 %运算时候的结果怎么算 所以就上机试验了一番 结论: c语言中,0/任何数都为0 0%任何数都为0 1/任何数都为0 1%任何数都余1 ...
- Spring注入的反射解释
对于如下配置片段: <bean id="id" class="lee.Aclass"> <!--property配置需要依赖注入的属性-- ...
- c++ for_each( )学习
for_each()事实上是個 function template,其实质如下 [effective STL item 41] template<typename InputIterator, ...
- C# 进一取整
C#: // "/"号现在整形运算是取整,浮点运算时为除法运算 Console.WriteLine("(56/10):{0}", 56 / 10);//5 Co ...
- Linux cp命令拷贝 不覆盖原有的文件
cp 参数说明: -i或--interactive 覆盖既有文件之前先询问用户. -r 递归处理,将指定目录下的文件与子目录一并处理. -R或--recursive 递归处理,将指定目录下的所有 ...