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的特征属性;
// 打开工作空间需要使用对应的工作空间工厂,即ShapefielWorkspaceFactoryClass
IWorkspaceFactory
pWorkspaceFactory = new ShapefileWorkspaceFactoryClass() ;
// 打工作空间工厂的打开方法返回的是一般意义的工作空间,根据具体数据还需要进行接口转换
IWorkspace pWorkSpace= pWorkspaceFactory.OpenFromFile ( @"D:"Data"" , 0 ) ;
IFeatureWorkspace
pFeatWorkSpace = pWorkSpace as IFeatureWorkspace
// 打开一个要素类
IFeatureClass pFeatureClass =
pFeatWorkSpace.OpenFeatureClass ( "Cities" ) ;
二 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 要素类的代码。
IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass() ;
IWorkspace pWorkspace =
pFactory.OpenFromFile ( @"D:"ArcTutor"Monto.mdb" , 0 ) ;
IFeatureWorkspace
pFeatWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass =
pFeatWorkspace.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 ) 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 = 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 分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。
链接:http://hi.baidu.com/wl05031/blog/item/143efb1fd2d400f9e1fe0bbe.html
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为什么无法 ...
随机推荐
- iscsi 怎么搞
I recently reinstalled the software on my NAS (open media vault) and tidied up the host name etc. As ...
- Oracle补习班第三天
In every triumph, there's a lot of try. 每个胜利背后都有许多尝试 Oracle管理实例组件 主要组件分为两部分例程,与数据库: 例程分为两部分SGA跟进程: S ...
- java @ResponseBody返回值中去掉NULL字段
需要同时添加两个位置: 1.annotation-driven过滤 <mvc:annotation-driven> <mvc:message-converters register- ...
- PHP语法基础
1.PHP语法基础 PHP标记符 <?php ?> 常亮与变量 $a = 10; 变量 可以在运行过程中修改 $a = 10; $a = 20; $b = 5; echo $a+$b; c ...
- 实用的Portraiture滤镜磨皮教程
滤镜可以快速地进行人物皮肤美化处理,Portraiture滤镜可以将皮肤柔化,消除多余的斑点,在磨皮后复制细节保留较多的通道到图层面板,用高反差保留滤镜提取细节,再更改图层混合模式即可以得到漂亮的肤色 ...
- Mono登录界面记住密码的控件
<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_co ...
- php使用saop简单例子和注意事项
首先配置下PHP的soap环境支持: 找到php.ini文件:extension=php_soap.dll :always_populate_raw_post_data = -1 删除掉": ...
- AX7: Overlayering and extensions
Customization: Overlayering and extensions https://ax.help.dynamics.com/en/wiki/customization-overla ...
- 转@ManyToMany- annotation关系映射篇(下)
原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdd.html 终于要说ManyToMany了 场景:Product和Customer. 先看TestP ...
- JVM 内存的那些事
转自:http://blog.jobbole.com/104863/ 对于Java程序员你来说,在虚拟机内存管理的帮助下,不需要为每个new对象都匹配free操作,内存泄露和内存溢出等问题也不太容易出 ...