首页 > 范文大全 > 正文

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

开篇:润墨网以专业的文秘视角,为您筛选了一篇对Mapinfo二次开发的三种方法的对比和研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要: 文中介绍了对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

这段程序运行后,会出现如下对话框,用户可输入要查找的图元以及图元所在的地图名即可。

下面分别以函数的形式编写浏览图元的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.1 图形浏览

图形浏览的方法可以通过,在VB中集成Mapinfo的一些按纽功能,可以通过如下的语句来实现:Map1.CurrentTool = miZoomInTool(放大),miZoomInTool可以换成miPanTool(漫游)p miZoomOutTool(缩小)pmiLabelTool(标签)pmiTextTool(文本)miCenterTool(居中)p miSelectTool (选择),可以在VB中,设计类似Mapinfo中的按纽,然后给这些按纽添加如上的一些代码,使其能够实现类似Mapinfo的浏览功能。

图形编辑可以说是Mapx运用中的一个瓶颈,是一个技术难点,使用mapx编辑地图时不能使逐层细化、栅格、无缝或用户绘制图层成为插人图层。这样给编辑图形造成了很大的不便!但这些通过OLE技术可以很容易实现。

综上所述,Mapx二次开发的技术优势在于:图元的查询和定位上,而技术瓶颈是对图形的编辑上。

4 利用OLE技术进行集成二次开发

OLE(Object Linking and Embedding)技术既对象链接与嵌入技术,可以在处理及显示数据时,使多个应用程序共同工作。所谓对象链接与嵌入技术是一种使不同的应用程序在一起工作并共享数据的技术,为了共享数据,可以在另一个应用程序中链接或嵌入一个对象。利用OLE 自动化技术开发应用型地理信息系统,主要是利用OLE 自动化服务器暴露出来的对象的属性和方法,再通过开发语言加以利用和控制,同时利用通过开发语言定制统一的用户界面,最大可能的利用已有的工具型地理信息系统的各种空间数据管理p分析功能,并在工作量最小的前提条件下,适当扩展其功能。具体来说,利用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

monDialog1.ShowOpen ‘打开对话框

stropen = CommonDialog1.FileName‘所打开的地图名

map.do "Open Table" & """" & stropen & """" & " As USA" ‘利用do方法打开地图

map.do "Map From USA"

通过以上代码,就可以以对话框的形式打开一个Mapinfo中的tab 了。

不管是新建或是打开的地图,都可能是需要编辑的,编辑地图在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格式阅读原文。