对Mapinfo二次开发的三种方法的对比和研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:mailyangli
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: 文中介绍了对Mapinfo进行二次开发的三种常用方法,即利用MapBasic语言、Mapx组件、OLE技术等三种方法,并且从对图元的加载、查询定位、以及编辑浏览等方面对这三种技术进行对比研究;最后结合实例“传媒软件”综合运用这三种方法。
  关键词:Mapinfo;Mapx;OLE;MapBasic
  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)06-11691-02
  
  1 前言
  Mapinfo是美国MapInfo公司推出的一个桌面GIS系统,目前, MapInfo在统计、测绘、邮电、水利、环保、林业、油田、军事、工商等部门得到了广泛的应用。对大众化的PC桌面数据可视及信息地图化应用来说,MapInfo小巧玲珑,易学易用,价位较低,是一个优选GIS产品。同时,提供了自己的二次开发平台,用户可以在平台上开发各自的GIS应用。
  目前,MapInfo二次开发主要有三种方法,一是,利用MapInfo自带的 MapBasic语言进行二次开发;二是,利用建立在Active技术基础上的功能组件Mapx组件进行集成二次开发;三是,利用OLE(Object Linking and Embedding)技术进行集成二次开发。下面将对这三种方法一 一进行阐述,并从对地图的加载、图元的查询定位、以及编辑浏览等方面对这三种技术进行比较。
  
  2 利用MapBasic来进行二次开发
  MapBasic是MapInfo公司提供的可供用户进行二次开发的宏语言,利用MapBasic编程,能够扩展MapInfo的功能,简化重复操作,并能使MapInfo与其他应用软件集成。
  下面针对MapBasic语言对地图的加载、图元查询定位、以及编辑浏览等方面的一些关键技术作一些说明:
  2.1 加载地图
  下面几条代码可以实现加载图元的功能:
  Open Table "States" As USA Map From USA
  其中“Stastes”表示要打开的图表名。
  2.2 查找图元
  下面以函数的形式,编写查找图元的find函数,代码如下:
  sub find()
  Dialog Title "查找"
  Control StaticText
  Title "当前地图名"
  Position 8,8
  Control EditText
  Into s1
  Control StaticText
   Title "要查找的终端"
  Position 8,24
  Control EditText
  Into s2
  Control OKButton
  Title "确定"
  Position 16,40
  Control CancelButton
  Title "取消"
  Position 80,40
  Select * From s1 Where Rowid=s2
  End Sub
  这段程序运行后,会出现如下对话框,用户可输入要查找的图元以及图元所在的地图名即可。
  图1
  2.3 编辑浏览
  下面分别以函数的形式编写浏览图元的pan函数,和编辑图元的line函数,代码如下:
  sub pan()
  run menu command 1734
  end sub
  sub line()
  run menu command 1712
  end sub
  其中pan函数的功能是:浏览;而line函数的功能是:划线。
  从以上程序可以看出: MapBasic语言的集成化程度很高,一条简单的代码就可以实现很强大的功能,因此是一种简单的开发工具。它的优势在于对Mapinfo进行缝缝补补,乃至改头换面时的快捷性上;但是,它的运行离不开Mapinfo环境,所以,这种开发有一定的局限性,那就是和Mapinfo绑定过于紧密,从而,缺乏开发的独立性,另外缺乏可视化编程环境的支持。
  
  3 利用Mapx组件进行集成二次开发
  Mapx 是MapInfo公司提供的用来开发地理信息系统的32 位OCX 控件,选择Mapx 控件进行二次开发的一个重要依据就是其相对于Mapinfo Professional而言, Mapx具有更加快速的数据处理能力,这种优势对于电子地图的动态刷新而言是至关重要的 ;这种方式的二次开发的开发成本比前两种都要高,因为它不仅需要安装Mapinfo,还需要安装Mapinfo Mapx;下面针对Mapx使用时的关键技术和技术难点进行阐述,并指出这种开发的优势和不足。
  在和VB集成开发时的技术关键和技术难点:
  3.1 添加Mapx控件
  Visual Basic用户首先在Visual Basic工具箱上放置Map控件 。在一个打开的Visual Basic工程中执行如下操作:
  如果使用的是Visual Basic 6或更新的版本,则操作如下:
  ①选择 [工程] 中的 [部件]。
  ②在部件对话框中,单击控件选项卡,寻找列表中的“Mapinfo Mapx V5”。如果该项未选中,请选中它。单击确定。
  Mapx控件出现在工具箱上。要在Visual Basic窗体上放置地图,请选择Mapx控件并在窗体上绘制一个方框。如果保存工程,在下一次重新加载工程时,Mapx图标将自动出现在工具箱中。
  3.2 加载地图
  3.2.1 通过对话框加载
  使用Map1.Layers.LayersDlg,此代码会调用Mapinfo的layer contral对话框, Mapx的加载地图和其他的地图软件不太一样,因为,Mapinfo地图是分好多图层的,当然这种方法通过对话框,使用户有一定的选择余地,从而更加方便的加载地图。
  3.2.2 加载一个GeoSet 对象到Mapx 中
  使用Map1. Layers. AddGeoSetLayers GeoSetName ,其中GeoSetName 是指一个GeoSet 文件。加载之后, Mapx 自动打开各个图层,叠加到地图窗口中,并设置各个图层的属性信息 。这种方法各个图层的顺序是事先设定好的。
  3.2.3 加载一个图层到Mapx 中
  有时侯,地图仅有一个图层,这时,可以使用Map. Layers. AddFilespec,其中Filespec是要加载的tab名称,这种方法是直接加载一个MapInfo Table文件。
  3.3数据查询和定位
  Mapx技术的优势在于,它比较方便进行图元的查询和定位,这一点在实际应用中是非常重要的,也是它较之于其它开发方法的独到之处。这里仅介绍与查询和定位有关的Find属性:Find是layer 对象的一个属性, Find属性用于在地图图层中进行搜索,并在图层中寻找特定图元。Find属性又有两个方法:
  ① Search——执行搜索。该方法返回一个FindFeature 对象。
  例:Set Found = Map1.Layers(“US Cities”).Find.Search(“Albany”, “NY”)
  ② SearchEx——向搜索函数返回“精确匹配”来扩展搜索功能。它延伸了Search方法的功能。
  如下程序功能是找到相关图元并居中显示:希望能通过这段代码,使读者对Find的使用有一个深入的理解:
  Dim FoundObj As FindFeature
  Set FoundObj = Map1.Layers("map1").Find.Search("lxroad")
  If (FoundObj.FindRC Mod 10 = 1) Then
  Map1.Zoom = 1
  Map1.CenterX = FoundObj.CenterX
  Map1.CenterY = FoundObj.CenterY
  Else
  MsgBox "No exact match found. " + Str$(FoundObj.FindRC)
  End If
  其中FindRC 属性是表明因何查找到或未查找到图元的原因的数字值。该属性存储 Find 操作的结果代码。
  3.4图形浏览和编辑
  3.4.1 图形浏览
  图形浏览的方法可以通过,在VB中集成Mapinfo的一些按纽功能,可以通过如下的语句来实现:Map1.CurrentTool = miZoomInTool(放大),miZoomInTool可以换成miPanTool(漫游)﹑ miZoomOutTool(缩小)﹑miLabelTool(标签)﹑miTextTool(文本)miCenterTool(居中)﹑ miSelectTool (选择),可以在VB中,设计类似Mapinfo中的按纽,然后给这些按纽添加如上的一些代码,使其能够实现类似Mapinfo的浏览功能。
  3.4.2 图形编辑
  图形编辑可以说是Mapx运用中的一个瓶颈,是一个技术难点,使用mapx编辑地图时不能使逐层细化、栅格、无缝或用户绘制图层成为插人图层。这样给编辑图形造成了很大的不便!但这些通过OLE技术可以很容易实现。
  综上所述,Mapx二次开发的技术优势在于:图元的查询和定位上,而技术瓶颈是对图形的编辑上。
  
  4 利用OLE技术进行集成二次开发
  OLE(Object Linking and Embedding)技术既对象链接与嵌入技术,可以在处理及显示数据时,使多个应用程序共同工作。所谓对象链接与嵌入技术是一种使不同的应用程序在一起工作并共享数据的技术,为了共享数据,可以在另一个应用程序中链接或嵌入一个对象。利用OLE 自动化技术开发应用型地理信息系统,主要是利用OLE 自动化服务器暴露出来的对象的属性和方法,再通过开发语言加以利用和控制,同时利用通过开发语言定制统一的用户界面,最大可能的利用已有的工具型地理信息系统的各种空间数据管理﹑分析功能,并在工作量最小的前提条件下,适当扩展其功能。具体来说,利用VB,VC,Delphi等开发语言定制统一的应用程序界面,通过OLE 自动化技术启动Mapinfo professional在后台运行,并在用户操作时,将命令传至Mapinfoprofessional ,并取得自动化服务器的服务,达到控制Mapinfo的目的 。这种方法能随心所欲制造出美观友好的界面,并且能实现几乎所有的MapInfo功能。
  OLE对象具有的方法有:Do, Eval, SetCallBack, RunMenuCommand等;具有的属性有:Name, Application, ParentVisible 。
  上面对OLE技术以及OLE对象作了一个综合的,全面的概述,下面针对实际编程时,所碰到的技术关键和难点作一下阐述:
  在和VB集成开发时的技术关键和技术难点:
  4.1 OLE自动化服务器的建立
  要想使Mapinfo professional成为VB界面的一部分,并在VB界面上实现对Mapinfo的控制,这一步是十分关键的,也是一切工作的基石。
  Set map = CreateObject("Mapinfo.application")
  map.do "Set Application Window " & Form1.Frame1.hWnd
  map.do "Set Next Document Parent " & Form1.Frame1.hWnd & "style 1"
  通过上面的代码,就使Mapinfo和VB界面上的Frame组件绑定起来了,Mapinfo窗口中的内容就可以在VB界面上进行显示。
  4.2新建和加载地图
  4.2.1 新建地图
  建立新的地图文件,可以利用OLE对象的do方法,把MapBasic语言集成到VB中来运行:
  map.do "Create Table " & """" & 表名 & """" & "(townname Char(30), population SmallInt)"
  map.do " Create Map For" & """" & 表名 & """"
  map.do "Map from" & """" & 表名 & """"
  引号中的内容都是mapbaisc的语句,需要注意的是:MapBasic语句中的引号,在这里的引用形式。(下转第1730页)
  (上接第1692页)
  4.2.2 加载地图
  当然也可以直接打开(加载)已经存在的地图文件,同样需要用到OLE对象的do方法去集成MapBasic语言。
  WithCommonDialog1‘commondialog1是VB中的对话框组件
   .DefaultExt = "*.tab"
   .Filter = "tab 文件(*.TAB) | *.TAB"
  End With
  Dim stropen As String
  Form1.CommonDialog1.ShowOpen ‘打开对话框
  stropen = CommonDialog1.FileName‘所打开的地图名
  map.do "Open Table" & """" & stropen & """" & " As USA" ‘利用do方法打开地图
  map.do "Map From USA"
  通过以上代码,就可以以对话框的形式打开一个Mapinfo中的tab 了。
  4.3 编辑和浏览地图
  4.3.1 编辑地图
  不管是新建或是打开的地图,都可能是需要编辑的,编辑地图在Mapx中实现是一件很困难的事,但用OLE技术就很容易实现了;只需要在地图编辑语句前面把地图的editable属性设成true就行了,例如:map.do "Set Map Layer 1 Editable On" map.runmenucommand 1712。
  4.3.2 浏览地图
  图形浏览的方法可以通过在VB中集成Mapinfo的一些按纽功能,通过如下语句来实现,map.runmenucommand 1705,其中1705表示放大工具的代号,其他的浏览工具例如缩小,拖拽等,也都有它们各自的代号,在此不再一一赘述。
  综上所述,OLE技术的实现实际上是是通过与Mapinfo密切相关的MapBasic语言,把Mapinfo的功能集成到应用软件VB中来了,是一种方便快捷的好方法。但这种方法的不足之处,就是在图元的查询和定位上不太方便。
  5 三种方法的综合运用和实例
  以上的这三种方法在对Mapinfo进行二次开发时,都有各自的不足之处,MapBasic虽然在功能上还算是比较全面,但它缺乏可视化的编程的环境和独立编程的能力;而Mapx虽然在查找和定位上比较方便,但却在编辑上有所不足;OLE技术解决了Mapx的不足,但它在查找上却有它的不方便。那么,为什么不把这三种方法综合起来,扬长避短,发挥各自的优势,笔者在“传媒软件”编制上,就是综合运用这三种方法的;传媒软件要求实现这样的功能。
  ①图形显示与控制,提供缩放、漫游、导航等工具,便于统揽全局与细节,常握一切。
  ②图形定位,为每个终端进行编号,建立属性信息,能定位相应地图位置。如输入编号,可自动将终端点移至图形窗口中心。
  ③用户管理,系统需三级用户管理。给不同级别的用户提供不同级别的操作权限。
  ④为超级用户提供路网结构编辑、增删终端设备点等编辑工具。
  ⑤查询功能,便于查询图元,并居中显示。等等……
  笔者在这个软件中,用Mapx和VB设计主界面,进行图形的显示和控制,并实现图形的定位和查询功能;然后用OLE技术和VB,编写Mapinfo的类似界面,可以实现简单图形的编辑功能,为超级用户提供路网结构编辑,当然在使用OLE技术的时候,MapBasic语言是必不可少的。这样综合运用这三种方法的技术优势,开发出了这个软件;具体细节,在此不再祥述,读者若有兴趣,可以一试。
  参考文献:
  [1]童瑞华.利用Mapx开发Mapinfo[J].电子技术,2001(7)
  [2]刘茂华,孙秀波,杨伦,范海英.Mapinfo二次开发中OLE自动化技术的应用[J].矿山测量.
  [3]杨华,高克昌.用OLE自动化技术开发应用型地理信息系统[J].
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:文介绍了现代企业在信息化建设过程中遇到的交互和耦合问题,阐述了面向服务构建企业应用的解决方案——ESB企业服务总线,对该解决方案给出了详细的设计,并举出实现例子。  关键词:面向服务;企业解决方案;企业服务总线  中图分类号:TP391 文献标识码:B 文章编号:1009-3044(2007)06-11659-02    1 问题提出  企业信息化建设,大部分已经结束各自为政的各业务部门独立
期刊
摘要:Authorware作品在演示时往往会出现演示窗口不能按设计者的意图全屏显示的问题,产生这一现象的原因是计算机系统的显示器分辨率与作品设计分辨率不一致。文中详细说明了解决这个问题所采用的两种技术,并提出了三种可行的解决方法。  关键词:Authorware;演示窗口;控制;分辨率;UCD函数  中图分类号:TP317文献标识码:A文章编号:1009-3044(2007)06-11729-02
期刊
摘要:分析了在接收端对抑制载波双边带调制信号的载波提取的重要性和可行性,运用matlab中的仿真工具箱simulink实现了载波提取的具体过程。其中包括:平方变换法提取载波和插入导频法提取载波,并举例验证其可行性。最后比较了两个方法的适用范围。结论表明:实验仿真和理论推导的结果基本一致,并可推广到单边带和残留边带调制信号的载波提取中。  关键词:载波;平方变换;导频;仿真  中图分类号:TP872
期刊
摘要:运用ANSYS Workbench集成开发平台对自行车车架进行了静力学和动力学及屈曲分析,用以指导车架的形状优化设计。首先,对自行车车架在AWE环境下Design Modeler模块中进行了三维建模;借助于这个模型,在AWE的Design Simulations模块中进行网格划分和约束载荷的施加;在此基础上并行的对车架进行应力应变分析、模态分析、屈曲分析,大大缩短了设计周期;最后整合这些分析
期刊
摘要:流媒体技术的基础是多媒体通信技术,一般是指通过IP网络传送媒体(如视频、音频)的技术总称,它是当前十分流行的多媒体技术之一。本文从流媒体技术的相关技术出发,对流媒体的组成、发展及其在Internet上的应用进行了研究探讨。  关键词:流媒体协议 传输 视频  中图分类号:TP37 文献标识码:A文章编号:1009-3044(2007)06-11733-01    1 引言   随着通讯技术的
期刊
摘要:电子表格Excel具有强大的计算功能,它提供了一种描述问题、建立模型、处理数据与求解的有效工具。通过汽车维修设备投资中的一个实例,说明它在计算机仿真决策中的应用。  关键词:计算机仿真;数学建模;设备投资;Excel   中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)06-11678-03  现实生活中的大多数系统的动态行为都十分复杂,涉及许多不确定或未知的变化
期刊
摘要:本文主要介绍使用Word制作手抄报的方法。  关键词:使用Word;手抄报  中图分类号:TP317文献标识码:A文章编号:1009-3044(2007)06-11739-01    1 引言  手抄报是语文活动的一种常见形式,是由学生自己选材,组稿,编辑,并用手抄写的报纸。随着办公自动化的发展,使用Word制作手抄报就很简单了。下面介绍使用Word制作手抄报的方法。    2 制作前的准备
期刊
摘要:简要介绍了多媒体 CAI 教软件的特性,利用 Authouware 作为工具,结合C语言教软件的开发,阐述了多媒体 CAI 教软件开发过程和开发方法。结合C语言教学软件的开发,介绍多媒体CAI软件的特点及开发过程。  关键词:CAI;课件;开发;Authorware  中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)06-11731-02    1 引言  “多
期刊
摘要:本文通过具体实例量化比较研究,得出在Visual Basic环境下快速数据库图像存取的方法,对于其他多媒体信息存取与编程环境也有一定的借鉴作用。  关键词:图像存取;ICB方法;CKA方法  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)06-11719-02    1 引言  图形图像、音频视频等多媒体信息在数据库中存储不同于传统的文本、数字等有着非常规范的结
期刊
摘要:对UNIX环境下的IPC机制进行了研究。着重探讨并分析了UNIX下的各种IPC机制的用法及其优劣。重点研究了如何通过综合运用IPC机制,设计一个具有高可用性与高伸缩性要求的商业银行重要应用系统。  关键词: UNIX;进程;内部进程通信;银行应用系统  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)06-11684-04    1 引言  UNIX操作系统自七十
期刊