第34卷第1期 , 黑龙江水专学报 Vo1.34.No.1 Mar.,2007 2007年3月 Journal of Heilongjiang Hydraulic Engineering College 文章编号:1000~983312007)01—0126—03 基于MapObj ects的电子地图信息系统的设计与实现 孟庆武 ,刘殿彬2,孔 达3 (1.黑龙江工程学院,哈尔滨150050;2.大庆市勘测设计院,黑龙江大庆163000;3.黑龙江大学水利电力学院,哈尔滨150086) 摘要:利用/ ̄pObiects2.3在VisualC++6.0环境下开发是GIS开发的主要途径,介绍用]VI ̄pOUects2.3在VisualC++6.0环 境下开发的电子地图系统及其实现方法。 关键词:M0;电子地图信息系统;设计;实现方法 中图分类号:TP399:P208 文献标识码:A .Design and Implementation of Eleetroni c Map Information System Based on MapObiects MENG Qing-wu‘,LIU Dian-bin2,KONG Da3 (1.HeilongjiangEngineering Institute,Harbin 150050,CNna;2.DaqingSurveyDesign Institute,Daqing 163000,Heilon ̄iang,China;3.College ofHydrau/ic and E1ectric Power,Heilor ̄iang University,Harbin 150086,China) Abstract:The development with MapObjects2.3 under Visual C++6.0 environment is the major way for de— veloping the GIS.This paper introduces the designing and implementing of the electronic map system with Ma— pObjects2.3 under Visual C++6.0 environments. Key words:MapObjects;electronic map information system;designing;implementing 运用MapObjects2.3提供的组件和嵌入的各种 类,在Visual C++6.0的开发环境下进行组件式地 理信息系统开发,实现地理信息系统的基本功能,即 开发一个通用型的地理信息系统——电子地图系 统。结合MapObjects2.3组件的特点、Visual C++ 6.0的优势、当前地理信息系统的需求特点和自身 的技术能力,得到一个完整的小型地理信息系统n]。 1总体设计 根据系统分析说明,本系统所需实现的目标和 特点,就是要实现地理信息系统的基本功能[2],现定 义本系统工程名为SnrnaorMap,完成本组件式地理 信息系统的设计、开发和软件的实现。 1.1系统的体系结构 “SnmaorMap系统”根据功能需求可分为7个 子系统。 1.2系统的功能框架 系统的功能框架,见图1。 1.3系统的开发结构 系统的开发结构,见图2。 图1系统功能框架图 Fig.1 Systemfunctionframe 收稿日期:2006—11—26;修订日期:2007—01—17 1.4系统数据流结构图 作者简介:孟庆武(1963一),男,黑龙江佳木斯人,副教授,主要 研究方向:地理信息系统。 由于本系统使用的是MapObjects2.3组件 , 数据来源于地图图层,没有使用的数据库。根 维普资讯 http://www.cqvip.com
第1期 孟庆武,等,基于MapObjects的电子地图信息系统的设计与实现 127 查询 螺 ● ———————- .£牲rrI 垛 结果 g ∽ 图2系统的开发结构 Fig 2 System developing structure 据系统的功能要求,地图数据大致要经过一下编辑 和显示过程,见图3。 图3系统数据流图 Fig.3 System data flow 2系统功能的实现 本系统为建立工程名为SnmaorMap的基于 SDI的应用程序框架 J。当加载了MO地图控件 后,就实现了本系统的基本程序框架,包括菜单、工 具栏和主图显示区等要素。下面分别介绍浮动工具 栏、浮动窗体、状态栏重置、图例窗体和导航器窗体 的创立等部分的实现方法。 2.1 浮动工具栏的创建、状态栏重置 浮动工具栏的创建分为以下步骤: (1)工具栏资源的创建:在Visual C++6.0的 工作区内选”ReosurceView”,在其内创建要创立浮 动工具栏的资源控件及ID号。 (2)在资源头文件Resource.h内加入需创建的 工具栏的资源号的宏 ,如#define IDW—QUERY BAR 103。 —(3)创建工具栏的ID管理结构体,如static UINT BASED~CODE QueryButtons[]= {ID—QUERY—LINE, ID—QUERY—EXPRESSION, ID—QUERY—RECT, ID—QUERY—POLY, ID—QUERYDISTANCE, —ID—QUERY—AREA}; (4)在CMainFrame:OnCreate()中新建立以上 资源的浮动工具栏 J。 2.2浮动窗体的创建 将CControlBar类继承生成~个能装载对话框 和各种组件的控制包类,然后在该类的对象内加入 “Child’’型的对话框,并在CMainFrame::OnCreate ()内创建该窗体,便能实现浮动窗体的功能。浮动 窗体上的一切组件都是通过该“Child’,型的对话框 实现的。 2.3图例窗体和导航器窗体的创立 即SDI窗体的分割。在CMainFrarne::OnCre. ateClient()函数内定义分割类CSplitterWnd的对 象l7],并重新设置分割后的各窗体的布局。在分割 后的窗体内加入一个FormView视图类型的对话 框,并拽人MO21legend、MO等控件,便实现了界面 的结构,等待各模块功能的加入。 2.4图层与数据管理 (1)图层的添加:下面以SHP格式为例说明实 现添加图层的函数调用关系,见图4。 CMoDataConnection.CoB/] ̄ ● cM【)Dataco¨necli H 。Ge0D H M0Md_pLayer 图4 层管理对象结构图 Fig.4 Graphical layer management object structure (2)图层信息的显示:根据上面所述MO类对 象制作两个函数分别用于地图坐标系统的获取Eng —GetLayerDataPara()和统计图层的基本信息Eng— GetLayerField(),当在点击某图层标题时触发事件 调用以上两个函数,获取数据,并显示。 (3)重复图层的整理:用CMoLayers的函数得 到图层的总数并运用CMoMapLayer.GetTag()获取 各图层的附加属性信息且存储于CStringArray内, 然后从下而上搜索判断各图层,删除重复图层。 (4)图层的显示状态管理:运用了Mo2Legend 控件的SetLayrerVisible(Index,BValue)方法进行控 制;全屏显示主要运用M02Legend控件的getAc. tiveLayer()函数得到当前图层索引,并用CMoMa. pLayer的GetExtent()函数获取该图层数据需要显 示的范围,并赋给Map控件作为地图控件的显示范 围。 (5)图层显示设置:主要运用符号对象CMo. Symbol对图层要素重新进行符号化。采用CStatic 类继承开发颜色类和用组合框设置样式的方法获取 新的符号信息,如颜色、线型、边框等。对栅格数据 图像设置采用对CMolmageLayer对象成员函数的 调用。 (6)图层数据表的编辑和输出:本功能大量运 用了MO组件数据访问对象组的相关类对象。包 括 CMoReeordset、CMoTableDesc、CMoFields、 CMoField等对象的多种函数。特别是在数据编辑 维普资讯 http://www.cqvip.com
128 黑龙江水专学报 第34卷 功能中,对MFC的CListCtrl类进行了继承开发,使 其具有CEdit类的特点,完成在List Control控件上 的直接更改编辑。 (7)图层删除:运用CMapl对象的GetLayers ().Clear()便可以删除所有的图层,而使用GetLay— ers().Remove(n) ̄I]I可以删除第n索引号的图层。 2.5地图显示 便可实现 J。 (2)点击拾取:经过图上点、线的坐标转换,然 后利用CMoMapLayer.SearchByDistance()函数方 可实现拾取记录的储存,在有记录被拾取时,弹出数 地图显示的各功能只需用地图控件对象 CMapl的4个函数便可以实现。即,获取与设置地 图数据坐标范围矩形的GetExtent()、SetExtent() 函数和全屏函数GetFu1]Extent()、漫游函数Pan()。 2.6地图编辑与专题图的制作 (1)字符标示:通过对话框的设置实现对制作 标示的属性项等各种要素的选择,然后使用CMo TextSymbol对象方可实现在地图控件上的标示。 (2)点统计地图:MapObjects组件在地图显示 对象组中提供了一个专门编辑点密度的类对象 CMoDotDensityRenderer,其能实现点统计图的功 能,它包括12个属性函数。其实现地图符号化流程 图与图4类似。 (3)数值统计地图:本功能主要依据MO组件 的CMoValueMapRenderer对象实现的,其实现流程 图与图4类似。 (4)柱状图与饼图:柱状图和饼图都是利用 MO的CMoChartRenderer对象实现的,其符号化流 程图与图4类似。 (5)分段显示地图:本功能主要依据MO组件 的CMOClassBreaksRenderer对象实现的,其实现流 程图与图4类似。 (6)单色显示(地图显示恢复):将作过专题地 图的图层恢复为图层在初始化时绘制的颜色。只需 要在当前图层将CMoMapLayer对象SetRenderer() 函数的参数设置为0即可,0表示用填充模式符号 化图层。 2.7地理查询与量测计算 (1)查询显示的实现:在地理查询和量测计算 中,需要在图上着色被选中的实体和量测计算的范 围,以方便用户观察。由于被获取的记录都存储于 CMoReeordset对象中,因此利用CMoSymbol对象 对CMoRecordset对象中记录的所有实体进行着色, 参考文献: [1]刘[3]薛据对话框利用CMoFields、CM0Field、CMoTableDesc 等对象的成员便能显示属性数据。 (3)几何拾取(线、矩形、多边形):其实现方法 与点击拾取方法基本一致,只是需要在图上返回拾 取的范围几何数据,只需要运用CMapl对象的 TrackLine()、TrackRectangle()、TrackPolygon()等 函数便可以达到目的。 (4)量测计算:在折线长度计算中利用CM。Line 对象的Get ()函数并累加、在多边形面积计算 中利用CMoPolygon对象的Ge 蚴()函数便可以实 现计算目的,最后计算结果显示在状态栏中。 2.8地图管理 (1)地图设置:地图设置利用一个配置批处理 文件储存设置数据,通过对话框设置地图的背景颜 色、选择颜色、查询颜色、拾取精度和字体显示默认 比例等。使用CMapl对象的SetBackColor()函数 设置背景颜色,其它设置的数据在需要的时候去配 置批处理文件中获取 J。 (2)图像输出:利用CMapl对象的ExportMap— ToJpeg()、ExportMap()函数可以使矢量图层转换 成为栅格图像,因此可以轻松实现图层格式的转换 和输出。 (3)导航器(鹰眼):主要运用地图控件的消息函 数实现消息的实时传递,通过OnMouseDownMap ( )、 OnMouseMoveMap ( )、 OnAfterTrack— ingLayerDrawMap()以上几个函数的设置便可以实 现从导航器到主图的功能,要使主图的变化在导航 器也能显示,只要在每次做时发送消息给导航器即 可。 3结语 利用MapObeets控件进行组件式地理信息系 统开发是GIS开发的主要和流行的手段。本文通 过利用MapObjects在Visual C++6.0环境下开发 电子地图的实例,探讨电子地图开发的基本过程和 方法。 光.地理信息系统二次开发教程——组件篇[M].北京:清华大学出版社,2003.30—35,56. 伟.MapObjects地理信息系统程序设计[M].北京:国防工业出版社,2004.89—95. 刚,等.GIS设计与实现[M].武汉:华中科技大学出版社,2003.25—34. [2]毛锋,沈小华,艾丽双.地理信息系统理论与应用丛书——ArcGIs8开发与实践[M].北京:科学出版社,2002.20—40 [4]李满春,任建武,陈[5]韩鹏.地理信息系统开发——Ma鼢iects方法[M]。武汉:武汉大学出版社,2004.68—77. [6]罗光春.VisualC++6.0从入门到精通[M]北京:电子科技大学出版社,2001.114—120. [7] 吕军.v;sual C++6.0与面向对象程序设计教程:第二版[M]。北京:高等教育出版社,2003.46—67. [8]刘新贵.实现电子地图快速显示的策略和方法[J],测绘通报,2004,(1):54—55. [9]刘桥喜.煤矿安全地理信息系统的设计与实现[J],测绘通报,2004,(2):60—62.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务