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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于vc的电子导航系统文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于vc的电子导航系统文档格式.docx

1、 MapX control; Optimal path第一章 引 言1.1 设计背景学科发展走向综合是一个普遍的趋势,比如全球定位系统(GPS)与地理信息系统(GIS)的集成应用。目前用于GIS应用软件开发的模式有很多,其中组件式GIS软件开发是目前较为流行、高效、快速的开发模式。随着计算机技术的飞速发展,GIS得到了广泛的重视和应用,GPS技术也已深入到各行各业,GPS与GIS的集成具有广泛的应用需求,它可以实现GPS导航信息在地图上的可视化、一体化和集成化,能够在地图上实时动态地跟踪目标和显示地理方位。VC+是目前较流行的可视化开发编程工具之一,支持面向对象和事件驱动机制的程序开发,利用其

2、强大的集成开发环境,程序员仅需要较少代码即可生成标准的“Windows” 界面,并且能在VC开发平台下可以较为方便的集成组件。本文主要介绍利用MapX控件,采用VC+编程语言进行组件式GIS应用软件开发的主要过程和基本模式,来实现电子导航的目的。MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如Visual C+、Visual Basic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱

3、离MapInfo的软件平台运行。利用MapX,能够简单快速地在企业应用中嵌入地图化功能,增强企业应用的空间分析能力,实现企业应用的增值。MapX采用基于MapInfo Professional的相同的地图化技术,可以实现MapInfo Professional具有的绝大部分地图编辑和空间分析功能。而且,MapX提供了各种工具、属性和方法,实现这些功能是非常容易的1。MapX为开发人员提供了一个快速、易用、功能强大的地图化组件。在VB,Delphi,PowerBuilder,VC等可视化开发环境中,只需在设计阶段将MapX控件放入窗体中,并对其进行编程,设置属性或调用方法或相应事件,即可实现数据

4、可视化,专题分析,地理查询,地理编码等丰富的地图信息系统功能。 MapX定义了一个类体系,以有效的组织图形元素,图层,属性数据等对象。MapX的主要功能包括:显示MapInfo格式的地图;对地图进行放大、缩小、漫游、选择等操作;专题地图;图层控制;数据绑定;动态图层和用户绘图图层;生成和编辑地图对象;简单地理查询:边界查询,地址查询。VC+是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用C+的一个开发平台。有些软件就是这个编出来的,另外还有VB、VF,只是使用不同语言。但是,VC+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、

5、ALT、COM等的知识。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。VC+应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势。VC基于C,C+语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高

6、,几乎可说VC在 Windows平台无所不能。MSComm 作为一个串行通讯控件为程序员串口通讯编程节省了很多时间。在基于对话框的应用中加入一个MSComm控件非常简单。只需进行以下操作即可:打开“Project-Add To Project-Components and Controls-Registered Activex Controls”,然后选择控件:Microsoft Communication Control,version 6.0插入到当前的工程中。这样就将类 CMSComm 的相关文件 mscomm.cpp 和 mscomm.h 一并加入到了工程中。编程时只需将控件对话中的

7、MSComm 控件拖至你的应用对话框中就OK了。MSComm控件提供了两种处理通信的方法:1. 事件驱动通信,是一种功能很强的处理串口活动的方法。例如,当在CD(Carrier Detect)线或RTS(Request To Send)线上有字符到达或发生了改变,在这种情况下,可以使用MSComm控件的OnComm事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中的错误。2. 可以在每个重要的程序功能之后检查CommEvent属性的值来检测事件和通信错误。使用的每个MSComm控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm控件,可以在Windows

8、 控制面板中修改串口地址的中断地址。MSComm 控件有很多重要的属性,如:CommPort 属性:设置并返回通讯端口号。RThreshold 属性:在MSComm控件设置CommEvent属性为comEReceive并产生OnComm之前,设置并返回的要接收的字符数。CTSHolding属性:确定是否可通过查询Clear To Send (CTS)线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。SThreshold属性:在MSComm控件设置CommEvent属性为comEvSend并产生OnComm事件

9、之前,设置并返回传输缓冲区中允许的最小字符数。CDHolding 属性:通过查询 Carrier Detect (CD)线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。DSRHolding 属性:确定Data Set Ready (DSR)线的状态。Data Set Ready信号由调制解调器发送到相连计算机,指示作好操作准备。Settings属性:设置并返回波特率、奇偶校验、数据位、停止位参数。InputLen属性:设置并返回Input属性从接收缓冲区读取的字符数。1.2 系统设计方案1.2.1 应用型GIS开发的三

10、种实现方式(1)独立开发不依赖于任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C+、Delphi等,在一定的操作系统平台上编程实现。这种方式的好处在于无须依赖任何商业GIS工具软件,减少了开发成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难在功能上与商业化GIS工具软件相比,而且在购买GIS工具软件上省下的钱可能还抵不上开发者在开发过程中绞尽脑汁所花的代价。(2)单纯二次开发完全借助于GIS工具软件提供的开发语言进行应用系统开发。GIS工具软件大多提供了可供用户进

11、行二次开发的宏语言,如ESRI的ArcView提供了Avenue语言,MapInfo公司研制的MapInfo Professional提供了MapBasic语言等等。用户可以利用这些宏语言,以原GIS工具软件为开发平台,开发出自己的针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的宏语言,作为编程语言只能算是二流,功能极弱,用它们来开发应用程序仍然不尽如人意。(3)集成二次开发集成二次开发是指利用专业的GIS工具软件,如MapInfo、ArcView等,实现GIS的基本功能,以通用软件开发工具尤其是可视化开发工具,如Visual C+、Delphi、Visual Basic、Pow

12、er Builder等为开发平台,进行二者的集成开发。集成二次开发目前主要有两种方式:1) OLE/DDE采用OLE Automation技术或利用DDE技术,用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调技术动态获取其返回信息,实现应用程序中的地理信息处理功能。2) GIS控件利用GIS工具软件生产厂家提供的建立在OCX技术基础上的GIS功能控件,如ESRI的MapObjects、MapInfo公司的MapX等,在VC+等编程工具编制的应用程序中,直接将GIS功能嵌入其中,实现地理信息系统的各种功能。1.2.2 三种实现方式的分析由

13、于独立开发难度太大,单纯二次开发受GIS工具提供的编程语言的限制差强人意,因此结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。它的优点是既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护,尤其是使用OCX技术利用GIS功能组件进行集成开发,更能表现出这些优势。由于上述优点,集成二次开发正成为应用GIS开发的主流方向。这种方法唯一的缺点

14、是前期投入比较大,需要同时购买GIS工具软件和可视化编程软件,但“工欲善其事,必先利其器”,这种投资值得。目前许多软件公司都开发了很多ActiveX控件,合理选择和运用现成的控件,减少了开发者的编程工作量,使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,不仅可以缩短程序开发周期,使编程过程更简洁,用户界面更友好,可以使程序更加灵活、简便。与利用OLE Automation技术作为服务器的MapInfo相比,利用控件开发速度快,占用资源少,而且易实现许多底层的编程和开发功能4。第二章 电子导航基本功能在VC+中的实现2.1 利用MapX实现GIS基本功能在进行MapX开发之前,首

15、先要在计算机中正确的安装了MapX控件和VC+应用程序。下面就用一个具体的实例,介绍在VC+中集成MapX的方法。2.1.1 将MapX支持类库加入工程利用VC+环境下的应用程序生成向导创建一单文档界面应用程序VCDZDH。先将位于MapX的安装路径下的子目录Samples40C+Cpp中的MapX.h和MapX.cpp文件拷贝到当前应用程序所在的VCDZDH文件夹下,然后从Project菜单中选择Add to ProjectFiles命令,此时打开了Insert Files into Project对话框,选择VCDZDH文件夹下的MapX.cpp和MapX.h文件加入到工程中。2.1.2

16、地图的显示在VCDZDH文件夹下新建文件夹map,map中复制MapInfo格式的地图文件及Geoset(.GST)文件MY.GST。用户只需要打开Geoset文件,就可以按预先定制的方式显示各层地图。通过以下步骤,就可以实现地图的显示5。1) 在VCDZDHView.h文件中,加入MapX.h对象的头文件,并声明CMapX类型的变量m_ctrlMapX。方法如下:#include“MAPX.H”Class CVCDZDHView:publicCViewprotected:CMapX m_ctrlMapX;/ 声明CMapX类型的变量m_ctrlMapX2) 为MapX创建一个资源ID。选择V

17、iew Resource Symbols,并点击New按钮,输入名称IDC_MAP,值取默认数值。3) 在VCDZDHView.h文件中声明int类型的全局变量m_created和CString类型的全局变量m_tempclientpath。通过类向导创建消息映射函数WM_CREATE。选择“建立类向导”或使用快捷键CTRL+W,可以打开类向导。从类名中选择CVCDZDHView类,在消息框中选择WM_CREATE消息,然后添加函数,编辑代码创建MapX对象。代码如下:int CVCDZDHView:OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_

18、ctrlMapX.Create(NULL,WS_VISIBLE,CRect(0,0,100,100),this,IDC_MAP) return -1;4) 采用同样的方法创建WM_SIZE消息映射函数。该函数用来调整地图大小使其充满客户区。具体代码如下:void CVCDZDHView:OnSize(UINT nType,int cx,int cy)CView:OnSize(nType,cx,cy);m_ctrlMapX.MoveWindow(0,0,cx,cy);/调整地图大小5) 采用同样的方法创建WM_SETFOCUS消息映射函数。修改函数使得当窗口获得焦点时,地图控件获得焦点。具体代码

19、如下。OnSetFocus(CWnd*pOldWnd)OnSetFocus(pOldWnd);m_ctrlMapX.SetFocus();/当窗口获得焦点时,地图控件获得焦点通过以上步骤,将应用程序编译运行就可显示地图。如图2.1所示:图2.1 地图的显示2.2 使用地图标准工具在地图显示出来后,用户通常要以各种比例查看地图的全局、局部或细部,必须提供诸如放大、缩小和漫游等功能。采用MapX通用工具,可以非常方便地实现上述功能。设定MapX使用标准工具的方法很简单,只需设定地图对象的CulrentTool属性。下面的例子是用标准放大工具实现放大功能。添加新菜单项资源,输入标题“工具”,在“工具

20、”下添加子菜单,输入标题“放大”及ID为ID_ZOOM_ IN。打开类向导,选择视图类CVCDZDHView,为菜单项ID_ZOOM_IN添加COMMAND消息映射函数OnZoomIn(),并编辑代码如下。OnZoomIn()m_ctrlMapX.SetCurrentTool(miZoomInToo1);/miZoomInTool为放大工具的常量编译运行程序,选择“工具放大”,就会看到此时光标变为放大镜,单击鼠标就会实现放大功能。如图2.2所示:图2.2 放大功能演示可用相同方法实现缩小、漫游、全图等标准工具的功能。其它的功能跟上面的方法类似,只是需要修改指示常量。表 2.1中列出了部分Map

21、X工具的指示常量9。表2.1 部分MapX工具的指示常量2.3 图层控制工具为了使用户方便查询各个图层,通常要在电子导航系统中设计图层控制工具。在菜单中建立图层控制菜单,设置图层控制ID为ID_VIEW_LAYERCONTROL,然后建立类向导,选择CVCDZDHView类,添加如下函数:OnViewLayercontrol() try VARIANT vHelpFile, vHelpID; vHelpFile.vt = VT_ERROR; vHelpFile.scode = DISP_E_PARAMNOTFOUND; vHelpID.vt = VT_ERROR; vHelpID.scode

22、= DISP_E_PARAMNOTFOUND; CMapXLayers layers = m_ctrlMapX.GetLayers(); layers.LayersDlg(vHelpFile, vHelpID); catch (COleDispatchException *e) e-ReportError(); e-Delete(); catch (COleException *e) 这样,就添加上了图层控制工具,运行程序,该功能如图2.3所示:图2.3 图层控制工具第三章 自定义工具测量折线距离MapX提供的地图标准工具能满足一般需要,但在一些特殊地方,用户可能需要某种特殊工具来完成某些特定

23、的地图操作功能。因此,MapX提供了用户自定义工具的方法,这样可以大大扩展MapX的应用范围。可使用地图对象的CreateCustomTool方法创建自定义工具。下面是用自定义工具实现折线距离的计算。3.1 创建用户自定义工具为了满足用户需要,使用户方便查询两地之间的距离,我们利用自定义工具在电子导航系统中设计了折线距离计算功能。首先,在VCDZDH.h文件中定义常量。#define MYTOOL_DISTANCE 1然后,在VCDZDH.cpp文件中的OnCreate()函数中加入如下代码,从而创建一个用户自定义工具。OnCreate(LPCREATESTRUCT lpCreateStruc

24、t)if(CView:OnCreate(1pCreateStruct) = = -1)return -1;m_ctrlMapX.CreateCustomTool(MYTOOL_DISTANCE,miToolTypePoly,miCrossCursor); /MYTOOL_DISTANCE代表自定义工具的常量,miToolTypePoly描述了该工具的行为是画折线,miCrossCursor表示指定光标的形式return 0;3.2 编程实现自定义工具的行为在创建了用户自定义工具后,需在ToolUsed事件中实现该工具是如何工作的。要处理MapX事件,首先需要为要处理的事件创建一事件槽,其方法如

25、下。在VCDZDHView.h文件中,在DECLARE_MESSAGE_MAP()行下面加入如下一行代码。DECLARE_EVENTSINK_MAP()然后在VCDZDHView.cpp文件中,加入如下代码。BEGIN_EVENTSINK_M AP(CVCDZDHView,CView)ON_EVENT(CVCDZDHView,IDC_M AP,11,OnPolyTooIUsedMap,VTS_I2 VTS_I4 VTS_DISPATCH VTS_BOOL VTS_BOOL VTS_PBOOL) /11代表PolyToolused,OnPolyToolUsedMap是事件响应函数的名称。END_EVENTSINK_MAP()BEGIN_EVENTSINK_MAP(CVCDZDHView,CView)和END_EVENTSINK_MAP()两行代码之间加入的,就是要处理的事件。切换到VCDZDHViewh文件中,声明事件响应函数,代码如下。void OnPolyToolUsedMap(short ToolNum,long Flags,LPDISPATCH

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1