浅谈VC++环境下MAPGIS二次开发的实现.doc_第1页
浅谈VC++环境下MAPGIS二次开发的实现.doc_第2页
浅谈VC++环境下MAPGIS二次开发的实现.doc_第3页
浅谈VC++环境下MAPGIS二次开发的实现.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

浅谈VC+ 环境下MAPGIS 二次开发的实现发布时间:2012-08-03来源:互联网我要说几句| 用户解决方案2013优秀论文合订本 NIDays2013行业应用资源包 机器人在智能机器系统中的作用 LabVIEW 2013评估版软件【摘 要】目前,利用VC+基于MAPGIS平台已经研发出很多适合各领域的应用软件,包括神舟六号返回搜救系统。本文简要介绍了目前MAPGIS二次开发的四种开发方式,并将详细介绍两种方式的VC+具体实现方法,以供开发者选用适当的二次开发方式开展应用开发工作。【关键词】VC+;MAPGIS二次开发;API;MFC;COM;ActiveX0.引言MAPGIS 为支持用户进行二次开发,提供了包括从最基本数据单元的读取、保存、更新和维护到地图库的建立和漫游,以及空间分析、图象处理等一系列功能完整的二次开发函数库, 用户完全可以在MAPGIS 平台上开发面向各自领域的应用系统。 神舟六号返回搜救系统“载人航天任务主着落场搜救辅助决策系统”就是以 MS-VisualC+ 5.0 为开发语言,利用 Win32 API 函数和 MAPGIS API 函数,基于MAPGIS 地理信息系统平台开发研制的。1. MAPGIS二次开发方式成熟实用的地理信息系统的重要标志就是它能够提供给用户二次开发的能力。 目前,二次开发库以 API 函数、MFC 类库、COM 组件、ActiveX 控件四种方式提供1。1.1 API(Application Program Interface)即微软提供的 Windows 操作系统下应用程序的编程语言接口。 MAPGIS 二次开发库的实现被封装于若干动态连接库(DLL)中,是独立于开发工具的。1.2 MFC(Microsoft Foundation Class) 微软提供的基础类 ,MAPGIS为运用 MFC 的开发者提供了多个基于 MFC 的可重用基类 (如图 1),将应用程序所需的常见基本功能作了封装,开发者从这些基类下派生即自动获得了从窗口显示控制到图形查询编辑的各项功能, 使用便利,改动灵活。 这些类的功能及继承关系如下2:CGisView 类是 MAPGIS 类库中大多数类的基类。它封装了窗口管理的各种功能及操作,还支持窗口的保护和快速恢复等;CGisEditView类封装了 MAPGIS 编辑处理的基本数据对象和方法。 CGisEditView 类及其基类组成了十分强大的图形编辑函数库;CPrjEditView 类集成了对工程文件进行编辑处理所必需的数据对象的方法,具有对整个工程文件的各个文件编辑处理功能;CPrjListView 类集成了对工程文件进行控制处理所必需的数据对象的方法,具有对整个工程文件的各个文件编辑处理功能。1.3 COM 组件 (Component Object Model) 开发的基本思想是把MAPGIS 的各大功能模块划分为几个控件 , 每个控件完成不同的功能,在软件开发中实现功能重用,开发者只需简单调用功能接口即可。基于 COM 技术的 MAPGIS 组件被包含在一系列 Windows 动态连接库(.dll)文件里。1.4 ActiveX 控件是一种更高层次和更加通用的应用接口,使得在可视化程度很高的开发环境(如 VB 和 DELPHI)下进行二次开发更加方便,代码的可复用性更高。2.具体实现方法VC+语言功能强大,具有代码执行效率高等优点,而且还可以在VC+中灵活地调用 MAPGIS 中各个层面的二次开发方法。 在此将常用的两种开发方式(MFC 类库和组件)详细叙述:2.1 MFC 类库方式具体实现2首先安装 MAPGIS 二次开发库, 这些库函数是使用 VC+开发MAPGIS 应用程序最快速有效的方法。 下面创建一个简单的 MAPGIS图形编辑窗口。第一步:利用 VC+的程序向导(AppWizard)创建一个工程(名为Test),点击 FiNIsh 即可。第二步:对 VC+的工作环境进行必要的设置。 分以下三个部分:(1)字节设置 :选择 Project 菜单下的 Settings 命令 ,在 C/C+页面上 Category 一栏选择CODe Generation, 将 Struct Member Alignment 设定为 1 Byte。(2)输出目录设置 :选择 Project 菜单下的 Settings 命令 ,在 General页 面 上 Output files 一 栏 , 填 写 mapgis 应 用 程 序 目 录 , 如 :c:mapgis66program。 这样就把生成的可执行文件输出到 MAPGIS 动态连接库所在的目录下。(3)包含库设置:选择 Tools 菜单下的 Options 命令 ,在 Directory 页面上 Show directories for 一栏选择 include files, 在 Directories 下填写MAPGIS 二次开发库头文件目录 ,如,C: mapgis66include;然后 ,在此页面上的 Show directories for 一栏再选择 library files,在 Directories 下填写 MAPGIS 二次开发库目录,例如,C: mapgis66lib。 这样就设置了头文件及库文件的路径。第三步:应用 MAPGIS 中的类和函数。 首先在工程的视图类定义(即 TestView.h 文件 )前加入 #include “CGisView.h”,然后将视图类从CView 派生改为从 MAPGIS 中的 CGisView 类派。 方法是:分别在视图类的头文件(TestView.h)和实现文件(TestView.cpp)中,用 VC+ 的查找替换功能(Edit 菜单下的 Replace 命令或是热键 Ctrl+H )在弹出的替换对话框中选中左边三个复选框,然后点击“Replace All”即可。 替换完成后就实现了视图类从 CGisView 的继承。第四步: 为了完成绘图工作的预处理, 调用 CGisView 类中的OnDraw (pDC) 函数 。 在其中加入这样一条语句 CGisView:OnDraw(pDC)。编译连接并执行, 在客户区单击鼠标右键会出现一个放大窗口、缩小窗口、移动窗口、显示范围、显示比例、坐标转换等 MAPGIS 功能的快捷菜单,在此基础上我们还可以随意地添加自己想要的功能。2.2 组件方式具体实现3在使用 MAPGIS 组件之前,必须先注册,运行 MAPGIS 二次开发包中的 setup.exe 可以自动安装、注册组件。或进行手工注册:将要注册的组件拷贝到 MAPGIS 的 program 目录下,选择 Windows 操作系统开始菜单的运行,输入“regsvr32 组件地址”进行组件的注册。 在 VC+中使用 MAPGIS 组件对象的步骤如下:(1)嵌入 MAPGIS 对象和 COM 头文件,并链接到 COM 库。MAPGIS对象完整的 C 语言说明包含在一系列 *.h 文件中, 对应的组件类 ID和接口 ID 则包含在 *.c 文件中。 VC+项目的 Library 设置或 LIB 环境变量应指向含有这些文件的目录。 选择 Tools 菜单下的 Options,在Directories 页 中 Show directories for 一 栏选择include files, 在Directories 下填写文件目录,如 C: mapgis66include。(2)初始化 COM 库。 在调用任何 MAPGIS 组件对象之前,MAPGIS应用程序必须使用 CoInitialize 函数初始化 COM 库。 如:hr=CoInitialize(NULL)。(3) 建立 MAPGIS 对象。 声明 MAPGIS 对象指针变量, 然后使用COM 的 CoCreateInstance 函数建立 MAPGIS 对象的 IPntArea *ptPAi;Hr =CoCreateInstance (CLSID_PntArea, NULL,CLSCTX_INPROC_SERVER,IID_IPntArea,(void*)&ptPAi);其中,第一个参数是 MAPGIS 对象的类ID;第四个参数是MAPGIS 对象的接口 ID;最后一个参数是 MAPGIS“对象指针 ”变量的地址。(4)使用 MAPGIS 对象和其它对象。 至此,就可以象使用任何对象一样调用对象的属性、方法和事件。(5) 释放 MAPGIS 对象。 当程序使用完它所创建的 MAPGIS 对象后,必须使用 Release 函数释放该对象。(6)解除 COM 库的初始化。完成 MAPGIS 或 COM 函数的全部使用后,程序须调用 CoUninitialize 函数解除对 COM 库的初始化。3.结语在四种开发方式中,API 函数方式是基础, 其编程灵活但技巧性高、编程量也大;MFC 类库则是把一些 API 功能进行封装,屏蔽了基于 MAPGIS API 之上开发程序的许多复杂性,可灵活地增加自己特定的功能,编程量中等。在实际应用中,类库也不可能包括用户要实现的所有操作,仍使用 MAPGIS API 对底层的功能进行补充,将类库和 API混合起来进行开发;组件开发速度快,占用资源少,具有二次开发方便、易于集成、无限扩展等特点,而且易实现许多底层的编程和开发,从一定意义上说它代表了 GIS 的发展方向;ActiveX 控件和组件的共同点是可以用来增强软件的功能和提高代码的复用性,且当前的组件式 MAPGIS 就是将控件与组件结合进行二次开发。不同的开发方式各有优缺点,可满足不同行业、不同层次具体工作的需要。应用者可根据应用工程的具体要求及本部门开发人员的

温馨提示

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

评论

0/150

提交评论