ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:134.50KB ,
资源ID:3520268      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3520268.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MapObejcts组件应用设计(地图绘图输出).doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

MapObejcts组件应用设计(地图绘图输出).doc

1、地图绘图输出使用 Map 控件提供的属性和方法,学习本节前请先熟悉 Map 控件,重点掌握它的绘图属性和方法。2.8.1 坐标系1 Map 控件窗口坐标系Map 控件窗口使用直角坐标系,以控件窗口的左上角为原点,向右是 X 轴,向下是 Y 轴。坐标系默认的度量单位是缇(twip),缇是固定长度单位, 1 缇等于1/1440 英寸(inch)。Map 控件的鼠标事件函数使用这一坐标系。 在 VB 中,Form.ScaleMode 属性设置窗体的坐标度量单位,在 VB 6.0 版中,可以设置 7 种度量单位。ScaleMode 默认值指定窗体的度量单位是缇。窗体上的所有控件在默认情下使用 Form

2、.ScaleMode 属性指定的度量单位,因此 Map控件窗口的默认度量单位是缇。本书样例程序中使用的坐标长度单位是缇,本节中特别指定的程序例外。Map 控件窗口使用 Form 的坐标度量单位,因此可以用 Form.ScaleMode 设置Map 控件窗口的坐标度量单位,然而设置的度量单位对 Map 控件本身的函数和方法不起作用,如果不使用 Windows API 函数,不应更改 Form.ScaeMode 的默认值,以免引起错误。Map 控件窗口坐标系由开发语言的编译器定义,同一种语言编译器若来自不同的厂家,窗口坐标系可能有差异。不同的语言定义的窗口坐标系也有差异。2 Map 控件窗口数据坐

3、标系Map.CoordinateSystem 属性指定的坐标系,坐标系的定义方法与图层数据坐标系相同。在程序中若没有用语句给 Map.CoordinateSystem 赋值,则它的值是Nothing。此时 Map 控件窗口数据坐标系使用图层数据坐标系 。3 图层数据坐标系文件中的地图数据使用笛卡儿直角坐标系。坐标系及其坐标单位在投影元文件中描述。地图数据是点、线、面等图形要数的(X,Y) 坐标值。(1) 矢量地图数据的坐标单位若地图已经投影,则地图数据坐标使用长度单位,我国最常用的长度单位是米,小比例尺地图常用用千米。若地图未经投影,则地图数据坐标单位使用十进制度,X 坐标表示经度,Y 坐标表

4、示纬度。坐标(123.5,43.2)表示经度是 123.5 度、纬度是 43.2 度的一点。地图不进行投影,用地理坐标记录地图数据是地理信息系统中数据最优表示方案。我国国家基本比例尺地形图数据库采用这一方案。(2) 栅格地图数据的坐标单位用栅格像元在地面对应矩形的长和宽表示坐标单位,像元所在的列号为 X 坐标,行号为 Y 坐标。栅格数据坐标系与设备坐标系一致。多数情况下栅格像元是正方形,也可以是矩形。4 设备坐标系输出设备具有自己的坐标系,用行、列表示坐标,用像素(pixel)作为坐标度量单位。像素是输出设备在介质上能描绘的最小图形,无论是图象、图形还是文字,任何输出都转换成像素在设备上输出。

5、在打印机或绘图仪的说明书上常使用 dot,就是指像素,用每英寸点数 (dot per inch 也称 dpi )表示分辨率。设备上的点以像素(dot) 尺寸为度量单位,以点所在的列为 X 坐标,以点所在的行为 Y坐标。如此定义的坐标系称为设备坐标系,设备坐标系的原点在左上角,向右是 X 轴方向,向下是 Y 轴方向。不难看出,如果坐标长度单位用 Pixel, Map 控件坐标就是设备坐标系。因此设备坐标系是控件坐标系的一种特例。多数设备的像素是正方形,也有是长方形的。有些设备绘图的最小像素尺寸可以通过软件或硬件设置。打印机、绘图仪、显示器是常见的输出设备,可以根据说明书设置分辨率。有些设备的分辨

6、率是固定的,不能进行设置。设备坐标系在对设备直接编程控制时使用,在 Windows 操作系统下,可以调用设备驱动程序控制设备,设备驱动程序及 Windows API 函数使用设备坐标系。VB 的预定义对象实例 Printer 和 Screen 提供了 TwipsPerPixelX 与TwipsPerPixelY 属性,可用于像素与坐标单位之间的转换。5 绘图显示过程中的坐标变换Map1 窗口显示地图的坐标变换过程如下:If Map1.CoordinateSystem = Nothing将图层坐标数据变换成 Map1 窗口坐标系数据用 Map1 窗口坐标系数据绘图Else将图层坐标数据变换成 M

7、ap1 控件数据坐标系数据将 Map1 控件数据坐标系数据变换成 Map1 窗口坐标系数据用 Map1 窗口坐标系数据绘图End If用 Map1 窗口坐标系数据绘图经过两步完成:将窗口坐标系数据变换成设备坐标系数据用设备坐标系数据调用 Windows 的 API 函数绘图用打印机绘图的坐标变换过程也是如此。6 Map.Extent 属性及 Map 事件函数中使用的坐标系Map1.Extent 属性中的坐标数据使用地图数据坐标系。Map1.Extent 属性各分量名称注释Map1.Extent.Width Map1 窗口的宽度Map1.Extent.Height Map1 窗口的高度Map1.

8、Extent.Top Map1 窗口的顶部边线 Y 坐标Map1.Extent.Left Map1 窗口的左部边线 X 坐标Map1.Extent 属性的各分量Map1 事件函数中使用 Map 控件坐标系,如Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Map1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)等函数中的 X、Y 表示鼠标当前位置在 Map1 控件窗口坐标系下的坐标,坐标单位是

9、缇。参见 MapExtent 目录中的程序运行结果。例 1 计算 Map1 窗口中的一点在 4 种坐标系下的坐标(完整程序参见样例目录Coordinate)Map1.CoordinateSystem = Map1.Layers.Item(0).CoordinateSystem.GeoCoordSysPrivate Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)Dim DevX, DevY As SingleLabel1.Caption = “Map 控件窗口坐标系 X = “ &

10、 X & “ Y = “ & Y计算 Map 控件设备坐标系坐标:DevX = Form1.ScaleX(X, Form1.ScaleMode, vbPixels)DevY = Form1.ScaleY(Y, Form1.ScaleMode, vbPixels)Label2.Caption = “Map 控件设备坐标系 X = “ & DevX & “ Y = “ & DevY计算 Map 控件数据坐标系坐标:Dim aPoint As New MapObjects2.PointDim TwipsX, TwipsY As LongIf Form1.ScaleMode vbTwips ThenT

11、wipsX = ScaleX(X, Form1.ScaleMode, vbTwips)TwipsY = ScaleY(Y, Form1.ScaleMode, vbTwips)ElseTwipsX = XTwipsY = YEnd IfSet aPoint = Map1.ToMapPoint(TwipsX, TwipsY)Label3.Caption = “Map 控件数据坐标系 X = “ & aPoint.X & “ Y = “ & aPoint.Y计算 Map1 图层坐标系坐标:Dim thePrj As MapObjects2.ProjCoordSysDim bPoint As MapO

12、bjects2.PointSet thePrj = Map1.Layers.Item(0).CoordinateSystemSet bPoint = thePrj.Transform(Map1.CoordinateSystem, aPoint)Label4.Caption = “Map 控件图层坐标系 X = “ & bPoint.X & “ Y = “ & bPoint.YEnd Sub习题1 运行例题 1 程序,观察 Map1 窗口中点的坐标值变化规律,总结出 4 种坐标系的定义。2 交互式改变 Map1.CoordinateSystem 及 Form1. ScaleMode 的值,设计程

13、序实现例题 1 的功能。2.8.2 Map 控件的绘图属性和方法1 hWnd 属性hWnd As OLE_HANDLE OLE_HANDLE 是 long 数据类型的别名 , 因此 hWnd 的数据类型是 long 型。Windows 操作系统在屏幕上绘图时,并不需要使用屏幕整个显示区域,而只向屏幕的一个矩形区域发送数据,这种区域称为窗口。桌面上运行的每一个应用程序都有一个窗口,Windows 操作系统为了管理窗口,给每个窗口赋予一个唯一编号,称为窗口句柄(Handle)。对窗口进行操作时使用窗口句柄。在Windows 许多 API(Application Programming Interf

14、ace,应用程序编程接口)函数中,经常使用窗口句柄,且用专用的名称 hWnd 表示,在其它场合,也常用 hWnd 表示窗口句柄, hWnd 已经成了窗口句柄的专用名称。 API 提供了丰富的窗口操作函数,利用 Map.hWnd 属性可以增加地图窗口的显示内容,扩充Map 控件的功能。在 Visaul Basic 的 Objects Browser(对象浏览器)中,定位到 Map.hWd 按 F1 键可以看到样例程序。2 输出图像或图形文件在 Map 控件中绘制的地图可以形成栅格结构图像或矢量结构图形保存到文件中,也可保存到剪贴板中,供其它软件使用。有四个方法实现这项功能。ExportMap、E

15、xportMap1、ExportMap2 三个方法作用相同。(1) Sub ExportMap(exportType As ExportMapConstants, outputFile As String, scaleFactor As Double)将 Map1 窗口中可见范围的地图输出到 BMP 或 EMF 格式的文件中,也可保存在剪贴板中。输出数据格式和数据存放位置由 exportType 参数指定,含义如下表。exportType 值 数据格式 存放位置moExportEMF 0 EMF 文件中moExportBMP 1 BMP 文件中moExportClipboardEMF 2 EM

16、F 剪贴板moExportClipboardBMP 3 BMP 剪贴板exportType 参数值表outputFile 参数指定输出文件名称。scaleFactor 参数指定像元个数放大系数,X,Y 两个方向使用同一系数。例如,Map1 窗口中每行有 110 个像元,scaleFactor 的值是 3,则输出的图像每行有330 个像元。(2) Sub ExportMap2(exportType As ExportMapConstants, outputFile As String, scaleFactor As Double, useSourceDepth)在 ExprotMap 的接口参数

17、中增加 useSourceDepth 参数形成 ExportMap2。当Map 控件窗口中含有影像图层时使用 ExportMap2 方法。useSourceDepth 参数是 Boolean 型,缺省值是 False,。指定在输出的图像中是否采用影像图层的调色板(Pallete) 。若 useSourceDepth 取值为 True,则输出影像采用原图像层的调色板,即目标影像与原影像的位层面数相同,影像色彩保真。(3) Sub ExportMap3(formatType As ExportMapConstants, formatData, scaleFactor As Double = 1,

18、scaleSymbology As ExportSymbologyScaleConstants = moLineSymbolsNotScaled, exportDepth As ExportDepthConstants = moExport8BitDepth, palette As ExportPaletteConstants = moDefaultPalette)这个方法在 ExportMap 的接口参数中增加三个参数,可为输出影像进行更多参数设置,含义如下:1) ExportSymbology 指定输出影像中的符号是否按 scaleFactor 因子进行比例拉伸,取值的含义如下表。Expo

19、rtSymbology 参数值 含义moNoSymbologyScaled 0 符号尺寸不变moLineSymbolsNotScaled 1线的宽度不变,符号的其它尺寸乘以scaleFactormoAllSymbologyScaled 2 符号尺寸乘以 scaleFactorExportSymbologyScaleConstants 枚举常量值表2) exportDepth 参数指定输出影像的位平面数,取值的含义如下表。exportDepth 参数值 输出影像的位平面数moExport8BitDepth 0 8 bit , palette 参数有效moExportSourceDepth 1 2

20、4 bit ,若 Map1 中有 24 bit 图像。否则 8 bitmoExport24BitDepth 2 24 bit ExportDepthConstants 枚举常量值表3) palette 当输出 8bit 位图时,指定输出位图的调色板,取值含义如下表所示。palette 参数值 输出位图采用的调色板moDefaultPalette 0 Windows 操作系统的缺省调色板moHalfTonePalette 1 与 Map1 最接近的半色调调色板moWebSafePalette 2 与 Map1 最接近的网络上用的调色板moGraysWithSystemColorsPalette

21、3 8 bit 颜色映射成灰度值调色板,ExportPaletteConstant 枚举常量值表(4) Sub ExportMapToJpeg(outputFile As String, percentQuality As Long = 85, isProgressive As Boolean = False, scaleFactor As Double = 1, scaleSymbology As ExportSymbologyScaleConstants = moLineSymbolsNotScaled)这个方法输出 JPEG 格式图像,有两个参数前文未加说明:1) percentQual

22、ity 取值 0 到 100 之间,指定输出图像的质量。值越大,质量越高,但图像文件也越大。2) isProgressive 指定输出的图像是否使用改进的 JPEG 格式。3 PrintMap 方法Sub PrintMap(docName As String, outputFile As String, landscapeOrientation As Boolean)将 Map1 窗口中的地图输出到打印机,也可存为一个打印文件。打印时自动将地图尺寸调整到打印纸的大小。1) docName 打印文档名称,可以任意命名,打印时在打印机的打印任务队列中可以看到您给的名字。2) outputFile

23、若将打印结果保存到文件中,可在此指定文件名, 否则用空字符串。3) landscape 指定地图在纸张上的打印方向。值为 True 表示纵向打印,否则横向打印。4 将地图复印到 hDC 标识的设备上。(1) Sub OutputMap(hDC As OLE_HANDLE)将地图窗口中显示的全部内容复印到 hDC 标识的设备上。hDC long 型参数(OLE_HANDLE 是 long 型的别称),用于指定输出设备。hDC是 Windows 操作系统 API 函数参数的专用名词之一,称为设备描述表句柄(Handle of device context),本质上是标识设备参数表及其驱动程序的编号

24、,Windows 操作系统中设备输入输出 API 函数用 hDC 作为参数。在 Visual Basic 中, Form 窗体、Picture 图片框,Printer 实例等有 hDC 属性。例 1 复制地图到控件 。将 Map1 窗口中的全部显示内容复印到图片控件Picture1 的窗口中 (参见 OutMap 目录中的 OutMap 程序窗口上的按钮 复制地图到控件 对应的代码)。Private Sub Command1_Click() 将 Map1 中的地图复印到 Picture1 控件窗口中Map1.OutputMap Picture1.hDCEnd SubOutputMap 方法也可

25、以将地图窗口中的内容硬拷贝输出到打印机。例 2 打印地图。 将 Map1 窗口中的地图输出到打印机。Private Sub Command4_Click() 打印地图Printer.Print 初始化打印机Map1.OutputMap Printer.hDC 打印地图Printer.EndDoc 结束打印End Sub (2) Sub OutputMap2(hDC As OLE_HANDLE, X As Long, Y As Long, Width As Long, Height As Long, DrawFlags)将地图窗口中显示的全部内容复印到 hDC 标识的设备上。X 设备坐标系下目标

26、设备绘图矩形区左上角的 X 坐标Y 设备坐标系下目标设备绘图矩形区左上角的 Y 坐标width 设备坐标系下目标设备绘图矩形区的宽度height 设备坐标系下目标设备绘图矩形区的高度drawFlags 一个数值型常数,指定如何绘图,含义如下表:drawFlags 的值 说明moNoBackground 1 不复印背景矩形边框moClipToExtent 2 只复印 Map1.Extent 以内的内容drawFlags 参数取值例 3 打印组合地图 。将 Map1 中的地图复印到打印纸右上四分之一区域及右下四分之一区域,组合成一张地图。Private Sub Command5_Click() 打

27、印组合地图Dim pixHeight As LongDim PixWidth As LongPrinter.Print 初始化打印页 将页面尺寸转换成像元数.pixHeight = Printer.ScaleHeight / Printer.TwipsPerPixelYPixWidth = Printer.ScaleWidth / Printer.TwipsPerPixelX 打印地图Map1.OutputMap2 Printer.hDC, PixWidth / 2, 0, PixWidth / 2, pixHeight / 2Map1.OutputMap2 Printer.hDC, PixW

28、idth / 2, pixHeight / 2, PixWidth / 2, pixHeight / 2Printer.EndDoc 打印文档结束,输出当前打印页,结束打印End SubOutputMap 与 OutputMap2 必需参数 hDC,如果不知道 hDC,但知道窗口的hWnd,可以用 API 函数获取 hDC。下段程序获得当前 FORM 窗体的 hDC:Private Declare Function GetDC Lib “user32“ (ByVal hWnd As Long) As Long API 函数Private Sub Command1_Click()Dim Geth

29、DC As LongGethDC = GetDC(Me.hWnd) 用 API 函数获取窗口的 hDCEnd Sub5 CopyMap 方法Sub CopyMap(scaleFactor As Double)将 Map1 窗口中地图复制到剪贴板上,用 EMF( enhanced metafile format,Windows 增强元文件格式)和 WMF(standard metafile format,Windows 标准元文件格式)格式表示。scaleFactor 地图输出缩放因子。样例参见 OutMap 目录中程序的 复制地图到剪贴板 命令按钮对应的代码。习题1 编写程序实现例 1、例 2

30、、例 3 的功能2 用 Map1.CopyMap 方法将地图复制到剪贴板,用你熟悉的图象处理软件提取剪贴板中的地图。2.8.3 地图绘图输出1 窗体和控件上的绘图输出Map 控件中的地图可以输出到窗体,也可以输出到控件。窗体和控件都是Windows 操作系统的窗口,Map 控件底层的函数绘图是在窗口上实现的,因此两者绘输出编程原理相同。Map.OutputMap 或 Map.OutputMap2 方法可以实现这两项功能。例 1 复制地图到另一个窗体。将 Form1 窗体上 Map1 中的地图复制到窗体ShowMap 上( 参见 OutMap2 目录中的程序)。1) 在命令按钮 复制地图到另一个

31、窗体 中显示 ShowMap 窗体Private Sub Command2_Click()ShowMap.ShowEnd Sub2) 在 ShowMap 窗体的 Paint 事件中复制地图Private Sub Form_Paint()Form1.Map1.OutputMap Me.hDCEnd Sub例 2 地图组合 。将 Map1 中的地图分别复制到 Picture1 图片框上的右半部上下两个区域( 见 OutMap2 目录中程序的 地图组合 命令按钮对应的代码)。Private Sub Command3_Click()With Me.Picture1Map1.OutputMap2 .hD

32、C, .ScaleWidth / 2, 0, .ScaleWidth / 2, .ScaleHeight / 2Map1.OutputMap2 .hDC, .ScaleWidth /2, .ScaleHeight /2, .ScaleWidth/2, .ScaleHeight /2End WithEnd SubMap1.OutputMap2 方法中的坐标参数使用设备坐标系,应将Me.Picture1.ScaleMode 属性值设置成 Pixel,这样,Picture1 的控件坐标系与设备坐标系一致。2 打印机绘图输出Map.PrintMap 或 Map.OutputMap 方法可将 Map 窗

33、口中的地图复印到打印机,输出图范围是整个地图窗口,并调整地图的输出比例尺,尽可能获得较大的输出地图。Map.PrintMap 方法一个语句就可以打印一页地图,不必使用打印机初始化及打印文档结束语句。Map.OutputMap2 方法可以指定输出地图的尺寸及其在纸张上的位置,可以输出组合地图。3 比例尺计算(1)比例尺的定义 若两地物在地面上的实际距离是 L,图面上的距离是 M,比值 BB = L/M则注记1:B称为地图的比例尺。(2) 计算 B 值在 MapObjects2 中,地图输出函数 Map1.OutputMap Map1.OutPutMap2 Map1.PrintMap Map1.C

34、opyMap 输出地图的范围是 Map1 窗口中显示的地图矩形区域,可用矩形区在地面上的尺寸和打印尺寸计算 B 值。1) 确定 L 的值 MappObjects2 中,若投影元数据完整, Map1.Extent 中的数据记录的是地图窗口矩形在地面上的实际尺寸,据此可以获得 L 值,若地图数据是经过投影的,从 Map1,CoordinateSystem.Unit.Type 可以确定确定 L 值的长度单位,若地图数据未经投影,则 L 值的长度单位是经纬度,这时需经投影计算获得地面矩形的实际尺寸。2) 确定 M 的值 Printer.ScaleWidth Printer.ScaleHeight 分别

35、是打印纸着墨区的宽度和高度,以缇(twips)为度量单位。Map1.OutputMap Map1.PrintMap Map1.CopyMap 三个函数以尽可能大的尺寸打印地图窗口矩形区中的地图,根据地图窗口的长宽比与打印纸张着墨区长宽比的大小可以确定 M 的值。Map1.OutputMap2 打印地图时,可以根据它的接口参数 Width 或 Height 确定M 的值。例 3 计算打印比例尺 。Map1 窗口中地图是经过投影了的,计算Map1.OutputMap Map1.PrintMap Map1.CopyMap 三个方法打印地图的比例尺(见 OutMap2 目录中程序的 计算地图比例尺 命令按钮对应的代码 )。Private Sub Command7_Click() 计算比例尺

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。