资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
2011 年 第 20 卷 第 9 期 http:/www.c-s-a.org.cn 计 算 机 系 统 应 用 Application Case 实用案例 153基于MapInfo与MapX的电子地图 彭 刚1,王艳琴2,王 涛1,刘 宇2 1(桂林空军学院 教育技术中心,桂林 541003) 2(桂林电子科技大学 计算机科学与工程学院,桂林 541004) 摘 要:随着 GIS(地理信息系统)的发展与完善,它的开发工具也日趋成熟。MapInfo 公司顺应这发展潮流,开发了 MapInfo 以及 MapX 控件,可以实现复杂的 GIS 系统设计。根据桂林市规划地图,首先利用 MapInfo 9.5构建地图数据,然后通过 Geoset Manager 生成 Geoset 格式文件,最后在 Visual Studio 2008 编程环境下、利用 C# 编程语言对 MapX 控件进行二次开发,最终实现桂林市电子地图。 关键词:GIS;MapInfo 9.5;MapX;C#;电子地图 Electronic Map Based on MapInfo and MapX PENG Gang1, WANG Yan-Qin2, WANG Tao1, LIU Yu2 1(Educational Technology Center, Guilin Air Force Academy, Guilin 541003, China) 2(Institute of Computer Science and Engineering, Guilin University of Electronic Technology, Guilin 541004, China) Abstract: With the development and perfection of GIS (Geographical Information System), its developing tools have been getting riper day by day. Complying with this trend, MapInfo Company has developed MapInfo and MapX control, which can realize the design of complicated GIS system. The paper is based on Guilin planning maps. Firstly, we use MapInfo 9.5 to structure map data and build Geoset file through Geoset Manager. Then, we carry out the secondary development to MapX control under Visual Studio 2008 programming environment and by C# programming language. Finally, the electronic map of Guilin is implemented. Key words: GIS; MapInfo 9.5; MapX; C#; electronic map 本课题以桂林市规划地图为基础, 在 Visual Studio 2008 开发环境下,通过利用 C# 语言对 MapX 控件进行二次开发。在构建地图数据阶段,利用 MapInfo 9.5实现了地图的基本绘制。 1 工具概述 1.1 MapInfo 9.5 MapInfo 是美国 MapInfo 公司的桌面地理信息系统软件,是一种数据可视化、信息地图化的桌面解决方案。MapInfo 公司把 MapInfo 软件的市场定位总结为 MapInfo = Mapping + Information(地图+信息) ,正是基于该思想,MapInfo 软件充分体现了小型、灵活、简单的特点。目前,该软件的最新版本为 MapInfo 基金项目:国家自然科学基金(60933011) 收稿时间:2010-12-19;收到修改稿时间:2011-01-15 Professional 9.5 及其系列软件。 MapInfo 采用分层,使复杂的地图变成了简单易处理的多层次的地图层1。例如,桂林市的地图可设置县界、市区道路、商场大厦、政府单位、综合信息等层,给地图的输入、编辑带来很大的方便。 1.2 MapX 控件 MapBasic 是 MapInfo 自带的二次开发语言,利用MapBasic 编辑生成的 .mbx 文件能在 MapInfo 软件平台上运行,早期的 MapInfo 二次开发都是基于MapBasic 进行的。为了适应组件式软件开发的需要,MapInfo 公司在 1996 年推出了基于 ActiveX 技术的可编程控件 MapX,该软件随着 MapInfo 的升级而升级。 MapX 为开发人员提供了一个快速、易用、功能 计 算 机 系 统 应 用 http:/www.c-s-a.org.cn 2011 年 第 20 卷 第 9 期 154 实用案例 Application Case 强大的地图化组件。 在主流的可视化程序开发环境中,例如 Visual Basic、Visual C+ 等,在设计阶段只需将MapX 控件放入到窗体中,并进行编程、设置属性、调用方法和事件,就可以轻松实现地理空间数据的可视化,完成空间查询、地理编码等丰富的地图信息系统功能。 MapX 使用与 MapInfo 一致的地图数据格式,并实现了 MapInfo 的大多数功能2。它的主要功能有显示 MapInfo 格式的地图数据,支持地图的放大、缩小、平移、选择等操作,图层的自由控制,支持动态图层和自定义图层,强大的专题地图制作,简单的地理查询等。 2 地图设计与开发 2.1 逻辑结构 当出现地图规划变更时,只需要变更地图数据并重新生成 .gst 文件,然后覆盖应用程序安装目录中maps 文件夹下的地图文件即可3-5。 地图开发的逻辑结构如图 1 所示: 图 1 地图开发的逻辑结构图 2.2 地图功能 2.2.1 基本功能 MapX 内置了常用的标准地图工具,例如放大、缩小、平移、选择等,在按钮的单击事件中编写相关的代码即可实现相应的功能。 /地图操作:放大、缩小、平移、选择 axMap1.CurrentTool = MapXLib.ToolConstants. miZoomInTool; axMap1.CurrentTool = MapXLib.Tool Constants. miZoomOutTool; axMap1.CurrentTool = MapXLib.ToolConstants. miPanTool; axMap1.CurrentTool = MapXLib.ToolConstants. miSelectTool; 2.2.2 鹰眼图 鹰眼图是 GIS 的一个基本功能,它是为了方便用户浏览地图而设,其作用是显示地图框中所显示的地图在整个地图中的位置,下面通过代码示例讲述鹰眼图的实现。 (1) 在主图的 MapViewChanged 事件中实现鹰眼图与主图的同步显示,即主图视图改变影响鹰眼图矩形框的重绘,主要代码如下: /设置矩形边框样式 tempStyle.RegionPattern = MapXLib.FillPattern Constants.miPatternNoFill; tempStyle.RegionBorderColor = 255; tempStyle.RegionBorderWidth = 2; / 在临 时图层添 加大小为* 主图 的边界 的* Rectangle 对象 MapXLib.Points pnts = new MapXLib.Points(); pnts.AddXY(axMap1.CtlBounds.XMin, axMap1.Ctl Bounds.YMin, 1); pnts.AddXY(axMap1.CtlBounds.XMax, axMap1. CtlBounds.YMin, 2); pnts.AddXY(axMap1.CtlBounds.XMax, axMap1. CtlBounds.YMax, 3); pnts.AddXY(axMap1.CtlBounds.XMin, axMap1.Ctl Bounds.YMax, 4); /返回独立的 Feature 对象(区域图元),构建自点的集合 TempFea=this.axMap2.FeatureFactory.CreateRegion(pnts, tempStyle); /在图层中创建并返回新的图元,带有 Source 对象图元的属性 m_fea = m_eagleLayer.AddFeature(TempFea, Type. Missing); 2011 年 第 20 卷 第 9 期 http:/www.c-s-a.org.cn 计 算 机 系 统 应 用 Application Case 实用案例 155m_fea.Update(true, Type.Missing); (2)导航功能的实现 支持用户的两种导航操作方式:一是当用户在鹰眼图中通过单击鼠标导航主图时,将主图的中心坐标设为鼠标单击处的坐标;另一种是当用户在鹰眼图中通过指定鹰眼矩形框(方法是按住鼠标左键拖动)来导航主图,根据矩形框的坐标位置设置主图的边界。在 axMap2_MouseDownEvent 中编写相关的代码实现第一种导航,主要代码如下: IsMouseDown = true; axMap2.ConvertCoord(ref e.x, ref e.y, ref MapX, ref MapY,MapXLib.ConversionConstants.miScreenToMap) this.axMap1.CenterX = MapX; this.axMap1.CenterY = MapY; 2.2.3 跟踪鼠标位置 打开地图后,当鼠标在主图中移动时,状态栏中显示鼠标所在点的相应的经纬度信息。 2.2.4 快速定位 在对应位置分别输入经纬度值,即可定位到相应的点,该点将以位图的形式显示于地图上。 2.2.5 测距Ruler 工具 Ruler 工具,要在工具使用时执行代码,具体操作步骤如下: (1)在主图的 MouseDown 事件中捕获起始点,需在 MouseDown 事件中编写代码。 事件中的代码获取单击点的坐标 floatX 与 floatY,然后把它从屏幕坐标转化为地图坐标,并存储为(Xdown,YDown) ,它代表距离测量的起始点。相关代码如下: private double XDown = 0; private double YDown = 0; private double CurDownX = 0; private double CurDownY = 0; axMap1.ConvertCoord(ref floatX, ref floatY, ref CurDownX, ref CurDownY, MapXLib.Conversion Constants.miScreenToMap); XDown = CurDownX; YDown = CurDownY; (2)捕获移动鼠标在另一点停下时得到终止点,在 MouseMove 事件中编写如下代码: double x = 0; double y = 0
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号