新建网页 4 摘 要:介绍了Mapinfo公司的MapX开发平台的对象结构,讨论了运用MapX进行地理信息系统开发的基本方法和关键技术,并通过实例对这些方法的具体应用进行了说明。
关键词:地理信息系统;MapX;DCOM;视图 地理信息系统作为一种新兴的信息处理技术,在对具有地理特征的信息进行可视化表示方面具有独到的特点,从而得到日益广泛地应用。目前国内外已出现了多种地理信息系统开发平台,其中,Mapinfo公司的产品是目前使用比较广泛的开发平台之一。以下就如何运用MapX进行地理信息应用系统开发的基本方法和关键技术做一介绍。
1MapX对象结构
MapX是基于Microsoft公司DCOM技术的ActiveX对象组件。其核心是由一组对象组成,这些对象主要包括Map对象,Layer对象,Feature对象,DataSet对象等。对象之间的层次关系如图1所示。
从层次关系图中,可以看出一个Map对象(即地图)可以由若干Layer对象(即图层)组成,其中每一Layer对象又可以与一组DataSet对象相对应,而每个Layer中又包含若干Feature对象。在了解了MapX的对象结构以后,我们可以进一步地对MapX的开发步骤进行研究。
2运用MapX的开发步骤
(1) 建立地图视图
在MapX中,开发者可以通过Layers Collection提供的Add或AddGeoSetLayers方法建立地图视图。

使用AddGeoSetLayers建立地图视图开发者要使用AddGeoSetLayers 方法建立地图视图,首先要创建Geoset File。Geoset File记录了地图视图所包含的的图层及其相应属性。他可以通过使用MapX开发软件包提供的Geoset Manager交互式地创建(如图2)。
在建立好Geoset File之后,可以通过以下方法建立视图:

使用Geoset File的优点是可以交互式的创建各个图层及其属性。缺点是必须手工创建Geoset File。

使用Add建立地图视图通过Add方法建立地图视图,开发者就可以直接在程序中指定图层,而不必事先创建Geoset File。

(2) 运用地图控制工具
在建立了地图视图之后,开发人员可以通过MapX提供的工具接口完成对用户事件的响应。在MapX中,工具分为2类,一类为系统工具,他们主要包括:放大、缩小、漫游、标注等地理信息系统经常使用的工具,对这类工具系统使用固定的事件响应程序;另一类为用户自定义工具,开发人员可以根据需要编写专门的事件响应程序。
使用地图控制工具一般要通过以下基本步骤:
创建用户自定义工具若在应用程序中要使用自定义工具,首先应当使用CreateCustomTool方法对其进行定义。

① 指定工具对应的编号,其范围为1~999之间。
② 指定工具类型。MapX中支持:
MiToolTypePoint点工具,用于对用户在地图上的单击鼠标事件进行响应;
MiToolTypeLine直线工具,用于对用户在地图上的绘制直线的操作事件进行响应;
MiToolTypeCircle圆工具,用于对用户在地图上的画圆的操作事件进行响应;
MiToolTypeMarquee矩形工具,用于对用户在地图上的绘制矩形的操作进行响应;
MiToolTypePoly折线工具,用于对用户在地图上的绘制折线的操作事件进行响应;
③ 指定该工具为当前工具时对应的光标。MapX中支持30余种常见的光标类型。
设置当前工具在一个地图窗口上任何时刻只能有一个工具发生作用,这个工具就是当前工具。MapX中,可以通过以下方法设置当前工具:
Map1CurrentTool =99
通过这条命令可以设置工具编号为99的工具为当前工具。
编写事件响应程序对于系统工具不必编写单独的事件响应程序,MapX会调用默认的方法对其响应。但对于用户自定义事件,则必须编写响应的事件响应程序。
根据工具类型的不同,事件响应程序分为2类:
一类是和miToolTypePoint,miToolTypeLine,miToolTypeCircle及miToolTypeMarq类工具相对应的ToolUsed事件。触发该事件时,MapX会传递相关参数给事件响应程序,这些参数包括:
ToolNum工具编号,(x1,y1)单击鼠标处坐标,(x2,y2)释放鼠标按键处的坐标(只对miToolTypeLine、miToolTypeCircle及miToolTypeMarq类工具有效),distance(x1,y1)与(x2,y2)间的距离, shift、controlshift、control健是否按下,*EnableDefault――布尔类型指针,对该指针置False可以阻止MapX对标准系统工具的响应,置True则使MapX对标准系统工具的做默认响应。
另一类是和miToolTypePoly 相对应的PolyToolUsed事件。触发该事件时,MapX除了会传递TooNum,shift,control,EnableDefault参数外,还会传递2个参数:
Flags用于反映绘制折线的状态,分3种情况:开始绘制(miPolyToolBegin)、结束绘制(miPolyTool End)、放弃绘制(miPolyTool EndEscaped)、正在绘制(miPoly ToolInProgress);Pts折线的节点集合。
(3) 示例
下面通过一个较为完整的例子说明在MapX平台上开发GIS系统的基本步骤。该实例运用Add方法显示图层,并定义了一个折线工具,在折线工具的事件响应程序中,计算了折线的地理距离。程序用Delphi语言实现,其流程图如下:






3结语
可以看出,MapX开发平台可以提供地理信息应用系统所需要的各主要方面功能,并具有开发方式灵活,接口简便的特点,不失为开发地理信息应用系统的理想平台。
参考文献
[1]Mapinfo . MapX Developer Guide
[2]黄杏元,汤勤地理信息系统概论[M].北京:高等教育出版社,1990