1 MapX简介
MapX是MapIofo公司向用户提供的具有强大地图分析功能的32位OCX控件。编程人员在开发过程中可以选用自己最熟悉的可视化开发环境,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。同时,MapX采用基于MapInfo Professional的相同地图化技术,可以实现MapInfo Professional具有绝大部分地图编辑和空间分析功能;MapX提供了各种工具、属性和方法,非常容易实现这些功能,因此近年来得到了迅猛发展。
1.1 MapX的空间数据结构
空间数据结构是GIS的基石。GIS通过这些地理空间拓扑结构建立地理图形的空间数据模型并定义各空间数据之间的关系,从而实现地理图形和数据库的结合。如图1所示,地理信息系统采用分层管理的方法管理地图数据,同一类型的空间对象存放在相同图层中。
1.2 MapX对象模型
MapX控件采用面向对象的方法处理地理信息系统,对地理数据的操作实际上是对各类对象的操作。MapX的基本组成单元是Object(单个对象)和Collection(集合)。其中集合包括对象,是多个对象的组合,每种对角与集合负现处理地图某一方面的功能。MapX主要包括以下对象:
(1)Map
Map是MapX的顶层属性,每个Map对象主要包括Datasets、Layers、Annotations三个对象集合。
Map对象包括一些主要的属性,如Zoom用来设置放大级别(在地图上显示的大小),Rotation控制地图的旋转角度,CenterX和CenterY用于设置地图显示窗口的中心坐标。
(2)Layers
在MapX中,地理信息按照图层的集合(Layers Collection)表示,每张单独的地图都被表示成单独的图层,所有的图层存储在Layers集合中。Layer对象由Features对象组成,Features对象又是由Feature对象组成,Feature对应于地图中的点、线、面以及符号等地图实体。
(3)GeoSet
GeoSet是在GeoManager中建立的。GST文件,类似MapInfo中的WorkSpace概念,是图层及其设置的集合,用于控制程序中显示的地图。
(4)Datasets
在MapX中,属性数据的操作主要通过数据绑定实现,Datasets用于实现地图与数据的绑定。数据绑定的数据源可以是DAO、ADO、ODBC数据源、RDO、MapInfo Table文件,还可以是一个规定了格式的文本文件。要绑字一个数据源,首先要指定所绑定的图层,然后需要指定与图层中地图对象相匹配的关键字段。
(5)Annotations
Annotations集合提供了操纵地图中文字和符号的简单方法。Annotations位于所有其它图层的上方并且不与任何数据连接。
图2 对象添加
2 对象动态添加
在区域电力网络配置显示系统中,一个单独的变电站可以满足一定区域的供电需求。某个地区是否需要增加一个变电站,以满足该区域供电需求,增加了这个变电站后整个电力网络的覆盖范围达到什么水平。所以在系统中添加了某一型号的变电站后,要求该变电站的作用范围与整个区域存的电力覆盖范围结合起来,形成并动态显示整个区域的电力网络覆盖范围,以此判定该变电站建设的必要性以及该区域的电力网络覆盖范围是否能够满足供电需求。
变电站的建设表现在GIS显示系统中就是在地图上增加一个具有某些属性的地图对象。系统首先把各型号变电站性能参数存入数据库中,用户在系统界面上可以选择需要修建的变电站型号,系统连接数据库,读取相应的属性信息,然后采用鼠标单击的形式把所选对象安装在鼠标单击的位置,并利用MapX计算显示区域电力覆盖范围。
该功能的实现采用重画的方式。即系统首先删除地图上现存变电站的整体作用范围,然后读取数据库中需要添加对象的基本属性和地图上现存变电站的属性数据,这些数据为依据把地图上现存的以及需要安装的进行合并;合并后的整体作用范围添加到对应图层并在对应位置添加标示即可。最后在图上显示的就是区域电力网络的整体覆盖范围。
系统采用临时图层lyrobj存放安装对象(变电站)以及对象的整体作用范围,用Num存放临时图层上电站的数目(即区域现存变电站的数目,obj(i)表示第I个对象),对象pt(i)存放第I个电站的名称、作用距离、地理坐标等属性信息。实现地图对象添加的算法示意图如图2所示。
3 对象动态删除
一个单独的变电站可以满足一定区域的供电需求,对于实际的某些电站,如果遭遇自然灾害或者根据需要予以拆除,那么表现在地图上就是该地图对象(电站)会被删除,删除了该电站后,整个地区的电网覆盖范围将随之发生变化。电力管理部门可以此确定在发生意外的情况下,整个电力网络是否仍可以满足供电需求。
图3 对象删除
整个实现过程采用临时图层lyrobj存放安装对象(变电站)以及对象的整体作用范围,用Num存放临时图层上电站的数目(obj(i)表示第i个对象),对象pt(i)存放第i个电站的名称、作用距离、地理坐标等属性信息。
该功能的实现:首先判断选中的需要删除的地图对象(变电站)obj(k),并删除数组pt()和obj()中对应需要删除的项;然后删除需要拆除的电站的标示以及本地区所有电站的覆盖范围;随后读取数组pt()中对应电站的属性值,重画除需要删除的对象以外所有电站的覆盖范围,把各个对象的作用范围进行合并,并把合并后的整体作用范围添加到对应图层,在对应位置添加标示。这样就会得到拆除一个电站后本地区电力供应的覆盖范围。实现地图对象删除的算法示意图如图3所示。
在实际的GIS信息显示系统中,对象的动态操作是一个重要方面。利用本文介绍的这种方法开发的电力网络配置显示系统效率高、实时性强,为区域电力网络的高效配置提供了方便快捷的保障。本系统虽然基于MapX实现,但其实现地图对象动态交互操作的思路对WebGIS以及其他领域中地图对象的动态操作也有很强的借鉴意义。