基于Web墨卡托投影的导航电子地图设计
2017-02-27何碧容
何碧容,蔡 倩
(南京航空航天大学 自动化学院,南京 211100)
基于Web墨卡托投影的导航电子地图设计
何碧容,蔡 倩
(南京航空航天大学 自动化学院,南京 211100)
针对目前无人机地面测控站导航模块的局限,提出了基于Web墨卡托投影原理的导航电子地图的设计方案,使用ImageStone类库简化了电子地图的制作,并实现了电子地图的绘制、平移及缩放功能;在此基础上完成了航迹规划、实际飞行航线的实时显示以及航线保存等功能,大大提高了地面站的导航地图与导航信息融合显示的实时性;经过无人机仿真系统的测试,验证了方案设计的合理性和可行性,该导航电子地图能够高效、准确地完成各项导航任务。
Web墨卡托投影;导航电子地图;无人机;地面测控站
0 引言
由于在军事及民用方面的广泛用途和特殊功能,无人机的研发受到极大重视[1]。导航电子地图作为无人机地面测控站系统的重要模块,对监测无人机的飞行状况及实现无人机导航功能起着重要作用。导航电子地图要求除了可以实现电子地图的基本功能之外,还需要具备航线规划、航迹显示、导航参数显示等功能[2-4]。随着计算机技术的飞速发展,导航电子地图的设计逐渐成熟,目前国内学者已经设计实现的大部分方案均是基于ActiveX组件的二次开发[4-9],能很好的实现导航电子地图的导航功能。
在实际工程应用中,简化电子地图的制作以及提高地图分辨率成为目前亟待解决的问题。为了提升导航电子地图的导航性能,本文基于Web墨卡托投影原理,使用面向对象编程语言设计并实现了无人机地面站导航电子地图模块,开发过程无需依赖其他地理信息系统(geographic information system, GIS)软件,简化了电子地图的制作并提高了地图显示的分辨率和实时性。
1 地图投影模型
1.1 墨卡托投影
地图投影是利用一定数学法则把地球表面的经、纬线转换到平面上的理论和方法,投影方式有等角投影、等面积投影以及等距投影等。墨卡托投影采用等角投影方式,也称为正轴等角圆柱投影。 该原理假设地球被围在一中空的圆柱里,其基准纬线(即赤道)与圆柱相切,再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,将该圆柱体展开,得到一幅选定基准纬线上的“墨卡托投影”绘制出的地图。图1所示为墨卡托投影原理示意图。
(1)
图1 墨卡托投影原理示意图
1.2Web墨卡托投影
墨卡托投影没有角度变形,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从基准纬线处向两极逐渐增大。由于其等角特性,广泛用于航海、航空领域。Web墨卡托投影与常规墨卡托投影的主要区别就是Web墨卡托投影把地球模拟为球体而非椭球体,这种假设主要是为了计算简便,所引起的理论误差极小,当比例尺很大时,这种误差可以忽略不计。
将地球视为球体,设地球半径为R=6 378 137 m,则a=b=R,第一偏心率e=0。根据式(1)可以得到墨卡托投影式的简化形式:
(2)
2 地面站导航电子地图的设计
2.1 功能分析
无人机在起飞之前需要在导航电子地图上预设飞行航线,该预设航线信息将通过无线通信链路发送到机载导航计算机,引导无人机按照预设航线飞行。在飞行过程中无人机的实际航线与飞行状况等数据会通过下行链路传输回地面测控站,经过解析之后在电子地图上绘制出无人机的实际航线[5]。本文设计的导航电子地图的功能如下:
(1)实现简便快捷地对地图进行放大、缩小、平移、定位等基本功能;
(2)实现飞行航线的预设功能,能够灵活操作航点添加、删除等功能;
(3)实现无人机实际飞行航线的显示,并保存飞行数据。
2.2 软件实现
2.2.1 电子地图获取与显示
现在越来越多的电子地图服务用到瓦片地图技术,瓦片地图技术是一种地图预缓存技术,即将选定好经纬度范围的地图,按照瓦片级别和指定图片尺寸切成若干行和列的正方形图片,以指定格式保存成图像文件存储下来,形成金字塔模型的静态地图缓存[11-12]。本文使用瓦片地图下载器下载所需经纬度范围的地图文件,并将地图图片保存为JPG格式。
本文基于MicrosoftVisualStudio2010开发平台,使用MFC编程思想完成软件开发。MFC(MicrosoftFoundationClass,微软基础类库)是一套面向对象的函数库,它将大部分的WindowsAPI(ApplicationProgrammingInterface,应用程序编程接口) 封装到C++类中,以类成员函数的形式提供给程序开发人员调用[13]。本文使用MFCAppWizard向导工具创建地图显示窗口,在此基础上将已经下载好的电子地图图片绘制在窗口中。
本文设计了可手动选择地图文件的功能,即在地图显示窗口菜单栏上添加“地图选择”子菜单,为该子菜单添加消息响应函数,在函数中编写实现“打开文件”对话框功能的代码。鼠标单击该子菜单会弹出一个“打开文件”对话框,查找到目标地图文件并选中,则会在地图显示窗口中绘制出所选地图。程序运行效果如图2所示。
图2 地图文件选择对话框
图片的绘制需要用到专门的图像处理函数,本文使用ImageStone类库来实现对地图图片的操作。ImageStone是一套功能强大的C++图像处理库,它完全由头文件组成,可以对JPG、GIF、PNG、TIFF、TGA等格式的图像文件进行读写操作,能够实现约100种特殊的图像处理。显示地图图片之前需要加载地图文件并将图片选入设备描述表,创建一个ImageStone类库中FCObjImage类的对象并调用以下两个成员函数实现地图图片的显示功能:函数boolLoad(constwchar_t*szFileName,FCImageProperty*pProperty=0) 实现地图文件的加载,其中参数szFileName表示文件存储路径;函数voidDraw(HDChdc,RECTrect_on_DC,RECT*pOnImage=NULL)const实现地图文件的绘制,其中参数hdc为设备描述表的句柄,参数rect_on_DC为设备描述表的绘图区域,参数pOnImage为地图图片的绘制区域。
参数rect_on_DC与参数pOnImage均为屏幕坐标值,由于图片的绘制是在设备描述表所提供的画布上进行,则图片的绘制区域与设备描述表的绘图区域在坐标上有一个相对关系,为了确定参数pOnImage的值,需要进行屏幕坐标与平面坐标的相互转换。屏幕坐标系的坐标原点为屏幕左上角,X轴向右为正,Y轴向下为正;平面直角坐标系以屏幕中心为原点,X轴向右为正,Y轴向上为正。设平面坐标为(x,y),转换后的屏幕坐标为(m,n),则坐标转换公式如下:
(3)
本文所使用的地图图片在物理意义上表示了一定的经纬度范围,假设地图经纬度范围分别为经度lon0~lon1,纬度lat0~lat1,通过公式(1)将经纬度范围转换为平面坐标范围,设转换后的平面坐标范围分别为X轴imgx0~imgx1,Y轴imgy0~imgy1。由于图片是用像素来度量的,包含像素宽度和像素高度,若直接使用公式(2)来进行平面坐标到屏幕坐标的转换得到地图图片绘制区域,会导致图片变形失真。本文将设备描述表的绘图区域,即参数rect_on_DC设置为地图显示窗口的客户区大小(0,0,winwidth,winheight),使用公式(2)将该屏幕坐标转换为平面坐标(winx0,winy0,winx1,winy1),根据公式(3)确定地图图片绘制区域的左上角和右下角的屏幕坐标,即可避免图片变形。
(4)
2.2.2 地图平移及缩放功能实现
使用上述原理进行编程可以实现静态电子地图的绘制,接下来为地图添加平移及缩放等动态功能,使用户能够方便快捷地浏览地图。本文通过控制鼠标的操作实现地图的缩放及平移,鼠标滚轮前滚地图放大,滚轮后滚地图缩小,按下鼠标左键并拖动地图实现地图上下左右平移。
对地图进行平移及缩放操作实际上是根据平移量及缩放量修改地图图片绘制区域的屏幕坐标,从而将地图进行重绘。设movex为地图沿X轴平移的距离,movey为地图沿Y轴平移的距离,mapscale为地图的缩放倍数,将公式(2)进行修改得到公式(5),如下:
(5)
对地图图片的绘制进行编程实现时使用公式(4)所表述的原理进行平面坐标与屏幕坐标的相互转换,即可实现地图的平移及缩放功能。
本文通过控制鼠标滚轮的滚动来实现地图的缩放,在程序中添加WM_MOUSEWHEEL鼠标滚轮消息响应函数,设置初始缩放倍数mapscale=1,在函数中判断鼠标滚轮的滚动方向,滚轮前滚则将mapscale的值修改为mapscale×1.3;滚轮后滚则将mapscale的值修改为mapscale/1.3。根据所得新的缩放倍数对地图进行重绘即可。地图的平移是通过鼠标左键按下并拖动来实现的,因此需要对WM_MOUSEMOVE、WM_LBUTTONDOWN以及WM_LBUTTONUP这3个消息的消息响应函数进行重载。具体实现流程如图3所示。
2.2.3 航线规划
航线规划主要是根据目标航路预先设定好无人机的飞行任务,包括飞行航线、飞行高度、速度等。将规划好的航线绘制在电子地图上,并与无人机在执行飞行任务的过程中传输回来的实际航线进行比较,可以更加直观地观察到无人机的飞行状况,如遇特殊情况可以及时对无人机的航向作出调整。
图3 地图平移功能实现流程图
为了在规划航线时便于添加航点,本文通过控制鼠标的操作来实现航迹点的添加。点击鼠标右键会弹出“添加航点”、“删除航点”等子菜单,再用鼠标左键单击“添加航点”子菜单即可在鼠标所在位置绘制出一个航点。当添加多个航点时,程序自动将新添加的航点与前一航点用直线连接起来形成航线。若要删除某个已经绘制好的航点,则将鼠标放在该航点上并选择“删除航点”子菜单,程序自动删除该航点信息并将其余航点按照新的排序重新连接形成一条新的航线。
2.2.4 飞行航线的显示
为了更加直观地观测无人机的飞行状态,地面站将会接收无人机传输的下行状态帧并将其进行解析,得到无人机当前的经纬度坐标与航向,将此数据实时存储在预先设定好的保存实际航点的数组中,再按照顺序取出该数组中保存的经纬度坐标,通过坐标转换原理转换成屏幕坐标后绘制并显示在地图上,实现无人机飞行航迹的实时显示。
航迹点的绘制分为航点绘制和航线绘制两部分。航点绘制需要使用到MFC中CDC类的Ellipse()成员函数,Ellipse()函数原型为:BOOLCDC::Ellipse(intx1,inty1,intx2,inty2),参数x1、y1、x2、y2的值通过该航点的屏幕坐标来确定。航线绘制需要使用MoveTo()和LineTo()这两个绘图函数,函数原型分别为:BOOLCDC::MoveTo(intx,inty);BOOLCDC::LineTo(intx,inty)。MoveTo()函数的参数为前一航点的屏幕坐标值,LineTo()函数的参数为下一航点的屏幕坐标值,航点之间用直线连接起来形成航线。为了实现实时更新航点信息,在程序中添加一个定时器,达到定时时间就对航线进行重绘操作,实现电子地图上实时显示飞行航线。图4为航点绘制流程图,航线绘制流程与航点绘制流程类似,不在此赘述。
图4 航点绘制流程图
2.2.5 飞行航线的保存
为了能够在无人机飞行任务完成后将飞行航线记录并保存下来便于查看,本文设计了航迹线保存功能。在地图显示窗口的菜单栏上创建一个“保存航线”子菜单,点击该子菜单即可将当前界面上显示的航线添加为地图图片上的元素并保存为JPG格式的图片,存入目标文件夹。
首先创建一个内存DC并将目标地图文件选入,需要调用ImageStone类库中FCImageDrawDC类的成员函数FCImageDrawDC(HBITMAPhBMP)来实现。航迹线的绘制流程可以参照图4,但由于此时航点绘制的参照为地图文件,因此在进行坐标转换时不能直接转换成屏幕坐标,而是转换成相对于地图文件的坐标,设某航点的经纬度坐标为(lon,lat),转换后的坐标为(a,b),使用如下公式进行转换:
(6)
由于此时的设备兼容描述表是创建所得,因此航点绘制与航线绘制所使用的绘图函数需要做相应的修改,本文使用BOOLEllipse(HDChdc,intnLeftRect,intnTopRect,intnRightRect,intnBottomRect)来绘制航点,函数中参数hdc的值为前面所创建的内存DC的句柄。同时,绘制航线的函数也需更换为WindowsAPI函数MoveToEx()和LineTo(),函数原型分别为:
BOOL_stdcallMoveToEx(HDChdc,intx,inty,LPOINTlppt);
BOOL_stdcallLineTo(HDChdc,intx,inty)
同样地,参数hdc为所创建的内存DC的句柄。
2.2.6 测试结果分析
电子导航地图模块开发完成以后,为了实现导航电子地图模块的功能测试与分析,本文将该模块与无人机遥测仿真系统进行数据通信。该实验所需的无人机飞行过程中从机载端机传输回来的坐标由工程车的运行坐标代替,导航电子地图模块与遥测仿真系统之间采用串口通信,在向遥测仿真系统发送接收数据的指令之后开始实时监测工程车的运行状况,将传输回来的坐标实时绘制在电子地图界面上。
测试结果表明该软件能够正常实现电子地图的显示、平移及缩放;该软件能够准确、清晰地在电子地图上绘制出规划航线,顺利接收遥测数据并进行解析,根据解析之后的经纬度信息能够准确实时地在地图上绘制出实时航迹线;测试结束之后该软件能够完成飞行航线的保存功能,将此次飞行数据完整保存以便查看。图5为实时运行的测试结果,图中黑色的线为规划航线,白色的线为实际航线。
图5 测试结果图
3 结束语
本文基于Web墨卡托投影技术,建立了一个导航信息可视化良好的显示界面。地图资源的获取简单快捷,可以根据用户需要下载不同分辨率、不同范围的地图文件。该软件对于电子地图的操作简单灵活,提高了无人机系统的导航能力。由于开发过程中不需要与其他GIS软件结合使用,具有很好的独立性,该电子导航地图模块可以灵活地植入到其他导航测控系统中,也可以在此基础上拓展其他功能,所设计的显示系统已经应用于无人机地面测控站。
[1] 昂海松. 微型飞行器系统技术[M].北京:科学出版社, 2014.
[2]QiuK.TheDynamicNavigationSystemBasedontheReal-TimeTraffic[A].InternationalConferenceonRemoteSensing,EnvironmentandTransportationEngineering[C]. 2012:1-4.
[3]LiW,LiuL,DaiH,etal.ResearchandDesignonNavigationElectronicMapSystem[J].Telkomnika, 2013, 11(2):285-290.
[4] 李兴岷, 邓红德, 门雅彬. 某型无人机地面站导航台的设计与实现[J].计算机测量与控制,2014, 22(2):563-565.
[5] 仲筱艳, 黄大庆. 基于ArcGIS的无人机测控站地图导航模块设计[J].遥测遥控,2014,35(2):25-31.
[6] 秦 浩, 徐景硕, 高 扬,等. 基于VC++与MapX的导航电子地图的实现[J].航空计算技术,2011,41(5):98-101.
[7] 何江艳, 赵 琦. 无人直升机地面监控电子地图的设计与实现[J].北京航空航天大学学报,2011,37(5):615-618.
[8] 姚冰冰, 袁志敏, 吴 梅. 基于GoogleEarth的导航电子地图设计[J]. 电子设计工程, 2014(19):4-7.
[9] 杨小会. 基于数字地图技术的无人机测控软件设计与开发[D]. 南京:南京航空航天大学, 2013.
[10]Bermejo-SoleraM,OteroJ.SimpleandhighlyaccurateformulasforthecomputationofTransverseMercatorcoordinatesfromlongitudeandisometriclatitude[J].JournalofGeodesy, 2009, 83(1):1-12.
[11] 黄梦龙. 瓦片地图技术在桌面端GIS中的应用[J]. 地理空间信息, 2011(4):149-151.
[12] 苏旭明, 谭建成.WebGIS中瓦片地图关键技术研究[J]. 北京测绘, 2012(2):9-12.
[13] 孙 鑫.VC++深入详解[M].北京:电子工业出版社, 2006.
Design of Navigation Electronic Map Based on Web Mercator
He Birong, Cai Qian
(College of Automation, Nanjing University of Aeronautics and Astronautics, Nanjing 211100,China)
Aimed at the restricted navigation module of unmanned aerial vehicle(UAV) ground control station(GCS), this paper designed a navigation electronic map based on Web Mercator. This module simplified the electronic map making by using ImageStone class library, and achieved the function of map plotting, translation, and zoom. On this basis, the paper completed route planning, real-time display of the route, saving the data and etc. The design of the navigation electronic map greatly increased the real-time display in the fusion of electronic map and navigation information. The test of UAV simulation system verified the rationality and availability of the design, the navigation electronic map can finish the navigation task efficiently and accurately.
web Mercator; navigation electronic map; unmanned aerial vehicle (UAV); ground control station(GCS)
2016-07-14;
2016-08-31。
何碧容(1993-),女,湖北天门人,硕士研究生,主要从事计算机测控技术、信号处理、嵌入式系统及应用方向的研究。
1671-4598(2017)01-0119-04
10.16526/j.cnki.11-4762/tp.2017.01.034
TP311.5
A