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开发把影像或者矢量加载到图层相关推荐

  1. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  2. 《ArcGIS Engine 地理信息系统开发从入门到精通(第二版)》——6.7 本章小结

    本节书摘来自异步社区<ArcGIS Engine 地理信息系统开发从入门到精通(第二版)>一书中的第6章,第6.6节,作者: 邱洪钢 , 张青莲 , 熊友谊 更多章节内容可以访问云栖社区& ...

  3. 【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功能的应用部 ...

  4. 利用Arcgis Engine 二次开发的使用和总结

    Arcgis Engine 初体验 先放一张第一版系统的图,由于公司机密不能提供源码,但是各个小功能提供源码,为需要的同仁提供些许帮助. 接下来进入正题,将逐一展示利用Arcgis Engine开发的 ...

  5. 【转载】利用ArcGIS Engine 二次开发的使用和总结

    文章目录 ArcGIS Engine 初体验 一.较完全编辑功能GIS程序 二.字段搜索要素和空间搜索要素GIS程序 三.图层重叠搜索GIS程序 四.要素合并.裁剪及检测要素重叠GIS程序 五.自定义 ...

  6. 《ArcGIS Engine+C#实例开发教程》第三讲 MapControl与PageLayoutControl同步

    <ArcGIS Engine+C#实例开发教程>第三讲 MapControl与PageLayoutControl同步 原文:<ArcGIS Engine+C#实例开发教程>第三 ...

  7. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

    <ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第 ...

  8. 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建

    文章目录 ArcGIS Engine概述 ArcGIS Engine与ArcObjects的关系 ArcGIS Engine下载及安装 ArcGIS Engine概述 ArcGIS Engine简介 ...

  9. 【Flutter】Flutter 混合开发 ( 混合开发中 Flutter 的 热重启 / 热加载 )

    文章目录 前言 一.混合开发中启用 Flutter 的 热重启 / 热加载 二.混合开发中 Flutter 的 热重启 / 热加载 命令测试 三.指定混合应用连接的设备 四.相关资源 前言 上一篇博客 ...

最新文章

  1. 车道线检测--End-to-end Lane Detection through Differentiable Least-Squares Fitting
  2. 测试接口时使用PostMan怎么设置全局变量?
  3. oracle 11g libclntsh.so.10.1,cx_Oracle找不到libclntsh.so.10.1错误
  4. m5310模组数据上传至onenet_硬核干货!基于M5310-A的NB-IoT水表通信模块软件业务逻辑分享...
  5. 一条更新SQL 是如何执行的?
  6. 十二省联考2019游记
  7. Log4j文件配置教程大全
  8. 【Python】Python库之虚拟现实
  9. javascript基础系列:javascript中的变量和数据类型(一)
  10. dijkstra java pre_Dijkstra算法实现
  11. python函数的四个特点_Python面向对象三大特征之封
  12. Spring Cloud+Spring Boot高频面试题解析
  13. php常量的声明和使用
  14. 安装了最新版本的java 用友nc打不开_NC无法安装客户端插件,不能进入用友NC系统登陆界面...
  15. 数学分析高等代数考研试题荟萃[更新至2017年12月15日]
  16. python扫描局域网端口和ip_Python实现扫描局域网活动ip(扫描在线电脑)
  17. 智力问答选择题_智力问答题题库
  18. Linux socket编程(一):客户端服务端通信、解决TCP粘包
  19. 分布电容和杂散电容_寄生电容 分布电容
  20. 双通道IPC如何RTSP取两个通道视频流?

热门文章

  1. 深入浅出Python量化交易实战--笔记01
  2. 【前端知识点总结】CSS 基础六 - 常见的CSS动画
  3. C/C++问题处理:error : no matching function for call to ‘max‘
  4. 云南禄丰县发生4.4级地震 震源深度10公里-云南-地震
  5. layu tab切换table
  6. Python 之谷歌瓦片地图影像批量下载
  7. 阿里云EMAS 4月产品动态
  8. 信息论与编码matlab实验报告,信息论与编码实验程序与结果图(matlab)
  9. JavaScript基础系列之五 浏览器
  10. MathType公式上浮该怎么办?