记住哦,本站网址是:http://www.7139.com
梦幻网络
导航图标
您现在的位置: 梦幻网络 >> 论文中心 >> 计算机类 >> 计算机理论 >> 正文

PowerBuilder和MapInfo的集成开发技术

来源:互联网 收集:梦幻网络 本站网址:www.7139.com 点击数: 【字体:减小 增大

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").gif (11237 字节)" src="/lunwen/UploadFiles/200505/20050517200008607.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 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

Alter Object MyObject Info 2, MakeCustomSymbol ("Towe1-32.bmp", RGB(0,0,255), 18, 2)

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


 

Google
【更新时间:2006-7-28 5:52:32】【打印此文】【关闭窗口
搜索
相关栏目导航
法学论文民法   经济法   国际法   司法制度   法学理论   国家法、宪法   刑法   行政法
工科论文通信学   电子学   材料工程学   土建水利学   交通物流   工业设计
理科论文物理学   统计学   其它相关
文学论文外国语   汉 语   古代文学   英语教学   历史论文   法律法学   语文教育   新闻传播学   现当代文学
医学论文药学   临床医学   医学   营养学
政治论文民主制度   社会主义   世界政治   资本主义   台湾问题   民族主义   马克思主义
哲学论文美学   逻辑学   西方哲学   中国哲学   科技哲学   思想哲学
计算机类电子商务   计算机应用   计算机理论   计算机网络
经济学论文地方经济   国际经济   产业经济   新经济学   中国经济   国际贸易   发展战略   经济学理论
社会学论文农村研究   环境保护   伦理道德   城镇建设   人口与生育
工商管理类市场营销   企业战略   企业文化   企业研究   商务礼仪   职业指导   培训与认证   人力资源管理
艺术学论文电影   音乐   美术   平面设计   艺术理论
应用文写作调查报告   毕业总结   自我鉴定   实习报告   简历写作   入党申请
财务管理类基本理论   融资决策   财务分析   投资决策   财务控制
财政税收类财政研究   国债研究   税收理论   税务研讨   财税法规   财政政策
文化类论文传统文化   西方文化   当代中国   社会文化   文化战略   人物研究
教育学论文国学   体育学   教育学   历史学   语言教育
会计审计类会计理论   CPA行业   管理会计   成本会计   管理体制   审计
证券金融类证券投资   金融研究   保险租凭   期货市场   债务市场   银行管理   公司研究
公共管理类行政管理   公共财政   公共政策   图书馆管理