该系统的定位模块和无线通讯模块需借助相应装置,导航信息系统直接收发这些装置数据,处理后为系统所用;路径规划和路线引导模块功能的实现算法研究已相当深入,这里不再赘述。而对于导航电子地图模块,为便于功能实现和后期扩展,按其功能分为矢量图形系统和导航数据库系统,前者是按特定要求显示矢量图形,后者是存储和管理图形元素的几何数据(如坐标等)、属性数据(如道路等级等)以及其
他相关数据(如交通信息等)。
2 导航矢量图形系统
2.1 基于EVC的矢量图形系统
分析地图发现,地图矢量化后矢量图形的元素类型有:点(Point)、线(Line)、连续折线(Polyline)、区域(Region)、弧线(Arc)、文本(Text)、矩形(Rectangle)、圆角矩形(Rounded Rectangle)、椭圆(Ellipse)、圆(Circle)、符号(Symbol)等11个类型。导航电子地图中,符号只用于显示,而且类型有限,该系统采用栅格方式在矢量图形上透明显示。其余10种图形元素并非独立分类,比如,元素点可用其他若干个元素组合表达:矩形元素(在嵌入式C++中有直接函数支持)实质是一个特殊区域。
考虑以上每个对象类都有如线型、颜色等的公共数据,可抽象一个基类。本文共建立了15对象类及结构:基类Class CDraw、线类Class Cline:public CDraw、多线类Class CPline:public CDraw、区域类Class CArea:public CDraw、椭圆弧类Class CEarc:public CDraw、圆类伪代码描述Class CCirele:public CDraw、矩形类Class Crectangle:public CDraw、圆角矩形类Class CroundedRectangle:public CDraw、椭圆类Class CEllipse:public CDraw、文本类Class CText:public CDraw、符号类Class CSvmbol:public CDraw、绘制矢量图形参数类Class CgraphPara、图层属性结构typedef struct、当前画面属性结构tvoedef struct、导航目标属性结构typedef stmct。
车载导航电子地图一般采用小液晶显示屏显示。为了实现导航,显示的画面内容应尽可能简单明了,所以矢量图形将数据分层组织,在图形元素的基类中设有表示元素所处图层的信息。除了将元素分类为不同的显示图层,简化显示内容,基类还可设置该元素是否显示标志位,这样可提高显示速度,节省资源。例如。在同一图层元素,如果有些元素不在当前显示窗口,可以不进行与显示有关的后台操作(坐标变换等)。DPtoVP和VPtoDP方法是实际坐标(地理坐标)和图形坐标相转换。通过矢量化得到的图形元素的位置数据一般是某种坐标系下的坐标值,而本系统用户可见的显示坐标范围为从(0,0)至(640,480),所以需进行坐标变换。每个图形元素都需Draw(绘制)方法,但不同元素的绘制方法各不相同,为了方便Draw方法使用,在基类中将Draw定义为纯虚函数,在子类中重载时再具体赋以不同绘制内容。
2.2 矢量图形系统优化
嵌入式车载导航系统硬件平台一般采用低功耗设计,运算能力有限。但导航电子地图显示画面往往含有大量图形元素,图形显示一次需花费大量时间。如果采用每次全部绘制所有电子地图内容并直接输出到画面,则会导致画面刷新慢和重绘闪烁明显。因此需优化矢量图形的绘制方法。
2.2.1 提高图形的显示速度
一般绘图方法是绘制所有图形元素,而这样严重影响绘图速度。为了加快绘图速度,在显示一个图形元素前,先判断该图形元素是否在当前视图屏幕中,如果不在,则无需绘制,从而节省绘制时间州。而判断一个图形元素是否在当前视图屏幕.需计算判断图形元素与当前视图屏幕矩形是否相交,但此方法需大量计算,影响显示速度。采用的判断图形元素是否需要绘制的方法应允许不太严密,但要计算简单。在每次重绘图形元素前,首先判断元素是否显示,并只绘制所需部分。这样就大大加快绘图速度,并能满足导航电子地图系统显示要求。