实习指导书-第八章-ArcGIS-Engine三维开发
- 格式:doc
- 大小:618.50 KB
- 文档页数:19
ArcEngine开发实例三一、实例目标及其实现的主要功能1、学习编程实现打开、保存,另存地图文档的方法;2、运用工具栏工具进行地图要素的添加;3、运用状态栏控件实现地图坐标信息的显示。
二、具体的实现过程及代码1、如指导书中的过程,新建一个C#工程项目,并为默认建立的窗体分别添加“ToolBarControl”“TOCControl”“MapControl”“LicenseControl”控件,执行与MapControl 控件的绑定操作,并通过“dock”属性排好。
为工具栏添加如下图所示的工具按钮。
2、添加菜单控件,依次添加菜单栏的主菜单text属性为“文件”,其name属性为“menuFile”,依次添加子菜单,其text属性分别为“打开文档”,“新建文档”,“保存文档”,“另存为….”,“退出”,其name属性分别为“menuOpenDoc”,“menuNewDoc”,“menuSaveDoc”,“menuSaveAsDoc”,“menuExitApp”。
3、打开工具箱,通过添加选项,添加statusBar控件,并双击添加到窗体上。
4、添加ArcGIS的引用ESRI.ArcGIS.Geodatabase和ESRI.ArcGIS.ADF类库,在第一个窗体的代码窗口导入命名空间:using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.ADF;using ESRI.ArcGIS.SystemUI;5、在public partial class Form1 : Form代码下添加如下的初始化语句:private IMapControl3 m_mapControl = null;private string m_mapDocumentName = string.Empty;private IContainer components;6、为窗体添加load事件,并添加以下代码:private void Form1_Load(object sender, EventArgs e){m_mapControl = (IMapControl3)axMapControl1.Object;menuSaveDoc.Enabled = false; }7、为菜单“menuOpenDoc”添加click事件,并添加如下代码:ICommand command = new ControlsOpenDocCommandClass();command.OnCreate(m_mapControl.Object);command.OnClick();8、为菜单“menuSaveDoc”添加click事件,并添加如下代码:if (m_mapControl.CheckMxFile(m_mapDocumentName)){IMapDocument mapDoc = new MapDocumentClass();mapDoc.Open(m_mapDocumentName, string.Empty);if (mapDoc.get_IsReadOnly(m_mapDocumentName)){MessageBox.Show("Map document is read only!");mapDoc.Close();return;}mapDoc.ReplaceContents((IMxdContents)m_mapControl.Map);mapDoc.Save(esRelativePaths, false);mapDoc.Close();}9、为菜单“menuSaveAsDoc”添加click事件,并添加如下代码::ICommand command = new ControlsSaveAsDocCommandClass();command.OnCreate(m_mapControl.Object);command.OnClick();10、为菜单“menuExitApp”添加click事件,并添加如下代码:Application.Exit();11、为菜单“menuNewDoc”添加click事件,并添加如下代码:ICommand command = new CreateNewDocument();command.OnCreate(m_mapControl.Object);command.OnClick();12、为控件“axMapControl1”添加OnMouseMove事件,并添加如下代码:statusBar1.Text = string.Format("{0}, {1} {2}", e.mapX.ToString("#######.##"),e.mapY.ToString("#######.##"), axMapControl1.MapUnits.ToString().Substring(4));13、为控件“axMapControl1”添加OnMapReplaced事件,并添加如下代码:m_mapDocumentName = m_mapControl.DocumentFilename;if (m_mapDocumentName == string.Empty){menuSaveDoc.Enabled = false;statusBar1.Text = string.Empty;}else{menuSaveDoc.Enabled = true;statusBar1.Text = Path.GetFileName(m_mapDocumentName);}三、操作通过操作调试该程序源码,观察并掌握AE中对于地图文件保存的操作方法。
基于ArcGIS Engine的三维地理信息系统开发及应用作者:刘阳娜来源:《电脑知识与技术》2018年第03期摘要:在可视化技术、空间技术、计算机图形技术等不断发展过程中,逐渐地转变原有的二维地理信息系统,变为三维地理信息系统。
现阶段,地理信息系统领域中,三维地理信息系统已经成为一个新的发展趋势,不过迄今为止,仍然只是在部分实验性原型系统中实现了部分的三维地理信息系统功能,并未广泛推广,而该项技术的广泛推广对于地理信息系统发展来说,意义重大,因此,该文在ArcGIS Engine基础上,分析了三维地理信息系统的开发及应用。
关键词:ArcGIS Engine;三维地理信息系统;开发;应用中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)03-0005-02相比于二维地图,三维显示地形地物时,不仅利于人们直观的观看,且会给人们营造出身临其境的感觉,还能将人们利用地图的各种需求得到充分满足。
因此,不断有公司推出三维图形显示软件,其中,典型代表之一即为GOOGLE EARTH(GOOGLE公司开发),但由于单位数据具有庞大的数据量,现有三维地理信息系统产品均存在一定的不足之处,如建模复杂、代码众多、浏览速度慢等,导致国内并未普遍的应用三维地理信息系统。
ArcGIS Engine由ESRI公司推出后,有利于将上述问题妥善的解决,由此可见,本文在ArcGIS Engine基础上研究开发三维地理信息系统的方法具有十分重要的现实意义。
1 ArcGIS Engine三维组件ArcGIS Engine属于完整GIS组件库,开发公司为美国ESRI公司,组成为一组核心ArcObject包,用于构建定制应用,不仅能够对多种应用程序接口做出有效支持,且可进行自定义独立独立信息系统应用程序的建立,拥有的高级功能众多。
在ArcGIS Engine中,所提供的应用编程接口有三种,分别为C++、COM、.NET,对于存在二次开发需求的用户,其留有的自由空间非常大,用户可按照自身需求,进行相应级别开发方式的选择,促进开发工作便利的完成。
ArcGIS Engine的开发与部署朱政ESRI中国(北京)有限公司2004年4月目录z ArcGIS9的开发框架z ArcGIS Engine的概念以及功能z ArcGIS Engine的license部署z ArcGIS Engine的开发z实例1 2 3ArcGIS9 概况ArcGIS9 在8版本上扩展的主要功能–地理处理–3D 可视化–开发工具新产品–ArcGIS Engine–ArcGIS ServerArcGIS 9的开发z ArcGIS Enginez ArcGIS Serverz ArcGIS Desktop 上的开发ArcGIS 9 的开发ArcGIS 9 为开发桌面和服务器应用提供了一个完整的系统,它允许开发人员:1 嵌入GIS地图/功能到其他的应用中2 创建和分发自定义的桌面应用3 配置/客户化ArcGIS的应用,比如ArcMap4 扩展ArcGIS 框架和模型5 创建网络服务和应用ArcGIS Desktop ArcGIS Engine ArcGIS ServerArcGIS9 的产品共享ArcObjectsArcGIS9 开发框架z ArcGIS9 建立在ArcGIS8的基础上z ArcGIS9是在新的模块化的框架下建立.–相同的对象–改进的功能z框架改变的几个方面–模块化–多种APIs–跨平台ArcGIS模块化的框架z模块化在ArcGIS9的各个部分中都被考虑了。
z ArcGIS对象模型被组织成一系列的库。
z库是基于功能来分的对象类。
z These libraries definez Type librariesz Name spacesz Java packagesz C++ header filesArcGIS Engine关键特征z标准的GIS框架z有效的license配置方案z跨平台windows unixz跨语言com,.Net,C++,Javaz ArcGIS的扩展功能z开发控件ArcGIS Engine的简介z ArcGIS Engine是为开发商建立应用提供的完整的嵌入式的GIS组件库z ArcGIS Engine由两部分组成:z开发包(开发人员)z运行包(最终用户)分发ArcGIS Engine能做什么?z显示多个图层组成的地图z漫游和缩放地图z查找地图中的要素z用某一字段显示标注z显示航片和遥感影像的栅格数据z绘制几何要素z绘制描述性的文字z沿线,或者用多边形,圆等选择要素z根据一定距离选择要素z通过sql表达式查询要素z渲染要素z动态显示实时数据,或时间序列数据z地图定位z几何操作z维护几何要素z创建和更新地理要素和属性ArcGIS Engine的功能ArcGIS Engine开发包z ArcGIS Engine开发包包括了支持开发任务所需要的所有的开发资源。
arcengine,实习报告篇一:GIS开发实习报告学号1221030205实习报告GIS程序设计实习起止日期: XX 年 7 月13 日至 XX年 7 月 19 日学班成生姓名级绩吴馁 12级地信2 班指导教师(签字)地质与测绘学院XX年 7 月 20 日GIS程序设计实习一、实习目的通过GIS程序设计实习,使学生了解需求分析、项目管理方案设计、系统总体设计以及系统详细设计、系统实施、运行和维护等阶段要完成的具体工作;掌握在C#和ArcEngine环境下构建应用型地理信息系统的方法。
二、实习内容熟悉开发环境:Visual Studio XX; C#; Arc Engine功能需求分析基于组件技术开发应用型地理信息系统组件式技术已成为当今软件技术的潮流之一。
组件式GIS软件的基本思想是把GIS各大功能模块划分为几个控件。
各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。
重点完成的工作包括:1)建立ArcGIS Engine 应用程序框架;2)实现对矢量数据(Shape File格式)的访问;3)实现采用简单、唯一值、分类等多种方式对面状矢量数据进行渲染(Render)。
三、实习步骤:实习一:初识ArcGIS Engine 开发环境1、新建一个Windows窗体应用程序2、在新建窗体中添加控件在工具箱中选择添加toolbarcontrol,TOCControl,MapControl控件在解决方案资源管理器中双击在主函数中添加();使得文件可以加载到MapControl中。
右击toolbarcontrol选择属性,如图选择Items选项,添加如图控件右击MapControl属性,在General的map document中添加要加载的地图文件通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。
《Arcgis操作及开发》实习报告张占阳(长安大学地测学院地理信息系统,陕西西安710054)一、实习课时和类型:学时:5周;实习类型:实践操作与软件开发;二、实习目的:第一部分:“使用 ArcMap浏览地理数据”实习目的:1.了解地理数据是如何进行组织及基于“图层”进行显示的。
2.认识ArcMap 图形用户界面。
3.通过浏览与地理要素关联的数据表,你可以了解地理数据是如何与其属性信息进行连接的。
4.掌握GIS两种基本查询操作,加深对其实现原理的理解。
5.初步了解设置图层显示方式-图例的使用。
第二部分:“空间数据库管理及属性编辑”实习目的:1.利用ArcCatalog管理地理空间数据库,理解Personal Geodatabse空间数据库模型的有关概念及其特点。
2.掌握在ArcMap中编辑属性数据的基本操作。
3.掌握根据数据文件生成矢量图层的方法和过程。
4.理解图层属性表间的连接(Join)或关联(Link)关系。
第三部分:“影像配准及矢量化”实习目的:1.利用影像配准(Georeferencing)工具进行影像数据地理配准。
2.编辑器的使用(点要素、线要素、多边形要素的数字化)。
3.熟悉GRAMIN GPS手持机的基本使用方法。
注意:在基于ArcMap 的操作过程中请注意保存地图文档。
第四部分:“空间分析基本操作”实习目的:1.了解基于矢量数据和栅格数据基本空间分析的原理和操作。
2. 掌握矢量数据与栅格数据间的相互转换、栅格重分类(Raster Reclassify)、栅格计算-查询符合条件的栅格(Raster Calculator)、面积制表(Tabulate Area)、分区统计(Zonal Statistic)、缓冲区分析(Buffer)、采样数据的空间内插(Interpolate)、栅格单元统计(Cell Statistic)、邻域统计(Neighborhood)等空间分析基本操作和用途。
《ArcGIS Engine+C#实例开发教程》第七讲图层符号选择器的实现第一讲:桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“”重命名为“”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。
选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。
选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。
将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。
点击TabPages属性右边的按钮,弹出TabPage集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。
如下所示。
选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。
选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。
拖入TabControl控件到Panel2,设置Dock属性为Fill。
并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。
《ArcGIS Engine+C#实例开发教程》—————By Daniel实习一:初识ArcGIS Engine开发环境1、新建一个Windows窗体应用程序启动VS2010 ,选择“文件|新建|项目|Windos窗体应用程序”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“MyMap”,点击确定。
2、新建工具集|添加选型卡(esri)|加载选择项(AxGlobeControl ~ AxToolbarControl).其中,AxMapControl就是Map地图控件,AxPageLayouControl是布局地图控件,AxTOCControl是目录控件,AxToolbarControl是GIS工具栏控件,AxSceneControl是Scene 三维场景控件,axGlobeControl 是Globe 控件,AxLicenseControl 是许可控件,AxSymbologyControl 是符号选择器控件,AxArcReaderControl 是ArcReader 控件,AxArcReaderGlobeControl 是ArcReaderGlobe 控件;AxLicenseControl是许可控件,一般GIS系统中都必须添加,否则无法使用.3、添加控件:AxToolbarControl(工具栏Tool) 、AxTOCControl(目录树Layout) 、AxMapControl(地图Map),并调整位置;最后将LicenseControl(许可控件)拖入窗体任意位置.添加完这几个控件后,VS会自动为我们添加一些引用,这些应用如下,注意Version这个类库是ArcGIS Engine 10 新增加的,而且必不可少。
4、设置属性右击ToolbarControl控件,选择“属性| Items(选择工具)| Add Commands”,选择常用工具.5、控件绑定:设置控件的关联通过以上步骤添加的控件还只是单独存在,而我们的程序需要各控件间协同工作,因此要进行控件绑定。
1.ArcOjects 3D开发方法简介一、ArcOjects 3D开发方法简介众所周知,在ArcGIS 3D分析扩展模块中提供了丰富的三维可视化和分析功能:你可以通过不同的视角查看表面数据,对表面数据进行查询,以及对表面数据进行坡度、坡向、视域分析等操作,进行三维动画模拟等等。
其中所涉及的3D对象都是ArcObjects的一部分,针对3D的开发,实际上是ArcObjects的开发,所以具体的开发方法有:基于ArcScene中内嵌的VBA开发;通过VB、VC++等兼容COM的开发语言进行开发新的3D组件和功能。
二、基本的3D对象模型在3D开发中,我们可以用ArcMap对应ArcScene,其中MxDocument对象对应SxDocument 对象,Map对象对应着Scene对象,而相对于Display显示对象,在ArcScene中有SceneGraph 对象。
在对象模型图的顶部是Application对象,从它我们可以执行和应用相关的任务,比如打开文档或者访问和应用相关的其它对象。
在VBA中,我们可以直接获得Application对象:Dim pApp as IApplicaitonSet pApp = Application如果你在VB DLL中实现命令和工具,那么在具体实例化这个类时你可以获得和Application 对象挂接的钩子(hook):Implements ICommandPrivate m_pApp as esriCore.IapplicationPrivate Sub ICommand_OnCreate(ByVal Hook As Object)Set m_pApp = Hook…End Sub有了Application对象,你就可以访问它所包含的其它所有对象了。
比如可以获得SxDocument 对象,而它包含一个Scene对象,Scene对应的SceneGraph对象包含了一个或多个SceneViewer对象,每个SceneViewer对象中有一个Camera对象,它代表了观察点的特性。
ArcGIS Engine高级功能开发第七章ArcGIS Engine高级功能开发7.1缩略图(鹰眼)鹰眼功能是GIS的主要功能之一,当地图范围很大时,它可以很好的为用户指明当前地图的范围。
在本小节中我们将学习如何制作这种鹰眼。
7.1.1添加控件新建一个C#.Net项目,项目名称为OverView,将Form1的名字设置为MainForm,并添加ToolbarControl 、两个MapControl和LicenceControl等四个控件。
布局如下图所示。
左边的axMapControl1用于地图数据显示和操作,右边axMapControl2用于鹰眼显示。
图 1 界面布局在ToolbarControl 加载添加数据按钮和地图浏览的功能按钮,如下图所示,并将ToolbarControl的伙伴控件设为axMapControl1。
图2添加按钮7.1.2代码添加及解释鹰眼用来显示主窗体当前视图范围在全景视图中的位置,在ArcMap中使用一个线框在鹰眼视图中标识。
当主视图中的视图范围改变时,鹰眼中的线框随之改变,当拖动鹰眼视图中的红线框时,主视图中的视图范围也随之改变。
下面开始实现鹰眼功能,添加using ESRI.ArcGIS.Carto、using ESRI.ArcGIS.Geometry、using ESRI.ArcGIS.Display三个引用。
首先在axMapControl1中视图范围改变时鹰眼窗体要做出对应的响应,即绘制线框并显示,在OnExtentUpdated事件中添加代码如下:private void axMapControl1_OnExtentUpdated(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e){//创建鹰眼中线框IEnvelope pEnv = (IEnvelope)e.newEnvelope;IRectangleElement pRectangleEle = new RectangleElementClass();IElement pEle = pRectangleEle as IElement;pEle.Geometry = pEnv;//设置线框的边线对象,包括颜色和线宽IRgbColor pColor = new RgbColorClass();pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 255;// 产生一个线符号对象ILineSymbol pOutline = new SimpleLineSymbolClass();pOutline.Width = 2;pOutline.Color = pColor;// 设置颜色属性pColor.Red = 255;pColor.Green = 0;pColor.Blue = 0;pColor.Transparency = 0;// 设置线框填充符号的属性IFillSymbol pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;pFillShapeEle.Symbol = pFillSymbol;// 得到鹰眼视图中的图形元素容器IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;IActiveView pAv = pGra as IActiveView;// 在绘制前,清除axMapControl2 中的任何图形元素pGra.DeleteAllElements();// 鹰眼视图中添加线框pGra.AddElement((IElement)pFillShapeEle, 0);// 刷新鹰眼pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}当鼠标点击鹰眼窗体时,主窗体Extent随之改变。
实习指导书_第八章_A r c G I S E n g i n e三维开发-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN第八章 ArcGIS Engine的三维开发8.1ArcGIS三维分析及其控件简介8.1.1 ArcGIS三维分析简介ArcGIS三维分析提供了对表面数据有效的可视化和分析。
使用三维分析,可以从多个角度来浏览表面数据,查询表面,从表面上一选定的位置来确定什么对象可见,以及通过叠加栅格和矢量数据来创建一幅逼真的透视图。
三维分析(3D Analyst)添加了两个专用的三维可视化应用程序:ArcScene和ArcGlobe,它们扩展了ArcGIS Desktop的功能,并且扩展了ArcCatalog和ArcMap的三维功能。
ArcScene允许用户制作具有透视效果的场景,在这个场景中可以对地理信息系统数据进行浏览和交互。
用户可以在表面上叠加栅格和矢量数据,并从矢量数据源创建线、面和体。
用户也可以使用ArcScene中的三维分析工具创建和分析表面。
ArcGlobe提供在标准计算机硬件上对巨型三维栅格、地形和矢量数据集进行实时漫游和缩放,在此过程中基本不会感觉到速度上的问题。
这主要是依靠一种新引入的索引和快速检索数据的方法实现的。
利用三维分析扩展ArcCatalog,从而实现对三维数据的管理并且创建具有三维视觉属性的图层。
用户可以在ArcCatalog中使用与ArcScene中相同的浏览工具预览三维场景和数据。
利用三维分析扩展ArcMap,从而可以由GIS数据生成新的表面,以及分析表面、查询表面某一位置的属性值和分析表面不同位置的可见性。
用户还可以计算表面面积和表面之上或者表面之下的体积,并沿表面上的三维线生成剖面。
8.2ArcGIS三维显示简介ArcGIS Desktop中,可用于三维场景展示的程序为ArcGlobe和ArcScene,由于两者的差别,在三维场景展示中适用的情况有所不同。
第八章ArcGIS Engine的三维开发8.1ArcGIS三维分析及其控件简介8.1.1 ArcGIS三维分析简介ArcGIS三维分析提供了对表面数据有效的可视化和分析。
使用三维分析,可以从多个角度来浏览表面数据,查询表面,从表面上一选定的位置来确定什么对象可见,以及通过叠加栅格和矢量数据来创建一幅逼真的透视图。
三维分析(3D Analyst)添加了两个专用的三维可视化应用程序:ArcScene和ArcGlobe,它们扩展了ArcGIS Desktop的功能,并且扩展了ArcCatalog和ArcMap的三维功能。
ArcScene允许用户制作具有透视效果的场景,在这个场景中可以对地理信息系统数据进行浏览和交互。
用户可以在表面上叠加栅格和矢量数据,并从矢量数据源创建线、面和体。
用户也可以使用ArcScene 中的三维分析工具创建和分析表面。
ArcGlobe提供在标准计算机硬件上对巨型三维栅格、地形和矢量数据集进行实时漫游和缩放,在此过程中基本不会感觉到速度上的问题。
这主要是依靠一种新引入的索引和快速检索数据的方法实现的。
利用三维分析扩展ArcCatalog,从而实现对三维数据的管理并且创建具有三维视觉属性的图层。
用户可以在ArcCatalog中使用与ArcScene中相同的浏览工具预览三维场景和数据。
利用三维分析扩展ArcMap,从而可以由GIS数据生成新的表面,以及分析表面、查询表面某一位置的属性值和分析表面不同位置的可见性。
用户还可以计算表面面积和表面之上或者表面之下的体积,并沿表面上的三维线生成剖面。
18.2ArcGIS三维显示简介ArcGIS Desktop中,可用于三维场景展示的程序为ArcGlobe和ArcScene,由于两者的差别,在三维场景展示中适用的情况有所不同。
由于Engine与Desktop底层技术都是基于AO的,因此该比较结果在功能性和整体效率方面同样适用与GlobeControl和SceneControl。
ArcScene简介:ArcScene是一个适合于展示三维透视场景的平台,可以在三维场景中漫游并与三维矢量与栅格数据进行交互。
ArcScene是基于OpenGL 的,支持TIN数据显示。
显示场景时,ArcScene会将所有数据加载到场景中,矢量数据以矢量形式显示,栅格数据默认会降低分辨率来显示以提高效率。
图1 ArcScene界面ArcGlobe简介:ArcGlobe是ArcGIS9.0之后出现的新产品,设计用于展示大数据量的场景,支持对栅格和矢量数据无缝的显示。
ArcGlobe基于全球视2野,所有数据均投影到全球立方投影(World Cube Projection)下,并对数据进行分级分块显示。
为提高显示效率,ArcGlobe按需将数据缓存到本地,矢量数据可以进行栅格化。
图2 ArcGlobe界面ArcGlobe和ArcScene的主要区别:(1)投影坐标系统的不同:ArcGlobe将所有数据投影到球体表面上,使场景显示更接近现实世界。
适合于全市,全省,全国甚至全球大范围内的数据展示。
ArcScene将所有数据投影到当前场景所定义的空间参考中,默认情况下,场景的空间参考由所加入的第一个图层空间参考决定。
ArcScene中场景表现为平面投影,适合于小范围内精细场景刻画。
(2)缓存与内存管理机制的不同:ArcGlobe和ArcScene最重要的区别在于此。
ArcGlobe设计用于海量数据展示,所以为提高显示效率而进行数据缓存是很必要的。
3ArcGlobe将数据分块并按级别建立缓存和索引,才使得即使在ArcGlobe中显示海量数据仍可以高速的展示与漫游。
ArcScene会将所有数据读入场景中完全显示,因此会占用大量显存,物理内存和虚拟内存,这也是ArcScene适于小数据量小场景精细展示的原因之一。
(3)分析功能的不同:ArcGlobe可以极好的展示大数据的场景,同时提供高速的漫游。
但ArcScene对传统的三维分析功能支持的更好。
例如Desktop中3D Analyst工具条在ArcScene中被很好的支持,并支持Tin模型的显示。
ArcGlobe不支持Tin的显示,但支持其作为高程数据加入场景。
ArcGlobe支持Terrain数据集但ArcScene不支持。
(4)显示差别ArcGlobe中用户可以选择是否将矢量数据栅格化后显示,该功能对注记数据的显示也有很大帮助。
用户可以选择将注记(Annotation)附着显示于地球表面或像广告牌一样面向当前用户。
ArcScene中不支持注记(Annotation)数据的显示。
在ArcGlobe中矢量数据栅格化后可以大幅提高显示效率,我们在ArcGlobe 场景建设中采取“能够栅格化的矢量数据尽量栅格化”的策略也来自于此。
1.ArcGIS 三维系统的设计该系统分为四个模块,分别是文件的操作、场景的浏览、点查询和矢量文件生成TIN。
下面分别对这四个模块做详细介绍,其参考代码请参阅“例子程序”中的Chapter8。
2.1文件操作该模块包括打开工程文件(打开sxd文件)、打开栅格文件(打开Raster文件)和保存图片文件。
所用到的控件有:SceneControl45控件(用于显示打开的工程文件和栅格文件)、Button 控件、OpenFileDialog 控件、SaveFileDialog 控件、TabControl 控件(页面布局控件)、TOCControl 控件(用于显示图层)。
其布局如下:图3 文件操作的界面布局(红线内的)控件类型Text 属性 控件名称 备注 SceneControl无 mSceneControl 显示数据 TOCControl无 mTOCControl 显示图层 Button打开sxd 文件 OpenSxdFile 打开工程的文件 Button打开Raster 文件 OpenRasterFile 打开栅格的文件 Button 保存图片文件 SaveImage 抓图TabControl 两个页面分别为“基本操作”和“图层”tabControl1 分为两个页面,“基本操作”和“图层” 除了上述表所列出的属性需要设置,另外还要将TOCControl 的Buddy属性设置为mSceneControl,其方法如下:(1)选中TOCControl控件,右击弹出菜单并选择“属性”。
(2)弹出对话框,选择General页面,并找到Buddy复选框,选择mSceneControl,如下图。
图4 设置TOCControl控件的Buddy属性将控件的属性设置完毕之后,为三个Button控件添加Click事件,并添加以下处理代码:OpenSxdFile按钮控件的Click事件代码:/************************************************************************//* "打开sxd文件"按钮按下事件 *//************************************************************************///打开sxd工程文件private void OpenSxdFile_Click(object sender, EventArgs e){//文件过滤mOpenFileDialog.Filter = "sxd文件|*.sxd";//打开文件对话框打开事件if (mOpenFileDialog.ShowDialog() == DialogResult.OK){//从打开对话框中得到打开文件的全路径,并将该路径传入到mSceneControl中mSceneControl.LoadSxFile(mOpenFileDialog.FileName);6}}OpenRasterFile按钮控件的Click事件代码:/************************************************************************//* "打开Raster文件"按钮按下事件 *//************************************************************************///向工程中添加栅格数据private void OpenRasterFile_Click(object sender, EventArgs e){string sFileName = null;//新建栅格图层IRasterLayer pRasterLayer = null;pRasterLayer = new RasterLayerClass();//取消文件过滤mOpenFileDialog.Filter = "所有文件|*.*";//打开文件对话框打开事件if (mOpenFileDialog.ShowDialog() == DialogResult.OK){//从打开对话框中得到打开文件的全路径sFileName = mOpenFileDialog.FileName;//创建栅格图层pRasterLayer.CreateFromFilePath(sFileName);//将图层加入到控件中mSceneControl.Scene.AddLayer(pRasterLayer,true);//将当前视点跳转到栅格图层ICamera pCamera = mSceneControl.Scene.SceneGraph.ActiveViewer.Camera;//得到范围IEnvelope pEenvelop = pRasterLayer.VisibleExtent;//添加z轴上的范围pEenvelop.ZMin = mSceneControl.Scene.Extent.ZMin;pEenvelop.ZMax = mSceneControl.Scene.Extent.ZMax;//设置相机pCamera.SetDefaultsMBB(pEenvelop);mSceneControl.Refresh();}}SaveImage按钮控件的Click事件代码:7/************************************************************************//* "保存图片文件"按钮按下事件 *//************************************************************************///抓图,将场景保存成图片文件private void SaveImage_Click(object sender, EventArgs e){string sFileName = "";//保存对话框的标题mSaveFileDialog.Title = "保存图片";//保存对话框过滤器mSaveFileDialog.Filter = "BMP图片|*.bmp|JPG图片|*.jpg";//图片的高度和宽度int Width = mSceneControl.Width;int Height = mSceneControl.Height;if( mSaveFileDialog.ShowDialog() == DialogResult.OK){sFileName = mSaveFileDialog.FileName;if(mSaveFileDialog.FilterIndex == 1)//保存成BMP格式的文件{mSceneControl.SceneViewer.GetSnapshot(Width, Height,esri3DOutputImageType.BMP, sFileName);}else//保存成JPG格式的文件{mSceneControl.SceneViewer.GetSnapshot(Width, Height,esri3DOutputImageType.JPEG, sFileName);}MessageBox.Show("保存图片成功!");mSceneControl.Refresh();}}2.2场景浏览有两种方法定制场景的浏览,第一种方法是利用arcgis的向导,定制常用的浏览方法,如漫游、放大、缩小等等,该方法简单,并且不需要编写代码,第二种方法是通过添加代码的方法更改场景的CurrentTool属性,从而实现场景浏览的功能,下面对以上两种方法一一介绍:8第一种方法:第一步:添加ToolbarControl控件,该控件位于“工具箱”中的“ArcGIS Windows Forms”选项中,把它的名字设置为”mToolbarControl”,将“Dock”属性设置为“Top”,并将其Buddy 属性设置为mSceneControl,设置方法与mTOCControl控件相同。