资源描述:
科技信息2009 年第 19 期SCIENCE TECHNOLOGY INATION 0.引言 MAPGIS为支持用户进行二次开发,提供了包括从最基本数据单 元的读取、保存、更新和维护到地图库的建立和漫游,以及空间分析、 图象处理等一系列功能完整的二次开发函数库, 用户完全可以在 MAPGIS平台上开发面向各自领域的应用系统。 神舟六号返回搜救系 统“载人航天任务主着落场搜救辅助决策系统”就是以MS-Visual C 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 MFCMicrosoft Foundation Class微软提供的基础类,MAPGIS 为运用MFC的开发者提供了多个基于MFC的可重用基类 (如图1), 将应用程序所需的常见基本功能作了封装,开发者从这些基类下派生 即自动获得了从窗口显示控制到图形查询编辑的各项功能, 使用便 利,改动灵活。 这些类的功能及继承关系如下[2] 图1类的继承关系图 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 \mapgis66\program。 这样就把生成的可执行文件输出到MAPGIS动态 连接库所在的目录下。 3包含库设置选择Tools菜单下的Options命令,在Directory页 面上Show directories for一栏选择include files, 在Directories下填写 MAPGIS二次开发库头文件目录,如,C\ mapgis66\include;然后,在此 页面上的Show directories for一栏再选择library files ,在 Directories下 填写MAPGIS二次开发库目录,例如,C\ mapgis66\lib。 这样就设置了 头文件及库文件的路径。 第三步应用MAPGIS中的类和函数。 首先在工程的视图类定义 (即 TestView.h文件)前加入include“CGisView.h”,然后将视图类从 CView派生改为从MAPGIS中的CGisView类派。 方法是分别在视图 类的头文件(TestView.h)和实现文件(TestView.cpp)中,用VC的查 找替换功能(Edit菜单下的Replace命令或是热键CtrlH)在弹出的 替换对话框中选中左边三个复选框,然后点击“Replace All”即可。 替 换完成后就实现了视图类从CGisView的继承。 第四步 为了完成绘图工作的预处理, 调用CGisView类中的 OnDraw(pDC) 函数。 在其中加入这样一条语句CGisViewOnDraw (pDC)。 编译连接并执行, 在客户区单击鼠标右键会出现一个放大窗口、 缩小窗口、移动窗口、显示范围、显示比例、坐标转换等MAPGIS功能 的快捷菜单,在此基础上我们还可以随意地添加自己想要的功能。 2.2组件方式具体实现[3] 在使用MAPGIS组件之前,必须先注册,运行MAPGIS二次开发 包中的setup.可以自动安装、注册组件。或进行手工注册将要注册 的组件拷贝到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\ mapgis66\include。 2初始化COM库。 在调用任何MAPGIS组件对象之前,MAPGIS 应用程序必须使用CoInitialize函数初始化COM库。 如hrCoInitialize NULL。 3建立MAPGIS对象。 声明MAPGIS对象指针变量, 然后使用 COM的CoCreateInstance函数建立MAPGIS对象的 (下转第454 页) 浅谈 VC 环境下 MAPGIS 二次开发的实现 么伟伟邹悦临 石家庄信息工程职业学院软件工程系河北石家庄050035 【摘 要】目前,利用VC基于MAPGIS平台已经研发出很多适合各领域的应用软件,包括神舟六号返回搜救系统。 本文简要介绍了目前 MAPGIS二次开发的四种开发方式,并将详细介绍两种方式的VC具体实现方法,以供开发者选用适当的二次开发方式开展应用开发工作。 【关键词】VC;MAPGIS二次开发;API;MFC;COM;ActiveX ○IT论坛○ 437 科技信息2009 年第 19 期SCIENCE TECHNOLOGY INATION (上接第437页)实例。 如 IPntArea *ptPAi; HrCoCreateInstanceCLSID_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就是将控件与组件结合进行二次开发。 不同的开发方式各有优缺点,可满足不同行业、不同层次具体工 作的需要。应用者可根据应用工程的具体要求及本部门开发人员的编 程技术水平,采用适当的二次开发方式,开发符合行业需要的应用型 GIS系统。 【参考文献】 [1]解华明,陈守余.基于MAPGIS的钻孔柱状图绘制软件的编制[J].物探化探计 算技术.2004,26185-90. [2]中国地质大学(武汉)信息工程学院.MAPGIS地理信息系统开发手册[M].武 汉华地图形数据公司,1998. [3]中地软件丛书编委会. MAPGIS组件开发手册[M].武汉中地信息工程有限 公司,2002. [责任编辑汤静] ● 科 ● (上接第481页)宜采用小电流、不摆动、多层多道焊,禁止用过大的 电流补焊;2对刚性大的结构进行补焊时,除第一层和最后一层焊道 外,均可在焊后热状态下进行锤击。 每层焊道的起弧和收弧应尽量错 开; 3对要求预热的材质,对工作环境气温低于0℃时,应采取相应的 预热措施;4对要求进行热处理的焊件,应在热处理前进行缺陷修正; 5对D 级、 E级钢和高强度结构钢焊缝缺陷,用手工电弧焊焊补时,应 采用控制线能量施焊法。每一缺陷应一次焊补完成,不允许中途停顿。 预热温度和层间温度,均应保持在60℃以上。6焊缝缺陷的消除的焊 补,不允许在带压和背水情况下进行;7修正过的焊缝,应按原焊缝的 探伤要求重新检查,若再次发现超过允许限值的缺陷,应重新修正,直 至合格。 焊补次数不得超过规定的返修次数。 作者简介牛慧君(1973.9),男,本科学历,工程师,工作单位为河北晶牛 微晶集团股份有限公司。 [责任编辑张新雷] 科 科 ● 图5 2.2文本框的绘制 在文本框绘制之前, 要先通过AutoLisp指令textbox获取文本中 字体属性边框的一个顶点坐标, 然后通过AutoLisp指令polar经适当 的偏移得到其余三个顶点,然后顺次连接各点绘制出矩形框,至此便 可完成文本框的绘制。 相应的程序片段如下 setq n4 textbox n3 setq ll polar car n4 pi 1 setq ur polarcadr n4 0 1 setq ul listcar llcadr ur setq lr listcar urcadr ll 其中n4为找到的一个文本中字体属性边框的顶点, 后经相应的 处理得到四个顶点ll,ur,jl,lr。 2.3完整程序的编译 在学会以上两个基础后, 便可着手进行AutoLisp程序的编译,在 编译过程中,程序中要有必要的系统设置保护程序段,要有程序执行 状态判断程序段,要有必要的提示信息。程序编译完成后,作者在不同 版本的AutoCAD绘图软件中进行测试、 调试, 排除了大量不稳定因 素,使完成后的程序运行速度更快,程序更简练。而且在程序运行结束 后或中途意外出错后都会恢复绘图前的系统设置,这样程序的运行就 不会对之前的用户个人系统配置产生负面影响。 3.程序运行效果与结论 3.1程序运行效果 程序运行的效果图如图1和图2。 3.2结论 AutoLisp是一种计算机的列表处理语言,是迄今人工智能领域中 应用最广泛的程序设计语言之一,它既具备一般高级语言的基本结构 和功能,又具有一般高级语言所没有的强大的图形处理功能,正是在 AutoCAD中嵌入了AutoLisp语言, 使图形编辑软件AutoCAD变成真 正进行计算机辅助设计绘图出图的应用软件, 这使得AutoCAD广泛 应用于各行各业,为传统绘图提供了更大的提高工作效率和减轻工作 强度的空间。 【参考文献】 [1]梁春雪,崔洪斌,吴义忠.AutoLISP实用教程[M].北京人民邮电出版社,1998. [2]金石成,蒲红克,于建华.AUTOCAD2000二次开发与应用[J].四川建筑, 2004 , 4 2 84 - 86. [3]AUTODESK,INC.AUTOCAD2000 VISUAL LISP开发人员手册.1999. 作者简介全琳卡(1984),上海理工大学08级研究生。 [责任编辑张慧] ○IT论坛○ ● ● 454
展开阅读全文