课件:牟乃夏ArcEngine开发教程:第章地图操作基本功能.pptx_第1页
课件:牟乃夏ArcEngine开发教程:第章地图操作基本功能.pptx_第2页
课件:牟乃夏ArcEngine开发教程:第章地图操作基本功能.pptx_第3页
课件:牟乃夏ArcEngine开发教程:第章地图操作基本功能.pptx_第4页
课件:牟乃夏ArcEngine开发教程:第章地图操作基本功能.pptx_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

牟乃夏 ArcGIS Engine 地理信息系统开发教程 配套PPT- 第3章 地图操作基本功能,目录,1. 空间数据与工作空间 2. MapControl控件接口 3. 数据加载 4. 地图文档保存 5. 地图浏览 6. 书签 7. ICommand和ITool命令操作地图 8. 量测 9. 要素选择操作 10. 视图同步 11. TOCControl控件,1. 空间数据与工作空间,1.空间数据 在GIS软件中,空间数据有多种不同的存在形式。按照不同的划分标准可以分为矢量数据和栅格数据、GIS格式的地理数据与非GIS格式的数据(如CAD格式等)、空间数据库数据(如个人数据库、ArcSDE数据库等)和文件数据(ShapeFile格式、Coverage格式)等。 2.工作空间 工作空间(Workspace)对象,在物理级别上相当于地理数据库本身,在逻辑上是一个包含空间数据集和非空间数据集的数据容器。它包含数据集(Dataset)、要素类(FeatureClass)、表(Table)等数据。,1. 空间数据与工作空间,常用的工作空间及工作空间对象,1. 空间数据与工作空间,工作空间 数据加载需要先打开相对应的工作空间。 IWorkspace接口:IWorkspace接口定义了访问工作空间各种属性的方法,如工作空间的连接属性等。通过IWorkspace接口可实例化现有数据集和创建新数据集。由于WorkSpace是一个普通类,要获得WorkSpace,需要通过工作空间工厂(WorkspaceFactory)来创建。 IWorkspaceFactory接口:IWorkspaceFactory接口定义了创建、打开工作空间的方法和对工作空间工厂信息成员的访问。用户可通过工作空间工厂管理不同类型的工作空间,所有的工作空间对象都可通过此接口产生。 IWorkspaceFactory接口的Create方法可产生一个新的工作空间对象,不同类型的WorkspaceFactory对象,其Create方法产生的工作空间对象是不同的。 IWorkspaceShapefileFactory接口的Open方法和OpenFromFile方法可以用于打开一个已经存在的工作空间,Open方法用于打开一个SDE数据库,OpenFromFile方法用于打开一个文件类型的数据,如*.tif、*.img等。,2. MapControl控件接口,1)IMapControlDefault接口 IMapControlDefault接口是MapControl控件的缺省接口,是代表当前版本的最新接口,开发环境自动使用这个接口定义的属性和方法。 2)IMapControl2接口 IMapControl2接口提供了一系列的属性和方法,如设置MapControl控件的显示属性、控件外观、添加和管理数据图层和地图文档、在控件上绘制图形和返回几何对象等。 3)IMapControl3接口 IMapControl3接口在继承IMapControl2的基础上,增加了以下属性和方法: CustomProperty:设置自定义控件属性。 DocumentFilename:返回MapControl中载入的地图文档的文件名。 DocumentMap:返回MapControl中最后载入的地图名称。 KeyIntercept:返回或设置MapControl控件截取的键盘按键信息。 Object:返回MapControl控件。 ShowMapTips:控制是否显示地图的Map Tips。 TipDelay:设置Map Tips的延迟时间。 TipStyle:设置Map Tips的显示样式。 SuppressResizeDrawing::当控件尺寸发生变化时阻止数据实时重绘。,2. MapControl控件接口,4)IMapControl4接口 IMapControl4接口在IMapControl3接口的基础上,增加了两个属性,分别是AutoKeyboardScrolling和AutoMouseWheel。 AutoKeyboardScrolling:确定键盘滚动轮是否起作用。 AutoMouseWheel:确定鼠标滚轮是否起作用。 5)IMapControlEvents2接口 IMapControlEvent2接口为事件接口,它定义了MapControl能够处理的全部事件,如OnMouseDown、OnMouseMove、OnKeyUp、OnBeforeScreenDraw、OnAfterDraw、OnExtentUpdated等。,3.数据加载,1)加载地图文档的方式有三种: 使用IMapControl接口的LoadMxFile方法加载; 通过IMapDocument接口加载; 使用ArcGIS Engine中封装好的类库资源ControlsOpenDocCommandClass加载。,3.数据加载,使用IMapControl接口的LoadMxFile方法加载地图文档 实现思路如下: 通过.NET框架类提供的打开文件对话框选择要打开的地图文档; 用IMapControl接口提供的CheckMxFile方法检查是否为有效的地图文档,若有效,则调用IMapControl接口提供的LoadMxFile方法进行加载。,核心代码,3.数据加载,通过IMapDocument接口加载 IMapDocument接口定义了操作和管理地图文档对象的方法和属性。使用这个对象可以获取、更新一个文档的内容,设置文档文件的属性以及读、写和保存一个文档文件等。IMapDocument接口同时扮演着数据显示和数据容器的双重身份,可以通过ActiveView获得Map数据视图,通过FocusMap属性获得当前正在使用的Map对象的数据容器身份。一个文档对象可能拥有多个Map对象(相当于ArcGIS中的数据框Data Frame),但是在同一时刻内只能有一份Map处于使用状态。,核心代码,3.数据加载,使用ControlsOpenDocCommandClass加载地图 使用ArcGIS Engine中封装好的类库资源ControlsOpenDocCommandClass实现地图文档的加载的核心代码如下:,3.数据加载,2)加载ShapeFile数据 ShapeFile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式。加载ShapeFile数据的方式有两种: 通过工作空间加载; 通过IMapControl接口的AddShapeFile方法加载。,3.数据加载,通过工作空间加载ShapeFile文件 通过工作空间加载ShapeFile文件主要用到IMap、ILayer、IFeatureLayer和IFeatureClass四个接口。 IMap接口是对地图进行操作的起点,主要用于管理Map对象中的图层对象,要素选择集和空间参考等对象。 ILayer接口是图层对象的通用接口,它提供了操作图层的属性和方法,可用于所有的图层,例如要素图层(FeatureLayer)、栅格图层(RasterLayer)和图形图层集合(CompositeGraphicsLayer)等。 IFeatureLayer接口继承自ILayer接口,提供了访问基于矢量数据图层的属性和方法,图层的数据可以是Geodatabase,ShapeFile或Coverage数据。 IFeatureClass接口是获取和设置要素类属性的主要接口。如:获取要素类的类型,得到满足某个查询条件的要素个数,或在要素类中创建一个新的功能等。,Map、Layer、FeatureLayer三者之间的关系:Map是很多图层的集合,就像ArcMap的mxd文档一样,可以包括很多Layer。Layer是图层对象,是数据的外壳,必须建立在数据的基础上才有意义。FeatureLayer是具体的要素图层,需要经过Layer添加到Map中进行显示。 FeatureLayer、FeatureClass的区别: FeaturLayer是加载在地图文档中的矢量数据层,只是要素类的表现形式。FeatureClass是一组空间实体的集合,在数据表中存储了统一的属性和行为,每一个FeatureClass都有一个Geometry类型。 IFeatureLayer接口继承自ILayer接口,IFeatureClass接口继承自IClass接口; FeatureLayer可以创建自己的对象,而FeatureClass不行。,3.数据加载,通过工作空间加载ShapeFile文件的实现思路 (1)创建ShapefileWorkspaceFactory实例pWorkspaceFactory,使用IWorkspaceFactory接口的OpenFromFile方法打开pFeatureWorkspace中存储的基于ShapeFile的工作区; (2)创建FeatureLayer的实例pFeatureLayer,并定义数据集; (3)使用IMap接口的AddLayer方法加载pFeatureLayer到当前地图。,核心代码,3.数据加载,通过MapControl的AddShapeFile方法加载ShapeFile文件 用MapControl控件的AddShapeFile方法同样可加载ShapeFile文件,这样省去了建立工作空间、数据集等步骤。调用该方法需要传入两个参数,分别是文件路径和不带扩展名的文件名,调用方法如下: mainMapControl.AddShapeFile(string Path,string fileName);,3.数据加载,3)加载栅格数据 栅格数据是GIS的数据源之一,主要有卫星影像、航空影像、扫描的地图、照片等。常见的栅格数据格式有*.bmp、*.tif和*.jpg等,这几种栅格数据的工作空间是其所在的文件夹。添加栅格数据主要用到IRasterPyramid3、IRasterLayer等接口。 IRasterPyramid3接口提供了对栅格数据集的金字塔属性的访问,Present属性用于判断栅格数据集是否存在金字塔,Create方法用于为栅格数据集创建金字塔。 IRasterLayer接口继承自ILayer接口,CreateFromDataset方法用于从已有的栅格数据集对象创建图层;CreateFromRaster方法用于从已有的栅格对象创建图层;Raster属性用于获取IRasterLayer接口中的Raster对象,DisplayResolutionFactor属性用于设置栅格数据的分辨率。 在加载栅格文件时,需引用ESRI.ArcGIS.DataSourcesRaster命名空间。,3.数据加载,加载栅格数据的实现思路 (1)用IWorkspaceFactory接口的OpenFromFile方法获得栅格文件的工作区; (2)用IRasterWorkspace接口的OpenRasterDataset方法获得栅格文件的数据集,实例化栅格文件对象,并对栅格数据集是否具有金字塔进行判断(这里栅格文件如果不具有金字塔则创建金字塔,可以提高大数据量图像的显示效率); (3)创建RasterLayer类的实例pRasterLayer,并定义其数据集; (4)使用MapControl控件的AddLayer方法将pRasterLayer添加至当前地图。,核心代码,3.数据加载,4)加载CAD数据 对于ArcGIS Engine来说,有两种不同的方式使用CAD数据: 作为要素图层,以矢量数据来使用; 作为栅格图像,作为地图背景使用。 对于前者,ArcGIS Engine使用与FeatureLayer一样的方法来管理,对于后者则采用CadLayer对象来管理。,3.数据加载,4)加载CAD数据 CAD文件作为矢量图层加载 CAD作为矢量加载时有两种模式:分图层加载和整幅图加载。 分图层加载实现思路: CAD图可以分为点、线、面、标注分别加载到MapControl中。与加载其它数据一样,首先定义一个工作空间,用CadWorkspaceFactoryClass实例化工作空间,并打开相应的工作空间; 然后创建FeatureLayer的实例,定义数据集,使用IMap接口的AddLayer方法将要素图层添加至当前地图。 整幅图加载实现思路: 将CAD作为整幅图加载时,在得到相应的工作空间之后对CAD文件中的要素进行遍历,并判断是否为注记图层,如果是注记则需使用CadAnnotationLayer对象。,3.数据加载,4)加载CAD数据 CAD文件作为栅格图层加载 很多情况下CAD数据仅仅用作背景显示而不参与矢量分析,这时候可以将CAD文件以栅格图层的方式加载,这时需使用ICadLayer和ICadDrawingDataset两个接口。 ICadLayer接口主要提供了对CAD文件属性信息的访问,如:图名(Name)、可见性(Visible)等。 ICadDrawingDataset接口提供了对CAD数据集成员的访问,可以通过ICadLayer接口的CadDrawingDataset属性获取CAD的数据集。 实现思路如下: 首先用IWorkspaceFactory接口的OpenFromFile方法获得CAD文件的工作区; 用ICadDrawingWorkspace接口的OpenCadDrawingDataset方法获得CAD文件的数据集,并将其赋值给CadLayerClass类的实例对象pCadLayer的CadDrawingDataset属性; 使用IMap接口的AddLayer方法将pCadLayer添加至当前地图。,3.数据加载,5)加载Personal Geodatabase数据 加载个人数据库用到的接口有IFeatureDataset和IEnumDataset。 IFeatureDataset接口继承自IDataset接口,在其基础上增加一个创建要素类的功能CreateFeatureClass。 IEnumDataset接口用于访问个人数据库中的所有数据集成员,有Reset和Next两个方法。Reset方法重置数据集序列,使指针位于第一个数据集之前。Next方法获取枚举序列的下一个数据集。 实例程序实现思路如下: 创建AccessWorkspaceFactory类的实例; 用IWorkspaceFactory接口的OpenFromFile方法打开*.mdb数据集的工作空间,对工作空间里面的数据进行加载。,核心代码,3.数据加载,6)加载File GeoDatabase数据 文件地理数据库是以文件夹形式存储各种类型的GIS数据集,可以存储、查询和管理空间数据和非空间数据,支持的地理数据库的大小最大为1TB,在不使用DBMS的情况下能够扩展并存储大量数据,是继个人数据库之后Esri推出的新的数据管理系统。文件地理数据库支持单用户编辑,不支持版本管理。 实现思路如下: 由于文件地理数据库是以文件夹的形式存在的,可以使用FolderBrowserDialog选择文件夹进行加载。 首先创建FileGDBWorkspaceFactoryClass类的实例; 用IWorkspaceFactory接口的OpenFromFile方法打开文件地理数据库的工作空间,对工作空间里面的数据进行加载。,核心代码,3.数据加载,7)加载ArcSDE空间数据库数据 ArcSDE(Spatial Database Engine,空间数据库引擎)是在现有的关系型数据库上进行的空间扩展,它使空间数据能保存在关系数据库中(如Oracle、SQL Server等)。ArcSDE空间数据库的一个重要特点是支持多用户并发操作,并且可以通过版本来表现空间数据编辑的状态。当完成数据编辑后,可将多人的编辑状态进行版本合并,若多个用户对同一个要素进行了编辑,且编辑状态不一样,将出现“版本冲突”,提示用户采用哪一个版本的数据。对于版本的最后的确定, SDE数据库的加载主要用到IPropertySet接口。属性集合(PropertySet)对象是一个专门用于设置属性的对象,它是一种“名称-值”对应的集合,类似于哈希表或字典。将取决于用户对数据管理的权限。,3.数据加载,7)加载ArcSDE空间数据库数据 实现思路如下: 创建SdeWorkspaceFactoryClass类的实例; 通过SDE连接的连接属性打开SDE数据库的工作空间,对工作空间里面的数据进行加载;,3.数据加载,8)加载文本文件数据 野外测量的数据是GIS数据的一个主要来源,如GPS、全站仪等仪器测量的数据等。这些数据通常为含有X、Y字段的Excel文件或者文本文件。 实现思路如下: 首先根据Excel或者*.txt文件等获取点的坐标信息; 创建一个点结构,进行点信息的存储。 创建并实例化一个CPoint类型的数组对所有的点信息进行存储。 然后根据点的坐标创建ShapeFile图层; 创建表的工作空间,通过IFields、IFieldsEdit、IField等接口创建属性字段,添加到要素集中; 根据获得的点坐标信息为属性字段赋值,进而得到图层的要素集。 最后加载该ShapeFile图层;,3.数据加载,根据上述ArcGIS Engine加载几种常用的数据源的方法,可以看出ArcGIS Engine加载空间数据一般具有如下五个步骤: 创建数据对应的工作空间工厂(WorkspaceFactory); 使用WorkspaceFactory创建要加载数据的工作空间(Workspace); 使用Workspace打开并得到图层的数据集DataSet; 将DataSet赋值给新建图层的数据源; 添加图层到MapControl中进行显示。,4. 地图文档保存,实例实现思路如下: (1)地图文档的保存主要使用IMapDocument接口。首先使用IMxdContents接口读取已打开地图文档的内容,并使之替换IMapDocument接口的实例对象; (2)保存时使用IMapDocument接口的Save方法,函数原型为:public void Save (bool bUseRelativePaths , bool bCreateThumnbail)。,核心代码,5. 地图浏览,数据加载到MapControl中以后,便可以对地图进行浏览和操作,如: 放大与缩小 拉框放大与缩小 漫游 全图显示 历史视图切换,5. 地图浏览,1) 放大与缩小 无论是放大还是缩小,都是通过改变MapControl中当前视图的范围即Extent属性来实现的,主要用到Envelope(包络线)类。 Envelope是一个矩形区域,它是一个几何形体的最小包络边框,每一个Geometry对象都拥有一个包络线对象。 IEnvelope接口是包络线对象的接口。IEnvelope接口的Expand方法用于缩放包络线的范围,进而产生一个新的包络线对象,从而实现放大与缩小。,5. 地图浏览,1) 放大与缩小 实现思路如下: 中心放大是以当前视图的中心点为缩放中心对地图进行放大。在放大的操作中,先记下MapControl当前的Extent; 然后把该范围缩小; 最后设置MapControl的Extent属性为缩小后的范围,由于MapControl本身的尺寸没有变化,这样就产生了放大效果;,5. 地图浏览,2)拉框放大与缩小 拉框放大、缩小需要用到TrackRectangle方法。该方法在MapControl的OnMouseDown事件中触发,会在MapControl上生成一个由用户鼠标轨迹定义的矩形橡皮筋。该方法返回一个IPolygon接口的几何对象。方法执行过程中,MapControl的OnMouseMove事件被触发,这时还没有发生MapControl的OnMouseUp事件。所以追踪时按下Esc键可以取消TrackRectangle的操作。,拉框放大 实现思路如下: 使用Envelope获取鼠标拖出的矩形橡皮筋范围并赋值给当前视图。若矩形范围为空则返回。 拉框缩小 拉框缩小是拉框放大的对应操作,它是把全屏区域缩小到鼠标拖出的方块区域中。,5. 地图浏览,2)拉框放大与缩小,拉框放大,拉框缩小,5. 地图浏览,3)漫游 漫游又称为移动,一般直接调用MapControl的Pan()方法来实现。在MapControl的OnMouseDown事件中,添加如下代码即可实现地图的移动。 mainMapControl.Pan(); 4)全图显示 全图显示就是把地理数据集中所有的要素显示在视图范围内,并且当前视图恰好把所有的地理要素囊括进来。全图显示可直接调用MapControl的FullExtent函数: mainMapControl.Extent = mainMapControl.FullExtent;,2019/8/25,34,可编辑,5. 地图浏览,5)历史视图切换 实现该功能需要用到IExtentStack接口,即堆扩展接口。该接口提供了访问控制范围内堆栈成员的方法。,IExtentStack接口的方法,实现思路如下: 新建一个ExtentStack对象来存储历史视图,并赋予视图窗口中的视图堆; 判断是否能回到前一视图或后一试图,如果能,则视图窗口中视图返回到上一视图和下一视图。,前一视图代码,后一视图代码,6. 书签,ArcGIS中的书签是保存特定视图范围的快捷方式。使用书签保存关注的视图范围,可在需要时快速定位、查看与浏览。书签功能主要用到IMapBookmarks、ISpatialBookmark和IAOIBookmark三个接口。 IMapBookmarks接口 通过IMapBookmarks接口的Bookmarks属性可得到地图文档中已经存在的所有书签对象,通过该接口的AddBookmark和RemoveBookmark方法可以对书签进行添加和删除。 ISpatialBookmark接口 ISpatialBookmark接口定义所有空间书签的共同功能,特别是书签的Name属性和ZoomTo方法,Name属性定义了书签的名字,通过ZoomTo方法可跳转到书签位置点。 IAOIBookmark接口 IAOIBookmark接口继承自ISpatialBookmark接口,新增了Location属性,用于存储地图中感兴趣的范围。,6. 书签,添加书签 实现思路如下: 通过IAOIBookmark接口创建书签,设置其实例化对象的位置属性为当前窗口的范围; 然后通过IMapBookmarks接口访问当前地图书签集,添加书签到地图的书签集中。,6. 书签,书签管理 书签的管理包含书签的快速定位、书签的删除。 实现思路如下: 新建一个Dictionary对象,键、值类型为string、ISpatialBookmark,分别存储地图中的书签名字和其对应的空间书签; 管理书签窗口打开时,对地图中书签进行遍历并把书签名添加到目录树中; 当选中某个书签时,根据书签名获取对应的空间书签,以进行书签的定位和删除。,7. ICommand和ITool命令操作地图,在ArcGIS Engine中,一些工具对象是从ICommand继承来的,Esri已经封装好供直接调用,如ControlsMapZoomOutTool、ControlsMapZoomPanTool等,,ICommand接口对照表,同ICommand接口类似,ArcGIS Engine也有很多对象继承了ITool接口,如ControlsMapPanTool、ControlsNewCircleTool等,,ITool接口对照表,8. 量测,空间量测是测量空间坐标框架下的线的长度、多边形的面积等。如果要获取地理实体的长度或者面积,首先需要获取该地理实体,然后通过shape字段得到其Geometry,从而获取长度和面积等。 这里讲的量测是通过鼠标的追踪画线、面得到长度和面积等。 在进行量测时,测量结果窗口会对实时测量的结果进行显示。声明一个测量结果窗口关闭的委托事件。核心代码如下:,结束量算功能和清空用于量算的线或面的实例化对象,8. 量测,状态栏坐标显示 一般情况下,如同ArcGIS Desktop软件,需要在状态栏显示鼠标的位置。可在状态栏添加一个toolStripStatusLabel控件并设置其Name属性为barCoorTxt,用来显示鼠标所在地图点上的当前坐标。 在数据视图的OnMouseMove事件触发时读取地图的单位,并在状态栏显示鼠标在数据视图中的当前地图点坐标。,地图单位对应中文表,8. 量测,距离量测 距离测量时,片段长度通过两点间距离计算得到,全部长度通过片段长度的和计算得到。主要用到INewLineFeedback和IScreenDisplay两个接口。,INewLineFeedback接口的方法,IScreenDisplay接口 MapControl中的每个视图都有一个ScreenDisplay对象,用于控制视图中的图形绘制。 ScreenDisplay对象除了管理窗体屏幕的显示属性外,也管理缓存和视图屏幕的变化等。可以通过IActiveView接口的ScreenDisplay属性获取ScreenDisplay对象。通过ScreenDisplay对象的DisplayTransformation属性进行设备单位和地图单位的转换。,8. 量测,距离量测 实现思路如下: 鼠标点击时,首先判断INewLineFeedback接口的实例化对象pNewLineFeedback是否为空,如为空,则实例化,并设当前鼠标点为pNewLineFeedback的起始点;反之,则把当前鼠标点添加到pNewLineFeedback中。 鼠标进行移动时,实时计算鼠标移动点与上一鼠标点击点的距离,以及所画线的总长度。 鼠标进行双击时,停止pNewLineFeedback的绘制,并清空pNewLineFeedback对象。,距离量测实例代码,8. 量测,面积量测 面积测量通过INewPolygonFeedback接口来绘制多边形来实现。使用NewPolygonFeedback和使用NewLineFeedback的方法类似,但其显示和返回的几何特征是一个封闭的多边形。这意味着画多边形停止时,起点将成为终点,从而结束形状的绘制。该方法至少要有三个点被添加到几何对象中。 实现思路如下: 鼠标点击时,首先判断INewPolygonFeedback接口的实例化对象pNewPolygonFeedback是否为空,如为空,则实例化,并设当前鼠标点为pNewPolygonFeedback的起始点;反之,则把当前鼠标点添加到pNewPolygonFeedback中。 鼠标进行移动时,判断绘制多边形时点集中点的个数pPointCol是否超过3个,如若超过3个,则由点集构建IPolygon接口、IArea接口,进而计算出面的总长度和面积。 鼠标进行双击时,停止pNewPolygonFeedback的绘制,并清空pNewPolygonFeedback对象。,面积量测实例代码,9. 要素选择操作,要素选择可快速拾取地理要素,并进行要素的相关操作,如:缩放至选择、属性信息等。这里主要讲解以下三个功能: 要素选择 缩放至选择 清除选择,9. 要素选择操作,要素选择 以矩形框或者点选的方式对地图中的要素进行选择,用到IMap接口的SelectByShape方法,该方法可以查询到与输入的形状相交的图层中的所有IFeatureLayer接口类型的Features,但有一个前提是该FeatureLayer图层的Selectable属性为true。 实现思路如下: 使用MapControl的TrackRectangle方法绘制矩形框,当矩形框为空时,则将鼠标当前点击点向外扩展为矩形框作为选择区域; 然后使用IMap接口的SelectByShape方法进行要素的选择;,核心代码,9. 要素选择操作,缩放至选择 实现思路如下: 遍历地图中选中的要素; 使用IEnvelop接口的的Union方法获取所有选中要素的外包框范围,使地图视图缩放至该范围;,调用ArcEngine的类库资源ControlsZoomToSelectedCommand进行实现,9. 要素选择操作,清除选择,10. 地图导出,地图导出是将地图保存为图片,方便快速查看浏览。地图导出分为全域导出和区域导出两种。,10. 地图导出,区域导出,全域导出,11. 视图同步,在一个GIS系统中,一般具有鹰眼窗口、数据视图和布局视图等几个视图,这几个视图往往表示同一个地理数据集,因此需要使这几个视图中的地理范围保持同步。,11. 视图同步,1)鹰眼窗口 鹰眼是GIS软件的必备功能之一。它也是一个MapControl控件,其主要功能是表示数据视图中的地理范围在全图中的位置。 完成鹰眼功能分以下三个步骤: (1)鹰眼中数据与数据视图中的数据一致,且鹰眼视图中地图始终显示为全图。 当数据视图加载地图数据时,同时也把数据加载到鹰眼控件中,考虑到鹰眼中只添加个别全局性的图层,这里对地图数据中的线和面进行过滤逐一添加到鹰眼中(大多数情况下,只需要添加个别图层即可)。当地图以*.mxd的形式添加时触发数据视图中的OnMapRelaced事件。 当地图以单个图层的形式逐个添加时,OnMapRelaced事件并不会被触发,对该种情况这里封装成一个专门的方法SynchronizeEagleEye,在数据加载完后调用此方法即可实现鹰眼视图与数据视图的同步。 在进行地图的视图操作时,经常需要刷新地图以使操作的改变显示出来。有的时候需要全部刷新,这时候用到pActiveView.Refresh(),更多时候是局部刷新使用PartialRefresh(),以减少闪烁。,11. 视图同步,(2)鹰眼中添加矩形框实现与数据视图的范围联动 当数据视图的显示范围发生变化时,会触发OnExtentUpdata事件,在该事件中绘制鹰眼视图中的方框。获取数据视图中的地图显示范围作为矩形框范围,添加到鹰眼视图中。 核心代码如下: /得到当前视图范围 IEnvelope pEnvelope = (IEnvelope)e.newEnvelope; DrawRectangle(pEnvelope);,11. 视图同步,(3)矩形框的拖动与绘制 实现思路如下: 在鹰眼中进行操作时,若是鼠标左键按下,判断鼠标点击点是否在矩形框范围之内。若在,则可以进行矩形框的拖动;若不在,则使数据视图以当前点击点为中心进行显示; 当鼠标右键按下时,可以进行矩形框的绘制,使数据视图的地图显示为矩形框范围。,11. 视图同步,2)数据视图与布局视图的同步 数据视图与布局视图的同步,首先要保证数据的一致性,其次是数据显示范围的一致性。该同步主要涉及到IMapControl接口的OnMapReplaced事件和OnAfterScreenDraw事件。 OnMapReplaced事件发生在MapControl的地图被替换后,即在IMapControl接口的Map被另一个地图替换时(如IMapControl接口的LoadMxFile方法被调用时或Map属性被明确替换)触发该事件。 OnAfterScreenDraw事件发生在MapControl内的地图完成绘制之后,即在IDisplayEvents接口的DisplayFinished事件之后被触发,而IDisplayEvents接口的DisplayFinished事件则在地图显示于屏幕时被触发。 实现思路如下: 当数据视图的范围发生变化时,获得此时数据视图的范围; 传到布局视图控件的视图中,同时使用数据拷贝的方法保证数据的一致性。,11. 视图同步,2)数据视图与布局视图的同步 当数据视图控件加载的地理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论