1地理信息系统的发展 地理信息系统(GIS:Geographic Information System)作为一门综合性的技术,是一种对空间数据进行采集、存储、更新、分析、输出等处理的工具,而软件是其核心内容之一。GIS技术的发展,在软件模式上经历了功能模块、包式软件、核心式软件,从而发展到组件式GIS和WebGIS的过程。传统GIS虽然在功能上已经比较成熟,但是由于这些系统多是基于十多年前的软件技术开发的,属于独立封闭的系统。同时,GIS软件变得日益庞大,用户难以掌握,费用昂贵,阻碍了GIS的普及和应用。组件式GIS的出现为传统GIS面临的多种问题提供了全新的解决思路。
2 组件式GIS 2.1 组件式GIS的基本思想及特点 组件式GIS(Components GIS,以下简称ComGIS)是指基于组件对象平台,具有标准的接口,允许跨语言应用,因而使GIS软件的可配置性、可扩展性和开放性更强,使用更灵活,二次开发更方便。其基本思想是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS控件之间,以及GIS控件与其它非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。
把GIS的功能适当抽象,以组件形式供开发者使用,将会带来许多传统GIS工具无法比拟的优点。主要优点: (1)小巧灵活、价格适中,性价比高; (2)无须利用专门GIS开发语言,可直接嵌入MIS开发工具进行开发; (3)可以实现强大的GIS功能; (4)开发更简捷,代码实现简易。
2.2 目前流行的组件式GIS软件平台
目前应用比较广泛的是:MapInfo开发的MapX以及ERIS公司开发的MapObjects。下面将重点对利用MapInfo公司开发的MapX进行GIS软件开发特点以及主要过程进行分析。
MapX是具有强大地图分析功能的ActiveX控件产品,能支持绝大多数标准的可视化开发环境如Visual C++、VisualBasic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。MapX提供了各种工具、属性和方法,熟练的运用这些工具、属性、方法通过编程可以满足不同开发需求。
用MapX开发ComGIS系统的基本方法如下图1示:

2.3 MapX简介 2.3.1 MapX的数据组织 MapX中的数据分为空间数据和属性数据.其中图形矢量数据以MapInfo标准文件格式.tab存贮和管理,属性数据用关系数据库进行管理,属性数据和空间数据之间通过目标标识进行关联。空间数据在MapX控件中采用分层存放的结构,每张单独的地图被表示成一个图层,每个图层存储为4个基本文件:属性数据的表结构文件.tab,属性数据文件.dat,交叉索引文件.id,空间数据文件.map. 这种分层存放的结构,可以提高图形的搜索速度,便于各种不同数据的灵活调用、更新和管理。属性数据是用来反映与空间实体相对应的属性,在系统中用关系数据库的二维关系表进行存储和管理。
2.3.2 MapX的模型结构 MapX组件的基本组成单元是Object(单个对象)和Collection(集合)。其中集合包括对象,是多个对象的组合。每种对象和集合负责处理地图某一方面的功能.位于顶层的是Map对象,Layers、DataSets、Annotations是Map对象下面的3个重要的分支。其中Layer主要用于操作地图的图层,DataSet用于实现地图与数据的绑定,访问空间数据表,Annotation用于在地图上增加文本或者符号。
3 利用VB,MapX,SQL开发ComGIS系统 结合笔者所开发的一个电力地理信息系统来看如何开发ComGIS系统。
3.1 编辑功能实现 ?属性数据的编辑 包括对高压线路,配电线路,电力电缆线路,变电站,配电变压器,道路,建筑物,行政区域等属性数据库表的录入与修改。可采用SQL Server等关系数据库来存储,这样便于数据的维护和共享使用。
?图形数据的编辑 包括对图形对象点,线,面录入与修改,以及对其风格进行编辑。 GeoSet是在Geo Manager中建立好的GST文件,是图层及其设置的集合,控制程序中显示的地图,对图层进行编辑和管理.通过对GeoSet属性赋值可方便的引入所需的地图集,并在引入的同时对Map对象初始化。 Map1.GetSet=opendialog1.filename // 从地图文件夹中引入地图 对于由图层组织起来的MapX地图,可通过对图层的创建、增加、删除、移动、缩放等来编辑,还可以创建用于实时跟踪的活动图层和可绘制特殊图形的用户自定义图层。 Set lyrMyLayer=Map1.Layers.CreateLayer("MyLayer", , 1) // 新创建一个图层 Set Map1.Layers.AnimationLayer=lyrMyLayer // 将新建的图层设置为活动图层 通过MapX提供给用户的一些通用工具,对Map对象的Current Tool属性赋值,可方便的实现一些诸如放大、缩小、漫游等多种GIS基本操作功能。还可以使用自定义工具来增强这方面的功能。 Map1.ZoomTo(x1,y1,x2,y2); // 将地图窗口缩放到某一特定位置 Map1.Rotation=45; // 将当前地图窗口旋转45度 Map1.CurrentTool=miPanTool; // 实现地图漫游 Map1.CurrentTool=miLableTool; // 指定位置加标注 Map1.CreateCustomTool MyTool,miToolTypeLine,miSizeAllCursor // 创建标尺工具 MapX提供了四种类型的Feature对象:区域、点、线、文本可通过访问、修改、删除及自定义feature对象的各种属性来实现对地图的编辑。 Dim f As MapXLib.Feature Dim ps As MapXLib.Points ps.AddXY x1,y1 ps.AddXY x2,y2 // 画线 Setf=Map1.Layers(1).AddFeature(Map1.FeatureFactory.CreateLine(ps,Map1.DefaultStyle))
3.2 查询功能实现 MapX以Dataset对象提供的方法进行数据绑定,实现与数据库交互,从而实现对图形的属性信息查询或通过属性信息查询空间目标。对于设备等的信息管理,可根据图库数据一致性对图形和属性进行空间查询。 数据绑定: Dim parm As New ODBCQueryInfo parm.SqlQuery = "select * from 数据表名" parm.DataSource = "数据库名 " // ODBC数据源名字 parm.ConnectString = "ODBC; " Set ds = Map.Datasets.Add(miDataSetODBC, parm) 区域查询:可查询任何一个区域图元中编辑图层在该区域中的图元数,既可实时显示某一范围内的各种需要的地理信息,又可通过这种方式来判断地理元素之间的相对位置及关系,从而进一步分析基于地理接线图的空间连接关系,实现网络分析,跟踪和动态着色。 //查询编辑图层上矩形区域内图元 Dim rect As MapXLib.Rectangle Dim curFeatures As MapXLib.Features rect.set(x1,y1,x2,y2) Set curFeatures = searchLayer.SearchWithinRectangle(rect,searchType) 查找定位:确定查找图层,找到匹配图元并将地图放大,查找结果定位到地图中央。 Dim FindObj As MapXLib.Find //据数据库中的字段值进行查找定位 Dim FoundFeature As FindFeature Set FindObj = Map1.Layers("图层名称").Find Set FindObj.FindDataset = Map1.Datasets("图层名称"&"dataset") Set FindObj.FindField = FindObj.FindDataset.Fields("域名") Set FoundFeature = FindObj.Search ("域值") If (FoundFeature.FindRC Mod 10 = 1) Then Map1.Zoom To 缩放值, FoundFeature.CenterX, FoundFeature.CenterY
3.3 分析功能实现 ?地理运算 测量两个地理对象间的直线、折线距离等地理运算,需要注意的是鼠标在MapX组件中截获的点的坐标是屏幕坐标,而在计算中我们往往是使用MapX中的地理坐标系,所以坐标转换是经常而且必要的步骤。Map1.CreateCustomTool (CUSTOM_MEASURE_TOOL,miToolTypeLine,miCrossCursor,miArrowCursor, miArrowCursor,unusedParam)//自定义客户工具 Private Sub Form_MouseMove (Button As Integer,Shift As Integer, X As Single, Y As Single) …… If Map1.CurrentTool=CUSTOM_MEATURE_TOOL Then Map1.ConvertCoord x1, y1, Coordx1,Coordy1, miScreenToMap distance=Map1.Distance(XDown,YDown,Coordx1,Coordy1) // 对两点距离进行计算 End If End Sub
?空间分析 系统支持空间对象的缓冲区分析及多种专题图分析(范围值专题图、独立值专题图、点密度专题图、等级符号专题图、直方图专题图、饼图专题图)。可根据数据库中不同字段生成相应专题图,通过选择不同的专题图种类,得到各种直观的专题图信息。 Dataset.Themes.Add (专题图类型,字段名,专题图名称) Legend对象用于修改专题地图的图例;Themeproperties用于修改专题图的显示属性.还可利用专题图来动态显示带电区、停电区和恢复路径,基于某一属性可表达出不同的区域及线对象。
3.4 地图导出的实现 MapX以矢量化的形式,将地图对象存储在地图文件,只有在安装了MapX或Mapinfo相应产品的客户机上才能够显示地图,而利用MapX提供的导出功能,将地图对象转换成BMP等标准的光栅图形格式,就可供其他应用程序使用了。 Map1.ExportMap(Location,Format,[W],[H]) Location:导出后的光栅图像文件名 Format:导出时的格式 [W]:导出时的横向放大倍数 [H]:导出时的纵向放大倍数 Map1.ExportMap("c:\pincture\pic1.jpg",miFormatJPEG,2,2),则将当前地图导出到c:\picture\pic1.jpg文件中,并将地图纵,横同时放大为原来的两倍
4 结束语 在实际的开发过程中可以根据具体的需要来选择开发方式。笔者利用MapX和VB,SQL实现的电力GIS系统,不仅开发周期短,而且系统运行稳定,具有很好的可扩充性。相信随着GIS技术的发展以及市场需求不断增加,组件式GIS技术会得到更广泛的应用。
|