




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PowerBuilder和MapInfo的集成开发技术 摘要: 本文介绍了客户/服务器开发工具PowerBuilder和桌面地图信息系统MapInfo集成开发的基本方法。重点讨论了集成开发中的一些关键技术的实现方法。 关键词:PowerBuilder,MapInfo,MapBasic,系统集成,OLE自动化,回调 0 引言 PowerBuilder 是一个面向对象的用于构造基于客户/服务器(Client/Server)数据库应用系统的开发工具,它通过ODBC可同时支持Sysbase、Oracle、Informix、SQL Server等多种关系数据库,具有强大的数据库应用程序开发功能,尤其是它提供的如数据窗口(Data Window)等工具,使其能够更加方便有效地访问与操纵数据库。MapInfo是由美国MapInfo公司推出的地理信息系统开发平台,其核心包括MapInfo Professional和MapBasic两个部件。通过MapInfo平台,能把大量信息直观地与地理图形有机联系起来,使枯燥的表格数据可视化,从而极大地方便了数据分析和辅助决策。利用PowerBuilder强大的数据访问与操纵能力和MapInfo的地图信息管理功能,结合Integrated Mapping技术、OLE自动化技术等,将MapInfo地图集成到PowerBuilder的应用中,可以迅速地开发出具有强大地图处理能力的应用程序,使数据库中繁杂抽象的数据快速、准确、灵活地显示于电子地图之上,将数据可视化,实现空间数据和属性数据的有机结合。1 开发框架使用PowerBuilder和MapInfo集成开发技术所开发的应用程序,称为集成的地图应用程序(Integrated Mapping Application)。在集成的地图应用程序中,以客户/服务器的开发模式,使用PowerBuilder开发的应用程序称为客户程序。客户程序运行在前台,通过OLE调用在后台运行的作为OLE自动化服务器的Mapinfo。在集成的地图应用程序中,根据MapInfo提供的Integrated Mapping接口,在PowerBuilder客户程序中使用Outbound OLE Automation(输出OLE自动化)技术,将MapInfo的地图窗口集成到客户程序中,从而使客户程序具备地图处理能力。客户程序使用MapInfo OLE自动化对象、MapBasic OLE自动化对象的有关属性和方法,通过MapInfo OLE自动化服务器对集成的地图窗口进行控制。图1给出了客户程序和服务器程序间的关系。图1 PowerBuilder客户程序和MapInfo服务器的关系2建立PowerBuilder客户程序和MapInfo OLE服务器的连接建立PowerBuilder客户程序和MapInfo OLE服务器的连接在原理上是:在PowerBuilder开发的客户程序中,通过使用Outbound OLE Automation技术实现客户程序和MapInfo服务器的连接,借助OLE调用MapInfo服务器。具体实现上是:在包含地图窗口的框架窗口的Open事件中添加代码,创建一个新的OLEObject,而将MapInfo作为这个新的OLEObject的OLE服务器。要调用MapInfo服务,则需调用ConnectToNewObject()函数并传递OLE Programmable Object的程序标识,即“MapInfo.Application”:/OLEObject对象的实例OLEObject MapInfo/接收错误代码Integer ErrCode/创建一个与MapInfo进行通信的OLE自动化对象MapInfo = Create OLEObject/连接OLE自动化对象到MapInfo服务器ErrCode = MapInfo.ConnectToNewObject(MapInfo.Application)If ErrCode <> 0 Then MessageBox(Fatal Error, Error connecting to the map server. Exiting.)RuturnEnd If在退出应用程序时,要调用DisConnectToObject()函数断开OLE自动化对象和MapInfo OLE自动化服务器之间的连接,并撤消OLE自动化对象,以释放其占用的系统资源。为此,可在上述框架窗口的Close事件中添加代码实现:/断开与OLE自动化对象与MapInfo服务器的连接MapInfo.DisConnectToObject()/释放OLE自动化对象Destroy MapInfo3将地图窗口集成到PowerBuilder应用程序中要将MapInfo的地图窗口集成到PowerBuilder开发的客户程序中,必须在客户程序中为MapInfo中的应用窗口重新指定父窗口,并指定一个Picture控件作为集成的地图窗口的父窗口。可以使用OLE自动化对象的Do方法实现上述功能:/重新指定MapInfo中的应用窗口的父窗口为应用程序窗口/其中w_map为一个窗口MapInfo.Application.Do (Set Application Window + String(Handle(w_map)/指定一个Picture控件棗p_map为地图窗口的父窗口,将地图窗口集成到客户程序中MapInfo.Do (Set Next Document Parent + string(Handle(p_map) + Style 1).gif (11237 字节) src=/Newspic/20051181642511909.gif width=681>图2 回调技术的实现4实现回调在PowerBuilder的客户程序中,是通过OLE自动化对象对集成的地图窗口进行控制,如图2所示。当客户程序在地图窗口进行有关的操作后(例如使用某个自定义工具在地图窗口上单击某个地图对象时),对应的事件只传递给MapInfo服务器,而不直接传递给客户程序,为了在客户程序中对事件进行处理,必须采用回调技术。由于在PowerBuilder中不能定义公共的回调类,因此必须编写一个在MapInfo服务器中运行的MapBasic应用程序,用来将回调信息反馈给PowerBuilder客户程序。其实现过程为:首先,在包含集成地图窗口的PowerBuilder应用窗口创建一个用户自定义事件ue_SelectionMade,事件ID为pbm_Custom01(= 1024)。然后,编写一个在MapInfo服务器中运行的MapBasic应用程序,在此应用程序中添加对地图窗口事件进行处理的子程序。当对客户程序中的集成地图窗口进行操作时,MapBasic程序中对应的事件处理程序被触发。在事件处理程序中,可以将要传递给客户程序的信息保存到MapBasic中定义的一个全局变量中,然后使用Win32 API函数PostMessage(),以PowerBuilder应用窗口的句柄和该窗口的用户自定义事件的ID为参数,向PowerBuilder客户程序发送消息,这样PowerBuilder客户程序就可以在该窗口的用户自定义事件中处理地图窗口事件了,并且还可以使用MBApplications对象的方法,获取MapBasic全局变量中保存的事件信息。如下代码展示了MapBasic应用程序在接收到地图对象选择事件时的处理的过程: 预定义PowerBuilder应用窗口的用户自定义事件的唯一数值标识符DEFINE SELECTION_MADE 1024响应地图对象选择事件Sub SelChangedHandler()如果选中一个地图对象If CommandInfo(CMD_INFO_SELTYPE) = 1 Then 保存地图对象所在的表的名称g_seltabname = SelectionInfo(SEL_INFO_TABLENAME) 向PowerBuilder客户程序发送消息iRc = PostMessage(g_pbhwnd_bg,SELECTION_MADE,0,0) End IfEnd Sub 下面的程序段中给出了实现回调时PowerBuilder客户程序的处理过程。该处理过程使用了MapBasic编写的mbserver.mbx程序。在MapBasic程序中保存事件信息的变量为g_SelTabName,而g_PbHWnd是MapBasic程序中用来接收PowerBuilder客户程序窗口句柄的全局变量。/在MapInfo服务器中运行MapBasic应用程序MapInfo.Do(Run Application + gs_AppDir + DataFusion.mbx)/创建对MapBasic应用程序进行控制的OLE自动化对象MBAppOleObject = Create OleObject MBAppOleObject = MapInfo.MBApplications.Item(1)/传递PowerBuilder客户程序中的窗口句柄给MapBasic应用程序/以便MapBasic应用程序将返回给PowerBuilder客户程序MBAppOleObject.MBGlobals.Item(g_pbhwnd_bg).Value = String(Handle(this)由下面代码所示的PowerBuilder客户程序就可以在窗口w_map的用户自定义事件ue_SelectionMade中处理地图窗口事件:/在PowerBuilder客户程序的用户自定义事件中使用MBAppOleObject对象获取回调信息ls_MI_CommandInfo = MBAppOleObject.MBGlobals.Item(g_CommandInfoString).Value5充分利用MapBasic应用程序MapBasic是MapInfo提供的用户系统开发工具,它具有对地图对象的管理、对含有地图对象的MapInfo表的管理等方面的强大功能。在将MapInfo地图集成到PowerBuilder的开发应用中,MapBasic不仅仅能用来实现回调,还可实现其它诸多功能。例如,在开发过程中经常会遇到需要保存地图对象类型的中间结果的问题,而在PowerBuilder中没有与之对应的数据类型,又难以通过MapInfo OLE自动化对象的方法和属性实现等诸如此类的问题,若利用MapBasic应用程序以及使用它的OLE自动化对象MBApplications的方法和属性来解决,可以达到事半功倍之效果。与MapInfo OLE自动化对象相似,MapBasic的OLE自动化对象MBApplications也有自己的Do方法和Eval方法。每当PowerBuilder客户程序调用它们时,MapInfo就会自动调用MapBasic的保留过程RemoteMsgHandler()或RemoteQueryHandler()过程,并可以在过程中通过CommandInfo(CMD_INFO_MSG)得到调用Do方法或Eval方法的参数。以下代码运用MBApplications的Do方法,实现改变当前选中地图对象的颜色:/要求将当前选中地图对象的颜色改为兰色MBAppOleObject.Do(Blue)MapInfo将自动调用RemoteMsgHandler()过程:Sub RemoteMsgHandler()Dim MyObject As Object获取并分析Do方法的参数CmdInfoStr = CommandInfo(CMD_INFO_MSG)改变地图对象的颜色If CmdStr= Blue then MyObject = Selection.objAlter Object MyObject Info 2, MakeCustomSymbol (Towe1-32.bmp, RGB(0,0,255), 18, 2)Update Selection set obj = MyObject Where RowID = 1End IfEnd SubMBApplications的Eval方法的调用与Do方法的类似,只不过MapInfo将自动调用RemoteQueryHandler()过程,并要求返回一个结果。6 结束语目前,关于MapInfo地图的集成应用大都是利用VB、VC+开发的,利用PowerBuilder开发的实际应用却很少,以至很多人认为难以利用PowerBuilder实现对MapInfo的集成开发,就算实现了也难以很好地完成对地图窗口的控制。本文介绍了如何将MapInf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州浙江温州市瓯海区红十字会招聘2名编外人员笔试历年参考题库附带答案详解
- 第六课 择菜和洗菜教学设计小学劳动二年级上册粤教版(主编:徐长发)
- 2025广东深圳市九洲电器有限公司招聘项目管理岗1人笔试历年参考题库附带答案详解
- 纳米技术考试题库及答案2025年
- 全国川教版信息技术八年级下册第三单元第1节《数据与数据分析》教学设计
- 2025年湖南省株洲市事业单位工勤技能考试题库(含答案)
- 2025年二级建造师继续教育试题库及答案解析
- Unit 10 Musical chairs说课稿-2025-2026学年小学英语新世纪英语三年级下册-新世纪英语
- 人邮版(2018)说课稿-2023-2024学年中职中职专业课机械-设计制造66 装备制造大类
- 自己做图画书(教学设计)-浙美版(2012)美术四年级上册
- DL-T5745-2021电力建设工程工程量清单计价规范
- MOOC 英文学术写作实战-北京大学 中国大学慕课答案
- 电气系统故障诊断
- 《呼吸与健康生活》作业课件
- 外资机构持股能提升股票定价效率吗?-来自A股纳入明晟新兴市场指数的经验证据
- 悬挑工字钢验收表
- 宝马5系GT说明书
- 追究刑事责任的控告书范例(标准版)
- 讲义配电房可视化管理标准课件
- 高中音乐(必修)《音乐鉴赏》 (人音版)《家国情怀的民族乐派》格林卡与穆索尔斯基《荒山之夜》
- 陕西省引汉济渭三期工程环评报告
评论
0/150
提交评论