(转)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为什么无法 ...
随机推荐
- StackOverflow
stackoverflow栈溢出 stacker栈式存储器 signup注册 signin登陆 inbox收信信箱 verify 核实 otherwise另外的 noted说明 (就是说有明文指出 ...
- window下安装git与git使用
有的eclipse已经自带了Git了,就不用安装了.如果,想重新安装,可以先卸载GIT,卸载 不同eclipse卸载不一样: 1.在Eclipse中依次点击菜单"Help"-> ...
- POJ1051 P,MTHBGWB
题目来源:http://poj.org/problem?id=1051 题目大意: Morse密码里每个字母用长度不定的点和线来表示,一条信息中字母的编码之间用空隙隔开.下表为Morse密码的编码表: ...
- svn 常用忽略
*.o *.lo *.la *.al .libs *.so *.so.[-]* *.a *.pyc *.pyo __pycache__ *.rej *~ #*# .#* .*.swp .DS_Stor ...
- I2C(smbus pmbus)和SPI分析
2C和SPI作为两种非常常用的低速外部总线 I2C I2C是以前的飞利浦半导体制定的标准,也就是如今的NXP. I2C总线由一条数据线(SDA)和一条时钟线(SCL)组成.设备分主从,主设备提供时钟, ...
- 工具类_SharedPreferencesUtils
import android.app.Application;import android.content.Context;import android.content.SharedPreferenc ...
- Go语言基础之20--web编程框架之Gin框架
一.Gin框架介绍 1.1 简介 A. 基于httprouter开发的web框架. http://github.com/julienschmidt/httprouter B. 提供Martini风格的 ...
- java向数据库插入数据时的错误: Duplicate entry '' for key 'PRIMARY' 问题解决
错误提示为:你插入的记录与数据表中原有记录的主键重复了(Duplicate).所以插入失败 mysql主键设置成auto_increment时,进行并发性能测试出现主键反复Duplicate entr ...
- Django视图系统
Django的view(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. ...
- php rtrim的一个坑,很“二”的问题
一.背景: 做项目的时候遇到一种情况,商家的营业时间显示的问题,设计图上要求显示成:“星期一,星期二,星期三,星期四,星期五,星期六,星期天” 换句话说,就是营业星期勾哪个就显示哪个,类似下面这样: ...