毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc

上传人:文库蛋蛋多 文档编号:3974162 上传时间:2023-03-30 格式:DOC 页数:8 大小:192.50KB
返回 下载 相关 举报
毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc_第1页
第1页 / 共8页
毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc_第2页
第2页 / 共8页
毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc_第3页
第3页 / 共8页
毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc_第4页
第4页 / 共8页
毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc》由会员分享,可在线阅读,更多相关《毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc(8页珍藏版)》请在三一办公上搜索。

1、基于.NET框架的COM回调机制在开发GIS中的应用马奎 李宏伟 毛彪(信息工程大学测绘学院,郑州,450052)摘要:MapInfo软件是应用十分广泛的主流GIS软件之一,Microsoft.NET是微软公司推出的新平台,具有强大的全方位技术兼容性,而COM技术作为OLE技术的延伸,可以实现几乎所有组件的通信操作。基于这些方面,本文利用.NET框架下的COM组件包装技术与经该技术打包后的COM回调机制实现了更具简便性与灵活性的GIS开发,详细探讨了该机制在MapInfo二次开发中的实现思路及其关键技术点,取得了较为满意的应用效果。关键词 .NET Framework COM MapInfo

2、回调机制 地理信息系统The CallBack Mechanism of COM Based on .NETFramework in Development of GISMA Kui, LI Hong-wei, MAO Biao(Institute of Surveying and Mapping, Information Engineering University, Zhengzhou Henan, 450052, China)Abstract MapInfo is one of the main software of GIS which is used broadly. Microso

3、ft.NET, a new platform of the Microsoft, which has an excellent power of technic compatibility. And COM is the advanced technic of OLE, accomplishes almost all the communication between components of different softwares. Then based on the .NET component packing technic to COM and CallBack Mechanism

4、of the packed COM, it can be more simple and flexible to exploder the GIS. This article will give you a deep discussion of the CallBack Mechanism about its thoughts and technologies in secondary exploration of MapInfo, and finally get a satisfaction to its application.Key Words .NET Framework COM Ma

5、pInfo CallBack Mechanism GIS1、引言通用的地理信息系统主要是用来执行各类空间数据的输入和编辑、存储和管理、分析和处理、显示和制图的空间数据管理系统。针对其不能完全满足专业领域GIS的需求,也就产生了许多GIS的二次开发工具,或者相关人员直接从底层开发专业的GIS系统。显然两种方式各具其自身特点及应用需求,前者适合快速开发,专业应用中会受到通用GIS的限制,后者适于开发具有自主知识产权的专业GIS系统,但这种方式耗时、费力,需要投入大量的人力与智力。本文就是本着快速便捷的原则,同时又不失时代性地选择了.NET框架作为开发平台,以当今主流最新通用桌面GIS软件MapIn

6、fo Professional 8.0作为二次开发对象,利用两者均支持Oracle远程数据库的特性,开发了一套可支持网络的地区级电力管理GIS。本文主要探讨该系统单机部分MapInfo二次开发的关键技术基于.NET的COM组件回调机制的实现与应用,该技术具有一定的技术创新性且整合的效果较好。本文开发的系统自有其特点:系统兼具MapInfo系统高效图形化管理、强大分析功能的优点,也能充分利用.NET框架下一系列快速高效的可视化开发工具,开发具备界面交互性良好且拥有高效数据分析、处理能力的应用系统。简单的讲,系统等于是运行了两个应用程序:后台MapInfo程序侧重于地图显示与数据储备,前台客户程序

7、侧重于用户界面交互与数据分析处理。显然在上述开发过程中,用户对后台MapInfo操作不透明,即“用户无法通过普通方法来获取MapInfo中的地理信息与状态变化”1,为此可以利用MapInfo提供的一种客户程序消息反馈机制,简称回调(callback)1。.NET之前的MapInfo回调利用的是OLE(对象链接与嵌入)技术结合相关开发平台(如VC+/VB/Delphi等)实现的,类似的原理:但在.NET开发方式中并不是单纯的OLE对象嵌入,而是通过.NET提供的COM组件包装器(wrapper),将MapInfo提供的COM回调接口进行.NET封装,使之成为具备.NET特性的组件,然后再实现其与

8、其他.NET组件的相互通信。下面本文就这一转换进行专门的论述。2、MapInfo回调技术的开发平台相关特性.NET Framework是一种在Windows平台上编程的新架构一种新的API,包含通用语言运行时(CLR)和框架类库(FCL)。微软公司主要是为了实现“向后兼容”2以方便支持今后出现和扩展的新技术,以使开发人员可以轻松编写优秀软件而推行的新平台,是一种新开端。但.NET并没有推翻之前的软件,它仍然支持现有的软件,即实现向前兼容。另外,现有的软件组件“在Windows上的软件通信,几乎都是使用COM实现的”2。因此,.NET提供了支持现有COM组件的包装器(wrapper),以便.NE

9、T组件与之通信。2.1 OLE支持的回调如引言中所言,.NET之前的MapInfo回调其实是OLE技术结合非.NET开发平台实现的。OLE技术,举例描述,它在很大程度上仅是把不同类型的办公文档链接在一起,所以利用它可以把一个小Excel电子表格放在Word文档中。相关的开发平台如Delphi可以通过编程的方式实现回调这一过程。具体实现的过程,请参见1,3,此类技术文章在相关技术网站或论坛上较多,因不是本文重点就不再赘述。2.2 .NET支持的COM回调COM(组件对象模型)是作为OLE开发出来的,之后,它逐步演化为COM、DCOM(分布式组件对象模型)和最终的COM+。COM+是一种复杂的技术

10、,它是几乎所有组件通信方式的基础,实现了事务处理、消息传输服务和对象池。随着新功能的加入,它就会比以前更加复杂,这也是导致.NET Framework产生的直接原因。而.NET要实现MapInfo回调,必须将MapInfo的COM回调接口进行包装,这个过程已经脱离了OLE二次开发的技术范畴,经过包装的COM组件已经具备.NET组件的一切特性,因而说.NET实现MapInfo回调过程其实是基于.NET组件通信技术的具体实例,因而该回调技术已经不同于前期相关开发平台的OLE开发方式,因而在继续探讨之前必须探讨一下这个所谓“回调技术的开发平台相关特性”。3、回调机制的实现机理在介绍回调机制原理之前,

11、先讨论一下“回调机制”与“回调”两个概念。前面提到的回调(callback)是MapInfo提供的一种向客户程序反馈消息的过程,单纯的理解它是单向的,即从后台到前台的过程。对于这种开发方式,单向且前台与后台没有交互的话,系统很难实现稍复杂的GIS操作。因而,出于系统考虑,本文将客户到后台、后台到客户以及两者交互的整个过程统称为“回调机制”,统称这种二次开发方式为“回调机制”的实现。.NET的COM组件包装器wrapper封装的过程相当复杂,而且是在.NET内部实现的,要了解该过程的理论实现请参见2。在Visual Studio 2005中打开或新建一个工程后,打开“添加引用”在“COM”项中找

12、到“MapInfo 8.0 OLE Automation Type Library”,单击“确定”之后,该COM组件就被加载到工程中了。另外,.NET会在工程文件中创建程序集文件“Interop.MapInfo.dll”(如图1,中上部方框),它是带有.NET包装器类的.NET程序集。打开“对象浏览器”找到该程序集就可以浏览其内部的类及相关接口。使用时,在相关程序文件中加载语句“Using MapInfo”(“MapInfo”是.NET所谓的“命名空间”,并不等于程序集名称)。在本文所述的系统中,按照软件内部各部分之间的关系,进行了宏观上的抽象,大体可以分成三大部分:(如图1)客户组件、回调组

13、件以及后台服务端组件。程序运行后,外在的窗体就相当于客户组件,它主要负责与用户交互,调出并显示后台MapInfo地图窗口显示地图,打开并链接数据库、属性数据处理等相关操作;所谓“后台服务端”组件,就相当于一个MapInfo服务器程序,抽象地说,它其实就做一项工作:接受外来指令并将处理后的结果返还客户程序;回调组件,已经不是上面所提到的COM对象引用(“Interop.MapInfo.dll”),在本系统中,它被二次封装,封装后的结果相当于一个纯.NET组件,即这里所指的“回调组件”(具体封装见文章第四部分),其作用主要是负责后台的启动、关闭、控制等等复杂操作,用来协调客户程序与后台程序的交互问

14、题,这部分是系统成败的关键。4、实现回调机制的关键技术点在第三部分中可了解,宏观上的回调机制由三部分组成。但在具体实现中必须按照功能将各个部分进行进一步的抽象与细化,而在本文中将重点讲述回调组件的抽象与封装。本文将从两个方面进行讲述:交互封装,callback封装。callback封装指后台到客户过程的封装。交互封装多数情况下为客户到后台的封装包,在一定情况下交互封装还要与callback封装进行通信,因而它还要实现一定的客户与后台交互的工作,所以叫交户封装。紧随各自之后,分别以本系统的两个具体实现难点加以举例详述。4.1 交互封装在本系统中,后台的驱动主要是后台MapInfo执行相关MapB

15、asic语言命令的结果。交互封装组件中主要是将所要使用到的MapBasic语言命令按照基本功能单元进行封装,以实现地图的开关、显示、编辑、存储、制图与控制等基本GIS的地图操作功能。该交互封装组件的内核被定义为一个类:CSMapInfo,其成员变量以及方法构成了多数回调组件的核心。下面具体讲述: 后台程序的化身:mapInfoAppClass。它是MapInfo命名空间中类MapInfoApplicationClass的对象,当实例化之后,它代表的就是后台MapInfo应用程序。这里需要注意,后台MapInfo一般情况下只能是一个,所以在定义该对象的时候要使用Static标识符,目的就是使创建

16、的后台MapInfo程序唯一。 创建callback封装组件MyCallBack的对象myCallBack。该对象代表所有后台回调客户端的处理代码,其实是一个消息处理集合。它也是唯一的,因而也要使用Static标识符,该封装还会在2.3中具体讲述。以上两步定义与实例化代码如下:private static MapInfo.MapInfoApplicationClass mapInfoAppClass;private static MyCallBack myCallBack; public CSMapInfo()this.mapInfoAppClass = new MapInfoApplicat

17、ionClass(); this.myCallBack = new MyCallBack(); this.mapInfoAppClass.SetCallback(myCallBack);/在后台程序中注册回调对象 相关功能命令的集成。它们是一个方法集,其中封装了几乎所有的MapBasic语句,当客户端需要时,会直接调用并作用于后台程序。具体方法及MapBasic命令语句这里不再赘述,详见4。下面以系统中实现图层与注记的动态控制来具体察看这部分的工作原理。4.2 图层与注记的动态控制在通用GIS平台MapInfo软件上,地图均以图层的方式进行存储与显示5。当打开的图层较多后,地图显示刷新速度会受

18、到极大影响,因而不利于地图的界面交互。如果还要显示注记那么地图响应速度将大大放慢。于是当务之急就是要解决这个关乎GIS应用前景的问题。通常情况下,二次开发解决这个问题较为复杂,而从底层开发的方式工作量更大且难度高。本系统的解决方法主要是:在图层打开之后通过设置其显示比例尺的条件,这样对应不同的比例尺显示不同的图层,从而达到动态控制图层显示的问题。类似的处理方式,对于注记标注的动态显示也可以采用这种方式加以解决。仅就图层动态控制的解决思路大体步骤如下:调用交互封装组件中读取地图的方法打开某个图层;获取该图层显示条件;继续调用交互封装组件中设置图层状态的命令方法集设置该图层的显示参数(如图图3,图

19、层控制中红色打勾的图层与注记即在非显示状态)。该实现仅是回调过程中最简单的客户端向后台服务器发送指令的过程,随后的图层或注记动态显示的问题就是后台服务器自发的实现。4.3 callback封装在2.1中提到的callback封装组件MyCallBack,其实是一个消息集合,即后台回调客户程序的入口,所有回调消息先要经过该组件的识别与筛选,然后再将进一步的处理交给相应的客户端处理区。该消息集中罗列的消息处理函数有两种情况:MapBasic内部事件,直接提供给用户编写消息处理代码而无需再定义,比如:对状态条变化的反应SetStatusText,对地图窗口变化的反应WindowContentsCha

20、nged等等4;另外,就是自定义消息,它们可以依据用户不同的需求编写不同的消息处理代码。MapBasic内部事件。以状态条变化消息SetStatusText为例,说明地图窗口变化后,后台是如何回调客户程序的。在MyCallBack中的SetStatusText(string str)方法里添加处理消息的代码:分解后台传出的字符串str为三部分,分别代表比例尺、正在编辑的图层名称、鼠标选择的对象,然后再将它们传递给客户端自己的状态栏里从而显示地图的状态(如图4:客户程序模仿MapInfo的状态栏)。 自定义消息。以系统实现属性查询中较为困难的由图形查找属性为例,下面简要介绍自定义的回调消息:鼠标

21、单击选点GetStatusXyPoint的处理机制。4.4 图形到属性的查询callback封装组件的具体应用定义消息:使用MapBasic语句,Create ButtonPad CallBack_Point As ToolButton ID 2005 Calling OLE GetStatusXyPoint Cursor 138 DrawMode 34,此语句的目的是在后台程序中创建工具按钮CallBack_Point,使之产生GetStatusXyPoint的回调消息,此时鼠标为十字形状且等待单击选择的状态,代表后台MapInfo程序在时刻监视鼠标的状态,直到确认鼠标单击选择。识别消息:后

22、台响应鼠标单击,将单击处的坐标及后台其他状态信息,排列为一个固定格式的字符串,然后回调GetStatusXyPoint方法,并将该字符串传递给该方法。对于不同的消息类型会有不同的回调方法与其对应,因而这个过程就实现了回调消息的筛选。处理字符串:现在由回调GetStatusXyPoint方法处理得到的字符串。这个字符串格式固定,可以将其分解来获取需要的字段。而MapBasic另外提供了直接获取该字符串相应字段的函数CommandInfo(a),a取1到8,分别代表鼠标点击处的X及Y坐标、点击时是否按下SHIFT和CTRL键、释放鼠标处的X及Y坐标、发送消息按钮的ID号和发送消息菜单的ID号。分解

23、后的字段作为参数传递给客户程序相应处理代码。仅就鼠标单击选点这个处理过程,如图5所示:首先客户端发送点击消息,经过交互组件传递给后台程序,后台程序处理这些指令并将处理结果回调给callback组件相应处理代码,最后再交由客户端进一步处理这个消息。客户程序处理消息:客户程序将所得到的坐标点传递给交互组件进一步查询坐标点处的空间对象,从而查找该对象的属性信息。该过程到此结束,后台继续等待单击消息,直到属性查询状态被其他操作更改。5、结论回顾本文,通过把基于MapInfo回调这种相对较老的二次开发方式,结合当前最新.NET技术平台进行重新规划与实践,开发的系统具有运行稳定、交互性好且数据处理能力强等

24、特点,充分继承了基于通用GIS平台进行二次开发的特色。在当前工具型二次开发一统二次开发天下的形势下,有一定的独到之处,且具有一定的工程应用与参考价值。参考文献: 1 赫晓峰,鲜明等, MapInfo二次开发中回叫机制的运用,微计算机信息,2002年18期.2 Christian Nagel等著,李敏波译, C#高级编程(第4版), 清华大学出版社, 2006.3阮于洲,Delphi、MapInfo集成开发环境下CallBack的实现,测绘与空间地理信息,2005年2期.4 MapBasic帮助文档,MapInfo公司,2002.5刘广著,地理信息系统基础篇,中国电力出版社,2004.作者简介:

25、马奎(1982-),男,汉族,江苏邳州人,硕士研究生,主要研究方向:地理信息系统的应用(e-mail:makuin,tel:0371-63535624)更多测绘论文请登录测绘网论文频道查询:http:/ Editors note: Judson Jones is a meteorologist, journalist and photographer. He has freelanced with CNN for four years, covering severe weather from tornadoes to typhoons. Follow him on Twitter: jnjo

26、nesjr .(CNN) - I will always wonder what it was like to huddle around a shortwave radio and through the crackling static from space hear the faint beeps of the worlds first satellite - Sputnik. I also missed watching Neil Armstrong step foot on the moon and the first space shuttle take off for the s

27、tars. Those events were way before my time.As a kid, I was fascinated with what goes on in the sky, and when NASA pulled the plug on the shuttle program I was heartbroken. Yet the privatized space race has renewed my childhood dreams to reach for the stars.As a meteorologist, Ive still seen many imp

28、ortant weather and space events, but right now, if you were sitting next to me, youd hear my foot tapping rapidly under my desk. Im anxious for the next one: a space capsule hanging from a crane in the New Mexico desert.Its like the set for a George Lucas movie floating to the edge of space.You and

29、I will have the chance to watch a man take a leap into an unimaginable free fall from the edge of space - live.The (lack of) air up there Watch man jump from 96,000 feet Tuesday, I sat at work glued to the live stream of the Red Bull Stratos Mission. I watched the balloons positioned at different al

30、titudes in the sky to test the winds, knowing that if they would just line up in a vertical straight line we would be go for launch.I feel this mission was created for me because I am also a journalist and a photographer, but above all I live for taking a leap of faith - the feeling of pushing the e

31、nvelope into uncharted territory.The guy who is going to do this, Felix Baumgartner, must have that same feeling, at a level I will never reach. However, it did not stop me from feeling his pain when a gust of swirling wind kicked up and twisted the partially filled balloon that would take him to th

32、e upper end of our atmosphere. As soon as the 40-acre balloon, with skin no thicker than a dry cleaning bag, scraped the ground I knew it was over.How claustrophobia almost grounded supersonic skydiverWith each twist, you could see the wrinkles of disappointment on the face of the current record hol

33、der and capcom (capsule communications), Col. Joe Kittinger. He hung his head low in mission control as he told Baumgartner the disappointing news: Mission aborted.The supersonic descent could happen as early as Sunday.The weather plays an important role in this mission. Starting at the ground, cond

34、itions have to be very calm - winds less than 2 mph, with no precipitation or humidity and limited cloud cover. The balloon, with capsule attached, will move through the lower level of the atmosphere (the troposphere) where our day-to-day weather lives. It will climb higher than the tip of Mount Eve

35、rest (5.5 miles/8.85 kilometers), drifting even higher than the cruising altitude of commercial airliners (5.6 miles/9.17 kilometers) and into the stratosphere. As he crosses the boundary layer (called the tropopause), he can expect a lot of turbulence.The balloon will slowly drift to the edge of sp

36、ace at 120,000 feet (22.7 miles/36.53 kilometers). Here, Fearless Felix will unclip. He will roll back the door.Then, I would assume, he will slowly step out onto something resembling an Olympic diving platform.Below, the Earth becomes the concrete bottom of a swimming pool that he wants to land on,

37、 but not too hard. Still, hell be traveling fast, so despite the distance, it will not be like diving into the deep end of a pool. It will be like he is diving into the shallow end.Skydiver preps for the big jumpWhen he jumps, he is expected to reach the speed of sound - 690 mph (1,110 kph) - in les

38、s than 40 seconds. Like hitting the top of the water, he will begin to slow as he approaches the more dense air closer to Earth. But this will not be enough to stop him completely.If he goes too fast or spins out of control, he has a stabilization parachute that can be deployed to slow him down. His

39、 team hopes its not needed. Instead, he plans to deploy his 270-square-foot (25-square-meter) main chute at an altitude of around 5,000 feet (1,524 meters).In order to deploy this chute successfully, he will have to slow to 172 mph (277 kph). He will have a reserve parachute that will open automatic

40、ally if he loses consciousness at mach speeds.Even if everything goes as planned, it wont. Baumgartner still will free fall at a speed that would cause you and me to pass out, and no parachute is guaranteed to work higher than 25,000 feet (7,620 meters).It might not be the moon, but Kittinger free fell from 102,800 feet in 1960 - at the dawn of an infamous space race that captured the hearts of many. Baumgartner will attempt to break that record, a feat that boggles the mind. This is one of those monumental moments I will always remember, because there is no way Id miss this.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号