基于MapX控件的电子地图软件的研究与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
- 47 -
基于MapX 控件的电子地图软件的研究与实现
郎 杰,徐 虹
(桂林长海发展有限责任公司,广西 桂林 541001)
【摘 要】文章应用MapX 控件实现了电子地图软件的基本功能,着重以Visual C++显示地图和对图层进行操作为例,说明利用MapX 控件进行Maplnfo 地理信息系统二次开发的方法,并对软件构成和实现功能进行了详细的介绍。
【关键词】MapX;Visual C++;电子地图;Maplnfo
【中图分类号】TP311 【文献标识码】A 【文章编号】1008-1151(2009)08-0047-02
(一)引言
MapX 是MapInfo 公司提供的具有强大地图分析功能的ActiveX 控件产品,它提供了一个最简单和最节约成本的方法,用来将地图功能嵌入到新的和现有的应用中。
它可以被
快速集成到使用面向对象语言的客户端应用程序中。
通过
MapX,可以按照开发人员的意愿在应用程序中加入强大的制
图功能。
只需在设计阶段将MapX 控件放入窗体中,并对其进行编程,设置属性、调用方法或相应事件,即可实现数据可视化,专题分析,地理查询,地理编码等丰富的地图信息系统功能。
MapX 还可以方便地将一些有特殊意义的数据记录在地图上,使用户更直观地了解地理信息,从而为用户的决策提供根据。
VC++是目前较为流行的可视化开发编程工具,有较好的组件集成功能,是电子地图应用程序较为理想的开发环境。
随着计算机的飞速发展,电子地图在农林、水利、交通、城市、资源管理与灾害监测等方面取得了广泛的应用。
下面本文将讨论以Visual C++为开发平台,用MapX 开发电子
地图软件的具体方法。
(二)软件构成
1.软件的特点 软件采用MapX 组件与面向对象可视化编程语言Visual
C++集成的二次开发模式,具有电子地图所必备的基本功能;同时该软件还具有可扩展性,使开发者能根据实际情况添加其它应用功能,能够根据应用的变化而不断改进系统功能。
软件界面友好,使用方便,维护简单,稳定性好,通用性强。
2.软件的主要功能介绍 软件的主要功能包括文件、编辑、查看、工具等。
并提供地图工具栏,方便用户的使用。
(1)文件 “文件”菜单中可以打开电子地图或者导入电子地图的图层,也可以把用户编辑过的地图场景保存下来。
MapX 支持
与MapInfo 一致的数据格式,可直接开.tab、.gst 等文件。
(2)编辑
“编辑”菜单中选项可以根据用户不同需要,在图层上
进行放置符号注释、文本注释、图元标注等编辑操作。
(3)查看 “查看”菜单提供了查看属性页、查看整个图层、工具栏、比例尺等子菜单。
查看整个图层,使用户可以浏览全图。
工具栏、比例尺何以由用户选择加载或隐藏软件的工具栏及是否在地图上显示当前比例尺。
(4)工具 “地图工具”菜单中选项具有地图的放大、缩小、居中、漫游、平移、点选图元、圆选图元、多边形选择等功能。
同时用户可以输入经纬度对地图定位、进行地名查找和距离测量,方便用户使用。
3.软件的界面 软件的运行界面,如图1所示。
图1 软件运行界面 (三)软件的实现
在VC 环境下集成MapX 开发电子地图软件是将MapX 作为控件插入到应用程序中,然后通过设置其属性和调用其方法,响应其事件来实现的。
系统具体的开发步骤如下: 1.软件框架的生成 首先打开VC新建一个基于MFC的应用程序,然后在工程中包含MapX控件,方法为从“Project”菜单中选择“Add To Project”的“Files”选项,将MapX.cpp和MapX.h文件包含到工程中,在视图类CDituView中定义一个MapX实例:CMapX m_ctrlMapX,并声明MapX的控件ID:#define IDC_MAP 100,就可以通过VC调用MapX的属性和方法来实现所需的功能。
2.软件初始化 首先在类向导中为WM_CREATE、WM_SETFOCUS和WM_SIZE消
息创建处理程序,以在创建视图时创建MapX控件,语句如下: if (m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,600,600),this, IDC_MAP) == false) { return -1; }
【收稿日期】2009-04-15
【作者简介】郎杰(1982-),男,桂林长海发展责任有限公司设计师,从事装备系统软件设计;徐虹(1986-),女,桂林长海发展责任有限公司设计员,从事终端软件设计。
- 48 - 然后通过WM_SIZE 消息处理函数调整地图大小,使其与客户区域大小保持一致;通过WM_SETFOCUS 消息处理函数确保只要窗口被激活,MapX 就获得焦点。
为了方便该软件的使用,使软件初始运行显示预设地图。
可以将地图文件夹拷贝到可执行文件的同目录下,然后在WM_CREATE 消息处理函数
OnCreate()中取当前应用程序路径,将该地图显示出来,并
取消文件标题的显示,打开地图程序代码与此一致,程序代
码段如下:
m_ctrlMapX.SetGeoSet(sa); //sa 为地图文件完整路径
m_ctrlMapX.SetTitleText(""); // 不显示标题
至此,已完成程序的初始化过程,程序界面如图1所示。
3.地图编辑
MapX 提供了对象编辑工具使用户能在地图图层中创建和修改图元。
有四种标准的对象创建工具:添加点、添加线、添加折线和添加区域。
这些工具把新的图元添加到那些用 yers.InsertionLayer 属性指定的任一图层上。
实现画点的代码如下: void CDituView::OnMapToolDian() { layer.GetStyle().SetSymbolFontColor(miCol orOrange); // 设置符号颜色 layer.GetStyle().SetSymbolCharacter(54); // 设置Symbol 样式 layer.GetStyle().PickSymbol(); // 显示Symbol 样式选择对话框 m_ctrlMapX.SetCurrentTool(miAddPointTool); // 设置当前工具为画点工具 } 画线和画面功能的实现与以上代码相似,只需设置不同的符号样式即可。
用户还能够在地图中添加文本标注,代码如下:
m_ctrlMapX.SetCurrentTool(miTextTool);
4.地图工具
电子地图软件都提供如放大缩小、居中、漫游、图元选
择、定位与查询、测距等基本功能。
通常采用MapX 通用工具,
MapX 中常有的系统定义工具有:放大与缩小、居中、漫游、
图元的选择等工具。
可以非常方便的实现上述功能。
MapX 控
件本身没有提供测距功能,所以需通过创建定制工具来实现
本功能。
首先在OnCreate()函数中创建一个定制工具,将其ToolTypeConstants 值设为miToolTypePoly,以使其在使用时触发PolyToolUsed 事件,来实现折线测距的功能,其代码如下:
m_ctrlMapX.CreateCustomTool(CUST_DISTANCE, miToolTypePoly, miCrossCursor); 当用户选择测距功能时,设置当前工具ID 为所创建的定制工具,然后调用PolyToolUsed 事件处理函数OnPolyToolUsedMap(),在该函数中实现测距功能。
在函数中定义一个CMapXPoints 集合pts,用其表示用户在测距时所选的节点集合,然后调用MapX 的Distance 方法计算总的距离: double dDistanceTot = 0.0; n = pts.GetCount(); for (i=1; i<n; i++) { CMapXPoint pt1 = pts.Item(i); CMapXPoint pt2 = pts.Item(i+1); // 计算两点间距离 double d = m_ctrlMapX.Distance(pt1.GetX(), pt1.GetY(), pt2.GetX(), pt2.GetY()); dDistanceTot += d; }
(四)结束语
本文介绍了采用面向对象程序设计语言VC++,集成MapX
控件,实现了一个小型电子地图软件的基本方法,由于在开
发语言平台下嵌入了ActiveX 控件,可实现快速小型的组件
重用,代码共享,从而提高编程效率。
选择开发平台与特定的地图组件是非常重要的,在具体的开发过程中,要根据经济条件、硬件配置及时间等因素综合考虑择优选取。
本文旨
在为用户提供开发具有典型地图功能的应用软件接口程序的基本方法。
如要投入应用还需要根据具体情况,在此基础上进行完善与扩充。
【参考文献】 [1] 岳新利.张永进.孙毅.基于MapX 平台的地理信息系统开发技术的研究[J].实验室研究与探索,2003(8).
(上接第46页)据库表的内容必须作为顶级元素出现在
<before>块里。
<errors>:表示被 Diffgram 处理逻辑忽略
的元素。
(四)小结
SQL Server 2000 提供了许多处理XML 数据的有用特性。
通过分析利用这些特性,可以很容易地从数据库中提取XML
文档,这对基于XML 的Web 系统开发是非常有益的。
相信随着
对XML 应用的广泛以及领域的拓展和新的应用对传统的数据
库提出新的要求,在这个领域内,还有很多问题有待我们去
研究和解决。
【参考文献】 [1] 刑春晓,张志强,李骅竞,等译.XML 数据管理 纯XML 和支持XML 的数据库系统[M].清华大学出版社,2006. [2] 沈兆样,李劲.SQLServer2000 与XML 整合应用[M].北京:清华大学出版社,2001. [3] 飞思科技产品研发中心.SQLServer2000XML 应用开发[M].北京:电子工业出版社,2001. [4] 蔡瑞奎.用XML DiffGram 对SQL 数据库操作的方法[J].科技情报开发与经济,2007(21). [5] 黄芳.SQL 数据支持XML 技术[J].山东省农业管理干部学院,2006(22).。