论文网首页|会计论文|管理论文|计算机论文|医药学|经济学论文|法学论文|社会学论文|文学论文|教育论文|理学论文|工学论文|艺术论文|哲学论文|文化论文|外语论文|论文格式
中国论文网

用户注册

设为首页

您现在的位置: 中国论文网 >> 计算机论文 >> 计算机理论论文 >> 正文 会员中心
 计算机应用论文   计算机理论论文   计算机网络论文   电子商务论文   软件工程论文   操作系统论文   通信技术论文
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的应用中,可以迅速地开发出具有强大地图处理能力的应用程序,使数据库中繁杂抽象的数据快速、准确、灵活地显示于电子地图之上,将数据可视化,实现空间数据和属性数据的有机结合。www.11665.Com

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="/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 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

  • 上一个计算机论文:
  • 下一个计算机论文:
  •  作者:未知 [标签: 集成 技术 ]
    姓 名: *
    E-mail:
    评 分: 1分 2分 3分 4分 5分
    评论内容:
    发表评论请遵守中国各项有关法律法规,评论内容只代表网友个人观点,与本网站立场无关。
    初探WindowsServer2003操作系统的安全配置
    《中文Windows 2003操作系统》教案
    谈谈Web3D技术在现代教学中的应用
    探析嵌入式Web服务器的设计与实现
    当代基于Web技术的高校监考布置系统的不同角
    利用开源框架Struts+Hibernate实现Web应用程
    LabWindows/CVI的应用特点
    基于RRAS与虚拟专用网技术在Windows中的实现
    利用Geoway—Checker软件设计1:5千缩编1:
    微软发布Windows8操作系统
    触摸Windows8
    避免误删,找回Windows8删除文件确认对话框
    | 设为首页 | 加入收藏 | 联系我们 | 网站地图 | 手机版 | 论文发表

    Copyright 2006-2013 © 毕业论文网 All rights reserved 

     [中国免费论文网]  版权所有