VB与MapInfo的集成
VB与MapInfo的集成 1客户/服务器方式
客户/服务器方式指客户机运行用户服务请求程序,并将这些请求传送给服务器,服务器管理数据资源,响应处理客户机发出的请求,并将结果传送给客户机。服务器被程序化,可接受并响应同时来自被连接客户机的多个请求。这些请求可能排队,按次序等待服务;或者同时处理几个客户机的请求。客户机向服务器发送请求之后,客户端程序将独立工作,直到它需要来自服务器端的支持为止。
VB与MapInfo都支持OLE Automation方式。OLE Automation方式,实际是一种编程接口,通过它应用程序可以访问在另一个应用程序中实现的对象,提供编程对象给其他应用程序的称“服务器”,访问这些对象的应用程序称“客户机”。这里利用OLE Automation方式,在VB应用程序中将MapInfo作为一个对象来使用,编程调用MapInfo对象,实现对交通线路信息的集成。
2 VB与MapInfo的接口
在VB应用程序里实现对另一个应用程序(MapInfo)的访问,利用前面所提到的OLE Automation技术,把MapInfo作为服务器,VB应用程序作为客户机,可以无缝地实现集成MapInfo对象于VB应用程序中。
具体实现步骤如下:
(1)首先定义两个对象:MapInfo与theResponde,即在程序里添加两行:
Public MapInfo As Object '*创立指向MapInfo的对象
Public theResponder As Object '*创立本地对象,MapInfo将把信息返回给它
(2) 然后再添加一个子程序InitializeMapInfoConnection(),用于实现同MapInfo的通信。该子程序在后台创立一个用于通信的MapInfo实例;一个本地在此VB应用程序的类MIResponder的对象的实例,即用于接受MapInfo返回应用程序信息的实例。
具体程序如下:
Public Sub InitializeMapInfoConnection()
On Error GoTo userCancelled
Set MapInfo = CreateObject('MapInfo.Application') '*创立MapInfo对象
MapInfo.do 'Set Application Window ' & Mapwin.hwnd
MapInfo.do 'Set Window Info Parent ' & Mapwin.hwnd
Set theResponder = New MIResponder '*创立theResponde对象
MapInfo.SetCallback theResponder
MapInfo.do 'Run Application ' + '''' + WORKDIR + '\getarea.mbx' + ''''
MapInfo.do 'Create Menu ''MapperShortcut'' ID 17 As '&'''' + '前一视图'_ + '''' + ' ID 1002 Calling 806, ' & '''' + '改变视图' + '''' + ' ID 1002 Calling_ 805'
……
thereIsAMap = False '*初始化,表示没有地图窗口
mapWinID = 0 '*表示没有窗口
MapInfo.runmenucommand M_TOOLS_SELECTOR '*激活MapInfo的选择工具
Exit Sub
userCancelled:
MsgBox '系统初始化失败,请查看 MAPINFO 是否正确安装!'
End
(3) 现在MapInfo已成为VB应用程序的一个对象,因此可调用MapInfo对象的方法及设置其属性来实现对地图的复杂操作。
具体程序(略)