【Arcgis Engine开发】AE开发把影像或者矢量加载到图层
AE开发把影像或者加载到图层
1.创建一个类工厂
2.使用类工厂创建一个要使用的工作区
3.使用工作区打开并得到图层的dataset
4.把dataset装入到新建的图层实例
5.把图层加载到MapControl控件
引用 ArcGIS Engine中的8种数据访问
2009-09-26 13:37:40| 分类: GIS |字号 订阅
数据是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是文件型的空间数据格式,以文件的形式在磁盘上进行存储空间数据和属性数据。对于Shapefile来说工作空间就是它所在的文件夹,打开工作空间需要使用对应的工作空间工厂,即ShapefileWorkspaceFactoryClass,然后再调用IWorkspaceFactory的OpenFromFile方法就可以得到一个工作空间了,这也是设计模式中工厂方法的体现。工作空间工厂的打开方法返回的是一般意义的工作空间,根据具体数据还需要进行接口转换,因为Shapefile是矢量数据,所以把工作空间接口跳转到IFeatureWorkspace,从而读取其中的要素类,这一点对于接下来的几个数据格式也是同样的打开方式。
private void button1_Click(object sender, EventArgs e){//1) 创建工作空间工厂IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory(); // 1OpenFileDialog openFileDialog1 = new OpenFileDialog();openFileDialog1.Filter = "(*.shp)|*.shp";openFileDialog1.InitialDirectory = @"D:\";openFileDialog1.Multiselect = false;DialogResult pDialogResult = openFileDialog1.ShowDialog();if (pDialogResult != DialogResult.OK)return;string pPath = openFileDialog1.FileName;string pFolder = Path.GetDirectoryName(pPath);string pFileName = Path.GetFileName(pPath); //2) 打开shapefile工作空间IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0); // 2IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace; //3) 打开要素类IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName); //3 //4) 创建要素图层IFeatureLayer pFLayer = new FeatureLayerClass(); // 4pFLayer.FeatureClass = pFC; //5) 关联图层和要素类pFLayer.Name = pFC.AliasName; // 5ILayer pLayer = pFLayer as ILayer;IMap pMap = axMapControl1.Map; //6) 添加到地图空间pMap.AddLayer(pLayer); // 6axMapControl1.ActiveView.Refresh();
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要素类的代码。
private void button1_Click_1(object sender.EventArgs e)
{IWorkspaceFactory pWorkspace=new AccessWorkspaceFactoryClass();OpenFileDialog openFileDialog=new OpenFileDialog();openFileDialog1.Filter="*.mdb|(*.mdb)";openFileDialog1.InitialDirectory=@"E:\";openFileDialog1.Multiselect=false;DialogResult pDialogResult=openFileDialog1.ShowDialog();if(pDialogRestult!=DialogResult.OK)return;string pPath=openFileDialog1.FileName;string pFolder=Path.GetDirectoryName(pPath); string pFileName=Path.GetFileName(pPath);
//打开mdb工作空间IWorkspace pWorkspace=pFactory.OpenFromFile(pPath,0);
//打开要素集IFeatureWorkspace pFeatureWorkspace=pWorkspace as IFeatureWorkspace;IFeatureClass pFC=pFeatureWorkspace.OpenFeatureClass("sd");//特定的文件;
//创建要素图层IFeatureLayer pFLayer=new FeatureLayerClass();pFLayer.FeatureClass=pFC;
//关联图层和要素层pFLayer.Name=pFC.AliasName;ILayer pLayer=pFLayer as ILayer;IMap aMap=axMapControl1.Map;
//添加到地图控件pMap.AddLayer(pLayer);}
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分析、数据处理和空间可视化的,在获取到数据以后可以把数据加到图层里,也可以对数据进行检索或维护等工作。
【Arcgis Engine开发】AE开发把影像或者矢量加载到图层相关推荐
- 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...
- 《ArcGIS Engine 地理信息系统开发从入门到精通(第二版)》——6.7 本章小结
本节书摘来自异步社区<ArcGIS Engine 地理信息系统开发从入门到精通(第二版)>一书中的第6章,第6.6节,作者: 邱洪钢 , 张青莲 , 熊友谊 更多章节内容可以访问云栖社区& ...
- 【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比
文章目录 2.1 使用VBA进行桌面软件开发 2.1.1 VBA开发方式 2.1.1 VBA代码的安全性 2.2 使用DLL进行桌面软件开发 2.2.1 DLL开发方式 2.2.2 DLL功能的应用部 ...
- 利用Arcgis Engine 二次开发的使用和总结
Arcgis Engine 初体验 先放一张第一版系统的图,由于公司机密不能提供源码,但是各个小功能提供源码,为需要的同仁提供些许帮助. 接下来进入正题,将逐一展示利用Arcgis Engine开发的 ...
- 【转载】利用ArcGIS Engine 二次开发的使用和总结
文章目录 ArcGIS Engine 初体验 一.较完全编辑功能GIS程序 二.字段搜索要素和空间搜索要素GIS程序 三.图层重叠搜索GIS程序 四.要素合并.裁剪及检测要素重叠GIS程序 五.自定义 ...
- 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步
<ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 原文:<ArcGIS Engine+C#实例开发教程>第三 ...
- 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2
<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第 ...
- 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建
文章目录 ArcGIS Engine概述 ArcGIS Engine与ArcObjects的关系 ArcGIS Engine下载及安装 ArcGIS Engine概述 ArcGIS Engine简介 ...
- 【Flutter】Flutter 混合开发 ( 混合开发中 Flutter 的 热重启 / 热加载 )
文章目录 前言 一.混合开发中启用 Flutter 的 热重启 / 热加载 二.混合开发中 Flutter 的 热重启 / 热加载 命令测试 三.指定混合应用连接的设备 四.相关资源 前言 上一篇博客 ...
最新文章
- 车道线检测--End-to-end Lane Detection through Differentiable Least-Squares Fitting
- 测试接口时使用PostMan怎么设置全局变量?
- oracle 11g libclntsh.so.10.1,cx_Oracle找不到libclntsh.so.10.1错误
- m5310模组数据上传至onenet_硬核干货!基于M5310-A的NB-IoT水表通信模块软件业务逻辑分享...
- 一条更新SQL 是如何执行的?
- 十二省联考2019游记
- Log4j文件配置教程大全
- 【Python】Python库之虚拟现实
- javascript基础系列:javascript中的变量和数据类型(一)
- dijkstra java pre_Dijkstra算法实现
- python函数的四个特点_Python面向对象三大特征之封
- Spring Cloud+Spring Boot高频面试题解析
- php常量的声明和使用
- 安装了最新版本的java 用友nc打不开_NC无法安装客户端插件,不能进入用友NC系统登陆界面...
- 数学分析高等代数考研试题荟萃[更新至2017年12月15日]
- python扫描局域网端口和ip_Python实现扫描局域网活动ip(扫描在线电脑)
- 智力问答选择题_智力问答题题库
- Linux socket编程(一):客户端服务端通信、解决TCP粘包
- 分布电容和杂散电容_寄生电容 分布电容
- 双通道IPC如何RTSP取两个通道视频流?
热门文章
- 深入浅出Python量化交易实战--笔记01
- 【前端知识点总结】CSS 基础六 - 常见的CSS动画
- C/C++问题处理:error : no matching function for call to ‘max‘
- 云南禄丰县发生4.4级地震 震源深度10公里-云南-地震
- layu tab切换table
- Python 之谷歌瓦片地图影像批量下载
- 阿里云EMAS 4月产品动态
- 信息论与编码matlab实验报告,信息论与编码实验程序与结果图(matlab)
- JavaScript基础系列之五 浏览器
- MathType公式上浮该怎么办?