版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章地图的显示范围操作——放大、缩小、漫游、全图、缩略图显示一、实验目的了解基于组件GIS的地图显示,重点掌握通过编写代码的方式实现图层的放大、缩小、漫游、全图和缩略图显示。二、实验准备完成时间:2学时准备数据:green.shp、landuse.shp三、基本知识:在GIS中,通常需要改变地图的显示范围(移动当前显示范围、放大、缩小、漫游、全图、缩略图显示),以便更好的查看地理对象和信息。地图控件的控制坐标(屏幕坐标)与地图坐标(地理坐标)的区别:控件坐标系:指在编程环境下,各种或视控件所使用的坐标系统,在VisualBasic窗体中左上角为原点,水平方向为X轴,竖直方向为Y轴。地图坐标系:地图及图层数据所使用的坐标系统,有地理坐标(经纬度)和投影坐标。地图控件的控制坐标(屏幕坐标)在左上角某一位置(0,0),而地图坐标原点通常都有一个在地图控件区域很远以外的原点(0,0),地图控件当前的范围只是地图表面的一个小窗口;控件坐标Y轴向下递增,而地图坐标Y轴向上递增;控件坐标以twips(缇)为单位,并与计算机屏幕显示的实际尺寸有关,而地图坐标则用米、英尺等单位表示,且与地表特征的测量有关:1Twip=1/20Point=1/1440Inch=1/567cm地图显示范围指显示区域的坐标范围,用矩形rectangle定义。在Map控件上显示的地图范围可以通过Map控件的Extent属性来得到和设置。Map控件的“Extent”属性返回rectangle对象,反映在Map控件中显示的地图范围,由Top(左上角y坐标)、Left(左上角x坐标)、Bottom(右下角y坐标)和Right(右下角x坐标)四个坐标值组成。通过“Extent”设置地图的显示范围,有如下几种方法:通过坐标赋值设置地图范围WithMap1.Extent.Left=20000.Bottom=45000.Right=32000.Top=57000EndWith'With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称.例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句来给同一个对象的几个属性赋值,这时候只是引用对象一次而不是在每个属性赋值时都要引用它,设置为图层的最大范围:SetMap1.Extent=Map1.FullExtent对目前的范围乘以一个比例因子,改变范围的大小:SetMap1.Extent=Map1.Extent.ScaleRectangle(n)通过地图交互改变显示范围的位置(地图漫游):SetMap1.Extent=Map1.Pan使地图的中心点定位在某一位置SetMap1.Extent=Map1.CenterAt(55000,65000)四、实验步骤及方法1.地图的放大、缩小和全图显示设置点击工具条上放大、缩小和全图显示的按钮后,设置鼠标的形态利用工具方式进行地图操作包括两个事件,第一个事件是工具栏上的按钮点击事件;第二个事件是Map控件上的操作事件(MouseDown事件)。对第一个事件的响应通常是改变鼠标指针的形状,同时记录按钮的功能。鼠标指针类型:可从C:\WINDOWS\Cursors查看鼠标指针类型代码描述moDefault0Defaultcursor.moArrow1Arrow.moCross2Crosshair.moIbeam3Ibeam.moIconPointer4Icon.(AvailableonWindowsNTonly)moSizePointer5Size.moSizeNESW6SizeNE,SW.moSizeNS7SizeN,S.moSizeNWSE8SizeNW,SE.moSizeWE9SizeW,E.moUpArrow10Uparrow.moHourglass11Hourglass.moNoDrop12Nodrop.moArrowHourglass13Arrowandhourglass.moArrowQuestion14Arrowandquestionmark.moSizeAll15Sizeinalldirections.moZoom50ZoommoZoomIn51ZoominmoZoomOut52ZoomoutmoPan53PanmoPanning54PanningmoIdentify55IdentifymoLabel56LabelmoHotLink57HotLinkmoPencil58Pencil【例】设置改变鼠标的形态,示例程序如下:PrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)'ByVal传递值参数,MSComctlLib是一个类型库,当引用了WindowsCommonControl部件时,会自动导入DimcurrenttoolAsIntegerSelectCaseButton.IndexCase1Map1.MousePointer=moArrow'设置鼠标的形态为箭头currenttool=1'记录按钮的功能,建立与后续程序的联系Case2Map1.MousePointer=moZoomIn'设置鼠标的形态为放大镜currenttool=2Case3Map1.MousePointer=moZoomOut'设置鼠标的形态为缩小镜currenttool=3Case4Map1.MousePointer=moPan'设置鼠标的形态为手形漫游currenttool=4…………EndSelectEndSub对第二个事件的响应是根据点击按钮的功能(为了获得点击按钮的功能,需要在声明段中定义一个模块级变量),分别执行相应的代码,实现放大、缩小和全图显示功能:地图的放大、缩小和全图显示实际上是改变地图的显示范围。地图比例尺是Map控件的屏幕范围(长度或高度)与实际范围(长度或高度)的比值。在VB中,窗体的缺省单位是twips,是1英寸的1/1440。通过Map控件的Width和height属性可得到Map控件的宽度和高度(屏幕范围,单位是twips),通过换算并与地图实际的宽度或高度比较即可得到地图比例尺(利用宽度或高度结果一致)。在同一Map控件中,显示范围越大,则比例尺越小;反之,比例尺越大。即:地图放大是通过缩小地图范围;地图缩小是通过扩大地图范围。如是放大事件,则利用Map控件的TrackRectangle返回用户在地图上定义的Rectangle,并作为放大后地图的范围;如是缩小事件,则根据定义的Rectangle大小确定比例,即地图控件高度(或宽度)与用户定义的Rectangle高度(或宽度)之比,Rectangle越小,缩小的比例越大;定义地图范围的Rectangle对象可以利用ScaleRectangle(ScaleFactor比例因子)方法来改变,如比例因子为2,则Rectangle的高度和宽度都乘以2,地图缩小1倍。如地图放大1倍,则比例因子为0.5。语法:Map1.Extent=Map1.TrackRectangleMap1.Extent.ScaleRectangle(n)(n为比例因子)利用Map控件的TrackRectangle返回用户在地图上定义的Rectangle;漫游功能,则利用Map控件的Pan方法。【例】放大、缩小和全图显示,示例程序如下:PrivateSubMap1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)'触发事件为鼠标点击地图控件任意区域legend1.setMapSourceMap1'建立地图和图例之间的联系legend1.LoadLegendTrue'实现工具条按钮的相应功能DimrectAsMapObjects2.RectangleDimLastExtentAsMapObjects2.RectangleDimInputRecsWidthAsLong'放大Ifcurrenttool=1ThenSetMap1.Extent=Map1.TrackRectangle'通过跟踪用户输入的矩形显示范围,完成“框选放大”功能Setrect=Map1.Extentrect.ScaleRectangle(0.25)'通过设置比例因子,完成“点击放大”功能Map1.Extent=rect'缩小ElseIfcurrenttool=2ThenSetrect=Map1.ExtentInputRecsWidth=Map1.TrackRectangle.Width'跟踪用户输入的矩形显示范围并获取其宽度SetLastExtent=Map1.ExtentIf(InputRecsWidth>0)Thenrect.ScaleRectangleMap1.Extent.Width/InputRecsWidth'对MouseDown事件过程,点击Map控件所返回的矩形其高度和宽度均为0Map1.Extent.Width/MapWidth的分母为0,程序将出错。为了避免出错,对MapWidth是否为0进行判断(IfMapWidth<>0),如不为0,则执行相应缩小地图的代码;Elserect.ScaleRectangle1.5'当MapWidth=0,即用户当前操作为“点击”,则通过设置比例因子,完成“点击缩小”功能EndIfSetMap1.Extent=rect'全图漫游ElseIfcurrenttool=3ThenMap1.Pan'全图显示功能ElseIfcurrenttool=4ThenSetMap1.Extent=Map1.FullExtent'全图显示功能2.缩略图(导航图)显示缩略图同样是一个用于显示地图的地图控件,与主图区之间联动,在加载大图时被同时加载(即缩略图和大图显示的是同一图层),但是缩略图主要用于:地图控件的微缩全图显示:它一般不移动,而是用红框显示大图当前显示范围在全图中的位置。当主图被放大、缩小或漫游时,能使用户了解和掌握当前大图显示范围在全图中的位置(图4.1或4.2)。在地图上绘制图形可通过Map对象的方法DrawShape。语法:object.DrawShape
(shape,
symbol)其中shape可以是几何图形(如Point、Points,
Line,
Rectangle,
Polygon、Ellipse)
,或是来源于Recordset对象。Symbol表示绘制时采用的符号或方式。注意:DrawShape函数只能在AfterLayerDraw、BeforeLayerDraw、AfterTrackingLayerDraw
、BeforeTrackingLayerDraw四个事件中调用。DrawShape绘图的基本过程:1)创建一个图形对象;2)在Symbol对象中定义绘图的方式;3)用DrawShape方法在地图上显示。【例】在地图控件添加一大一小地图控件,小地图控件为缩略图:Map1.Layers.AddmLayerMap2.Layers.AddmLayerlegend1.setMapSourceMap1'建立地图和图例之间的联系legend1.LoadLegendTrue'加载图例PrivateSubMap1_AfterLayerDraw(ByValIndexAsInteger,ByValcanceledAsBoolean,ByValhdcAsstdole.OLE_HANDLE)'鹰眼部分IfIndex=0Then'确定图层为第一层(最上层)Map2.TrackingLayer.RefreshTrue'触发Map2_AfterTrackingLayerDraw过程EndIfMap2.Layers.AddMap1.Layers.Item(0)Map2.RefreshEndSub'鹰眼缩略图红色矩形框部分PrivateSubMap2_AfterTrackingLayerDraw(ByValhdcAsstdole.OLE_HANDLE)IfMap1.Layers.Count<>0Then'map1中有加载的图层DimsymAsNewMapObjects2.Symbol'在Symbol对象中定义绘图的方式sym.OutlineColor=moRedsym.Size=2sym.Style=moTransparentFillMap2.DrawShape,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(陕) 079-2021 沥青延度仪校准规范
- 《高层分析》课件
- 杭电电子设计课件驱动电路设计
- 道路运输设备承揽合同三篇
- 主题教育活动的创新设计计划
- WS-1纸张湿强剂相关行业投资规划报告范本
- PMMA再生料相关行业投资方案
- 幼儿园心理健康宣传计划
- 创造性思维下的新年目标计划
- 学校秋季环境美化活动计划
- 雍琦版-《法律逻辑学》课后习题答案(共78页)
- 咸水沽污水厂生物池清淤施工组织方案
- 二甘醇二苯甲酸酯(DEDB)
- 数字化变电站的IEC61850建模
- 管道闭水试验记录表自动计算软件
- 学校综合督导汇报ppt课件
- 人流咨询话术
- 铁路建设征地拆迁补偿标准(附表)
- 农村祠堂上梁说辞
- GB31644-2018食品安全国家标准复合调味料
- 建筑施工现场安全检查的程序及要点
评论
0/150
提交评论