教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 论文> 其他论文> PowerBuilder和MapInfo的集成开发技术

PowerBuilder和MapInfo的集成开发技术

上传者:网友
|
翻新时间:2013-12-18

PowerBuilder和MapInfo的集成开发技术

PowerBuilder和MapInfo的集成开发技术 PowerBuilder和MapInfo的集成开发技术 PowerBuilder和MapInfo的集成开发技术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...")

Ruturn

End If

在退出应用程序时,要调用DisConnectToObject()函数断开OLE自动化对象和MapInfo OLE自动化服务器之间的连接,并撤消OLE自动化对象,以释放其占用的系统资源。为此,可在上述框架窗口的Close事件中添加代码实现:

//断开与OLE自动化对象与MapInfo服务器的连接

MapInfo.DisConnectToObject()

//释放OLE自动化对象

Destroy MapInfo

3.将地图窗口集成到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")

图2 回调技术的实现

4.实现回调

在PowerBuilder的客户程序中,是通过OLE自动化对象对集成的地图窗口进行控制,如图2所示。当客户程序在地图窗口进行有关的操作后(例如使用某个自定义工具在地图窗口上单击某个地图对象时),对应的事件只传递给MapInfo服务器,而不直接传递给客户程序,为了在客户程序中对事件进行处理,必须采用回调技术。由于在PowerBuilder中不能定义公共的回调类,因此必须编写一个在MapInfo服务器中运行的MapBasic应用程序,用来将回调信息反馈给PowerBuilder客户程序。其实现过程为:

然后,编写一个在MapInfo服务器中运行的MapBasic应用程序,在此应用程序中添加对地图窗口事件进行处理的子程序。当对客户程序中的集成地图窗口进行操作时,MapBasic程序中对应的事件处理程序被触发。在事件处理程序中,可以将要传递给客户程序的信息保存到MapBasic中定义的一个全局变量中,然后使用Win32 API函数PostMessage(),以PowerBuilder应用窗口的句柄和该窗口的用户自定义事件的ID为参数,向PowerBuilder客户程序发送消息,这样PowerBuilder客户程序就可以在该窗口的用户自定义事件中处理地图窗口事件了,并且还可以使用MBApplications对象的方法,获取MapBasic全局变量中保存的事件信息。如下代码展示了MapBasic应用程序在接收到地图对象选择事件时的处理的过程:

' 预定义PowerBuilder应用窗口的用户自定义事件的唯一数值标识符

'响应地图对象选择事件

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 If

End 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").Value

5.充分利用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.obj

Update Selection set obj = MyObject Where RowID = 1

End If

End Sub

MBApplications的Eval方法的调用与Do方法的类似,只不过MapInfo将自动调用RemoteQueryHandler()过程,并要求返回一个结果。

6 结束语

目前,关于MapInfo地图的集成应用大都是利用VB、VC++开发的,利用PowerBuilder开发的实际应用却很少,以至很多人认为难以利用PowerBuilder实现对MapInfo的集成开发,就算实现了也难以很好地完成对地图窗口的控制。本文介绍了如何将MapInfo地图集成到PowerBuilder的开发应用中的基本方法,以及其中的一些关键技术。运用此方法开发应用程序,可以充分发挥PowerBuilder强大的数据访问与操纵能力和MapInfo的地图信息管理功能,迅速地、灵活地开发基于地理信息系统的客户/服务器的信息管理系统。

参考文献:

1.William B.Heys著,王艺,徐利平,范维等译PowerBuilder 6 开发指南,1998

2.张剑平,任福继,叶荣华,骆红波著,地理信息系统与MapInfo应用,科学出版社,1999

3.宜晨等著,MapInfo 4.0 实用培训教程,电子工业出版社,1998

下载文档

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

网友最新关注

放烟花
一件伤心的事
争做文明公民的倡议书
暑假,我为自己出书
一个错别字引起的笑话
骗人的惩罚
我进步,我快乐!
玻璃
我的好朋友
试胆量
美丽的日出
斗争
第一次跳山羊
信心的力量
假如记忆可以移植
加强未成年人思想道德教育工作行动计划
2011年学校工作要点
文明单位创建工作计划
2011年小学实验室工作计划
2010—2011学年下学期学校工作计划
2011年上半年学校教导处工作计划
学校2011年工作计划
2011年学院工作要点
2011年春季学期毕业班工作思路及实施对策
中学2011年工作计划
2011年春季学期学校工作计划
2011年度学校安全工作计划
创建“健康校园”工作计划
2011年春季学校工作计划
中学教职工政治理论学习计划
文学翻译的创造性叛逆与可接受性
国内区域中心城市财政问题研究
论碾压混凝土筑坝技术研究进展
英汉互译中词汇空缺产生的原因和对策
习语翻译的策略
英汉委婉语比较与翻译
WTO和中国行政改革(1)
高中化学趣味性实验功能研究
市场化程度对我国公共财政监督体制建立与实施的影响
举证时限制度新解(1)
语言翻译的基本单位
我国环境执法障碍的成因分析与对策措施(1)
国内本科翻译专业课程设置现状
谁才有资格违宪? 美国宪法 “政府行为”理关于(1)
君子协定的法律分析(1)
《金色的鱼钩》教学实录2
《母爱》及练习五。
《狼牙山五壮士》疑导式教案设计
《草原》教学实录+练习+说课设计2
《狼牙山五壮士》写法引读教案设计
《珍珠鸟》教学实录5
《“精彩极了”和“糟糕透了”》教学实录(3篇)2
《珍珠鸟》教学实录3
《“精彩极了”和“糟糕透了”》教学实录(3篇)1
《珍珠鸟》教学实录2
《珍珠鸟》教学实录4
《“精彩极了”和“糟糕透了”》教学实录(3篇)3
《金色的鱼钩》教学实录3
《金色的鱼钩》教学实录1
《“精彩极了”和“糟糕透了”》教学设计之三