MapInfo是美国MapInfo公司的产品,对大众化的PC桌面数据可视及信息地图化应用来说,MapInfo小巧玲珑,易学易用,价位较低,是一个优选GIS产品。同时,提供了自己的二次开发平台,用户可以在平台上开发各自的GIS应用。
1、MapInfo上的地理信息系统的二次开发
 在Windows系统中,MapInfo二次开发方法主要有2种:
(1)利用自身所带的开发工具MapBasic
必须在MapInfo环境中运行,系统资源开销大,开发效率不高,功能也不强,难以开发界面友好而功能强大的定制程序,较适合扩展MapInfo的功能。
(2)利用VC之类的优秀开发工具进行二次开发
后台对地图的处理依然采用MapInfo支撑软件,但由于前台采用了VC这样的专业开发工具,在开发效率、开发能力、汉 化、移植性等方面都优于自带的工具,同时能随整个软件开发行业的发展不断发展。此种方法的关键是前台定制程序与后台MapInfo之间的结合方式。目前主要有利用OLEAutomation和利用MapX标准组件进行开发。
(a) VC基于OLE自动化的MapInfo二次开发
实际上是将MapInfo用作进程外服务器,他在后台输出OLE自动化对象,供VC建立的自动化控制器调用他的属性和方法。在这种方法中需定义一个MapInfo对象(DMapInfo类),DMapInfo类在MapInfo类型库(Mapinfow.tlb)中定义。MapInfo软件提供了自己的编程语言MapBasic,VC++,对地图进程的操作主要通过发送MapBasic命令来实现。这种开发比较繁琐,因为需要来回向后台的MapInfo发送MapBasic字符串命令,建立的应用程序运行速度也相对较慢。
(b)VC利用MapX组件进行MapInfo系统的二次开发
MapX是一个基于ActiveX(OCX)技术的可编程控件。他使用与MapInfo一致的地图数据格式,并实现了大多数MapInfo的功能。他为开发人员提供了一个快速、易用、功能强大的地图化组件。在VB,Delphi,VC等可视化开发环境中,只需在设计阶段将MapX放入窗体中,并对其进行编程,设置属性或调用方法或相应事件,即可实现丰富的地图信息系统功能。
MapX由一系列Object(对象)和Collection(对象集合)组成,Map是最基本的对象,每个Map由Layer(层)、Dataset(数据集)和Annotation(标注)这3个对象及对象集合(Layers,Datasets,Annotations)来定义,其中Layer腫操作地图的图层,Dataset用于访问空间对象的属性数据,Annotation用于在地图上添加文本、符号等标注,掌握上述3个主要对象的特征后,再掌握下一级对象的特征,就能很好地利用MapX进行二次开发。
在VC中,每个MapX对象是一个C++类,这些类在MapX.h文件中定义,在Mapx.cpp文件中实现。每个MapX对象的属性与方法是通过C++类的成员函数来实现的,下面将用一个在VC中创建MapX对象并进行增加图层、删除图层、删除所有图层操作的例子进行说明。
首先要将MapX.h与Mapx.cpp两个文件加入工程中,这样就相当于在工程中定义并实现了MapX对象的类。然后显示地图,显示地图是在View中,故在CMapxView类中WM_CREATE和WM_SIZE的消息映射函数中进行创建与调整地图大小的操作。也就是说在CMapxView中的WM_CREATE的消息映射函数中,增加:这样就可以实现视图大小改变时,地图也随之改变大小,使他充满客户区。MapX是按图层组织地图的,图层对象代表矢量地图数据,他包含了一组地理特征。获得图层集合对象是用 Mapx对象的GetLayers成员函数。增加图层,是用图层集合对象的Add成员函数。删除图层是用图层集合对象的Remvoe成员函数,删除所有图层是用图层集合对象的RemoveAll成员函数来实现的。下面是增加图层的源代码:
2、结语
        从上面可以看出,在VC中利用MapX组件是进行MapInfo地理信息系统二次开发的一种比较好的方法。COM组件的应用,极大地提高了定制程序与MapInfo两者结合的紧密程度,提高了编程效率。面向对象技术的应用,使得没有所谓的前台与后台之分,他将MapInfo支撑软件拆成了一个个小对象,需要时调入系统使用,大大降低了系统资源的占用率,同时又保留了VC编程的高效性,这种真正的面向对象的技术为地理信息系统软件以后的维护、升级换代或移植打下了坚实的基础。