基于MapInfo平台的GIS集成开发研究

基于MapInfo平台的GIS集成开发研究

ID:44067947

大小:71.56 KB

页数:7页

时间:2019-10-18

上传者:U-991
基于MapInfo平台的GIS集成开发研究_第1页
基于MapInfo平台的GIS集成开发研究_第2页
基于MapInfo平台的GIS集成开发研究_第3页
基于MapInfo平台的GIS集成开发研究_第4页
基于MapInfo平台的GIS集成开发研究_第5页
资源描述:

《基于MapInfo平台的GIS集成开发研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

基于MapInfo=1平台的GIS集成开发研究[摘要]以Maplnfo为基础开发平台,利用其二次开发语言MapBasic和VisualBasic进行集成开发,扩展了Maplnfo的功能和应用范围,同时又有应用针对性。集成二次开发既可以充分利用可视化软件开发工具的高效方便的编程功能,又可以充分利用GIS工具软件完备的空间数据可视化分析处理功能,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用面向对象的可视化软件开发出来的应用程序具有良好的外观、完善的功能、可靠性好、便于维护等优点。[关键词]GIS集成开发MapInfoVBMapBasic1.Mapinfo与VB集成开发的基本原理MapInfoProfessional自4.0以上版本提供了一种新的开发方式:OLEAutomationo所谓OLEAutomation,实际上是一种编程的接口,它允许用户应用程序或组件来控制另一个程序或组件的运行。它包括自动化服务器和自动化控制器。Mapinfo与VB集成开发,一般情况下将VB作为自动化控制器,控制和使用自动化对象Maplnfo,MapInfo作为自动化服务器,由VB驱动。在这种机制下,用户可以方便地在自己的应用程序中使用Maplnfo,包括执行mapbasic命令,向Mapinfo中输入数据,以及从中获取数据、修改数据等。2.Mapinfo与VB集成开发GIS分析(1)建立VB应用程序与MapinfoOLE的连接VB应用程序与MapinfoOLE服务器连接原理是:在VB应用程序中通过OLEAutomation技术实现应用程序与Mapinfo的连接,从而实现OLE对Mapinfo的调 用。其具体实现方法是:在包含地图窗口的窗体的Load事件中添加代码,首先声明一个Mapinfo对象变量,再创建mapinfo.Application对象。要调用Mapinfo时,通过使用对象变量来传递OLE的可编程对象的程序标识,即:Mapinfo.Application。下面是OLE对象建立的示例:PrivateSubForm_Load()DimMapinfoasObject,声明OLE对象变dSetMapinfo=CreatcObject("Mapinfo.AppIication")'创建与Mapinfo进行通信的OLE对像,并自动建立连接EndSub(1)在VB应用程序中集成地图窗口在VB的应用程序中集成Mapinfo的地图窗口,必须在VB的应用程序中为Mapinfo中的应用窗口重新设置父窗口,一般父窗口是窗体,并指定一个Picture控件为集成地图窗口的父窗口。同时还可以设置Mapinfo信息的父窗口和Mapinfo的其它父窗口。这些设置可以使用OLE自动化对象的Do方法来实现。最后,将地图的空间数据、属性数据以及其它数据建立有效的连接。下面是地图集成的一个示例:'重新设置mapinfo中的应用窗口的父窗口,其中map是一窗体,picturel是map上的picture控件MapInfo.do"SetAppIicationWindow"&map.hWnd'设置picture控件picturel为地图窗口的父窗口MapInfo.do"SetNextDocumentParent"&map.Picturel.hWnd&"StyIe1"'设置窗口信息的父窗口MapInfo.do"SetWindowInfoReadOnIy"'打开缺省地图空间MapInfo.do"RunappIication""在D:地图.wor"'将地图数据、属性数据以及其它数据集成Mapinfo.Do"RegisterTabIe""D:地图sx.dbf""Typedbf'Mapinfo.Do"OpenTabIe"”D:地图sx.dbf"Interactive'缺省地图操作MapInfo.RunMenuCommand1702'在菜单或工具按钮中调用MapInf。的基本功能的方法如下MapInfo.RunMenuCommand1701'选择MapInfo.RunMenuCommand1702'漫游MapInfo.RunMenuCommand1705'放大MapInfo.RunMenuCommand1706'缩小 (1)在VB应用程序中实现回调VB应用程序是通过OLE自动化对象对集成的地图窗口进行操作控制的,当VB应用程序在地图窗口进行相关操作,如:地图图形对象的偏辑;地图图形对象的选择;改变地图窗口的状态;选择菜单、按钮等工具控件、窗口内属性数据编辑等。其操作的事件只传递给Mapinfo服务器,而不直接传递给VB应用程序,为了实现在VB应用程序中对事件的处理,就利用Mapinfo对象的SetCallBack回调)方法来处理消息并将其传递给应用程序。当Mapinfo系统通过OLE来实现消息的传递与接收时,首先要建立消息接收和处理的OLE对象类,然后定义不同类型的操作方法,以便处理不同的消息。下面是利用SetCallBack方法来获得不同菜单选项消息进行不同处理的示例。首先在VB工程中自定义Menuitem类,并添加一全程过程:PubIicSubMenuSeIect(ByvaIMenuInfoasInteger)'对不同菜单选项消息的处理SetMenuObject二NewMenuItem'创建接受和处理消息的OLE对象MenuObjectMapinfo.SetcaIIbackMenuObject'实现回调这样当用户选择不同菜单选项时,MenuObject对象的MenuSelect方法会因Mapinfo系统调用自动执行。(2)在VB应用程序中调用MapBasic程序在VB应用程序中处理一些复杂的GIS系统操作时,一般先使用Mapbasic编程方式来处理,再将处理结果返回到VB应用程序中,从而达到其目的。这时可以采用在VB应用程序中调用Mapbasic程序方法来实现。具体方法是:首先声明并创建MBApplications对象,然后利用MBApplications对象的属性和方法进行访问操作。下面是其具体调用示例:DimMapbasicasObject'声明对象SetMapbasic二Mapinfo.MBAppIications'创建MBAppIica4ons对象 Mapbasic.DoHRunApplicationH&MbFiIename'调用Mapbasic程序,其中MbFiIename是Mapbasic程序名(1)允许用户在VB中调整窗口在VB中用户调整Mapinfo的Map窗口时,Mapinfo并不自动调整Map窗口的内容。如果应用程序允许用户调整Map窗口的尺寸,则需用windows的API函数MoveWindow来调整Map窗口的内容使其与Map窗口新的尺寸一致。PrivateDeclareFunctionMoveWindowLibHuser32n(ByVaIhwndAsLong,_ByVaIxAsLong,ByVaIyAsLong,_ByVaInWidthAsLong,ByVaInHeightAsLong,ByVaIbRepaintAsLong)AsLongPrivateSubForm_Resize()DimmhwndAsLongOnErrorResumeNextPicturel.Height=Me.HeightPicturedWidth=Me.Widthmhwnd=VaI(mainform.mapinfo.EvaI(nWindowInfo(FrontWindow(),12)11))MoveWindowmhwnd,0,0,SeaIeWidth,SeaIeHeight,0EndSub(2)标准的回调过程,如状态栏的显示处理等Mapinfo的状态栏在集成地图应用程序中并不自动显示出来,要在应用程序中有类似Mapinfo的状态栏,还需要使用VB创建一个类,定义以下方法。①创建SetStatusText方法,它带一个字符串参数。PublicSubSetStatusText(ByVaIStatusTextAsString)DimOneFieIdAsString,TwoFieId,IAsIntegerDimLonAsDoubIeOneField=GetFieId(StatusText,1,Chr(9))TwoFieId=GetFieId(StatusText,2,Chr(9))I=InStr(OneFieId,"a")If(I>0)ThenLon二VaI(Left(OneFieId,I))If(Lon>180)ThenfMainForm.sbStatusBar.PaneIs(1).Text=Format(Lon-360,"##0.00")+Right(OneFieId,Len(OneFieId)-I+1)EIse fMainForm.sbStatusBar.Panels(1).Text=OneFieIdEndIfElsefMainForm.sbStatusBar.PaneIs(1).Text=OneFieIdEndIffMainForm.sbStatusBar.PaneIs(2).Text二TwoFieIdEndSub①如果想要MapInfo通知客户程序它的地图窗口的变化,创建WindowContentsChange()方法,它带一个整型参数PubIicSubWindowContentsChanged(ByVaIWinIDAsLong)IfWinlD二mapWinlDThenUpdateLayerList'*makesuretheIayerIistisuptodateUpdateMenuAndTooIbar'*makesuremenu&toolbarareproperIyactivatedEndIfEndSub②GetField用于获取Mapinfo返回的指定字段字符串PrivateFunctionGetFieId(ByVaItheStrAsString,ByVaiwhichFieldAsInteger,DelimiterAsString)AsStringDimIAsIntegerDimstartPosAsIntegerDimargCountAsIntegerDimtmpStr,resuItAsStringIfLen(theStr)=0OrwhichField<1ThenGetField=ExitFunctionEndIfargCount二0tmpStr二theStrWhileInStr(tmpStr,DeIimiter)>0AndargCount〈whichFieldargCourrt=argCount+1result=Left$(tmpStr,InStr(tmpStr,DeIimiter)-1)tmpStr=Mid$(tmpStr,InStr(tmpStr,DeIimiter)+1)WendIfargCount〈whichFieldThenargCourrt=argCount+1result二tmpStrEndIfIfargCount二whichFieldThenGetField=resuItElse GetField二 EndIfEndFunction1.结束语以上是将Mapinfo地图集成到VB开发的应用程序中的基本方法及其关键技术。运用此方法开发应用型GIS软件,可以具备普通软件所具有的各种功能,包括放缩、多媒体信息查询、分析、裁剪、图形输出等,可以充分发挥VB开发应用程序时对数据访问和操纵的强大功能和Mapinfo对地图信息管理的强大能力,高效、灵活地开发应用型地理信息系统。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭