具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在一个实施例中,提供了一种终端,该终端的结构示意图如图2所示。该终端包括通过系统总线连接的处理器、图形处理单元、存储介质、内存、显示屏幕和输入设备。其中,终端的存储介质存储有操作系统,还存储有一种绘制地图中路线的装置和电子地图,或者存储有包含绘制地图中路线的装置的电子地图,该绘制地图中路线的装置用于实现一种绘制地图中路线的方法。该终端的处理器用于提供计算和控制能力,支撑整个终端的运行。图形处理单元为可视元素的绘制提供计算、渲染等图形处理能力,当然图形处理单元和处理器可以封装成一体。该终端的内存为绘制地图中路线的装置的运行提供环境。该终端的显示屏幕用于显示可视化元素,包括显示实施绘制地图中路线的方法所绘制的线条,进一步地显示电子地图中的各种元素,比如地图标记、各种类型的路线以及实景快照等。该终端的输入设备用于接收输入的控制指令,用以对电子地图的显示区域、显示比例尺等进行控制,输入设备可以是鼠标、轨迹球、按键以及触摸屏等。该终端可以是移动终端,比如手机、平板电脑等,也可以是台式计算机。
如图3所示,在一个实施例中,提供了一种绘制地图中路线的方法,本实施例以该方法应用于如图2所示的终端来举例说明。地图优选是利用计算机技术,以数字方式存储和查阅的电子地图。用户操作终端以请求给出路线时,地图通过运算得到用于表示路线的数据点序列,此时便可以应用以下任意实施例的绘制地图中路线的方法而以数据点序列为依据来绘制折线段路线。该方法具体包括如下步骤:
步骤302,将用来绘制折线段路线的数据点序列在连接相邻数据点的直线段处进行拆分处理,获得表示三点式折线段的数据点单元的集合。
折线段路线是指需要绘制得到的折线段形式的路线,优选为宽度至少为三个像素点的折线段。数据点序列是用于绘制该折线段路线所要依据的数据层数据。数据点序列中任意一个数据点可以用其所在坐标表示,也可以用其相对于预设固定点的相对位置来表示。数据点序列则是按顺序排列而成的数据点的集合,将该数据点序列中的数据点按顺序连接起来就能够得到折线段路线。优选地,数据点序列中任意连续的三个数据点所表示的点不在一条直线上,事先可以将数据点序列中可以连成一条直线的连续的三个以上的数据点合并为两个数据点。
三点式折线段是指三个不在一条直线上的数据点顺序连接所构成的折线段形的绘制单元,表示三点式折线段的数据点单元则是用于绘制该三点式折线段的数据层数据。这里在连接相邻数据点的直线段处进行拆分处理并不需要实际将相邻数据点相连,而是通过计算在相邻两个数据点之间找到一个拆分的数据点,且该数据点与其它两个相邻的数据点位于一条直线上。拆分出的数据点可以根据其与其它两个相邻的数据点的位置直接计算出。将数据点序列进行拆分处理后,获得数据点单元的集合,该集合中的数据点单元可以按顺序排列,也可以不按顺序排列。
在一个实施例中,步骤302包括:在用来绘制折线段路线的数据点序列所表示的直线段序列中,将除首尾直线段外的剩余的每个直线段分别在中点位置处拆分,获得表示三点式折线段的数据点单元的集合。
具体地,如图4所示,假设数据点序列为D1|D2|D3|D4|D5|D6,这里用符号“|”区分不同的数据点,其中数据点总个数为M=6个,那么该数据点序列所表示的直线段序列为L12|L23|L34|L45|L56,这里用符号“|”来区分不同的直线段,直线段总个数为M-1=5个。其中首尾直线段分别为L12和L56,除此之外,将剩余的每个直线段L23、L34、L45共M-3=3个分别在预设位置处拆分出新的数据点分别为D23、D34和D45。然后将每首尾相接的连续的三个数据点进行组合,就获得了表示三点式折线段的数据点单元的集合为{D1|D2|D23、D23|D3|D34、D34|D4|D45、D45|D5|D6},该集合中数据点单元总个数为M-2=4个,其中数据点单元D1|D2|D23与D23|D3|D34通过数据点D23首尾相接,数据点单元D23|D3|D34和D34|D4|D45通过数据点D34首尾相接,数据点单元D34|D4|D45和D45|D5|D6通过数据点D45首尾相接。
其中预设位置的选取可以按需要选取,比如为剩余的每个折线段的三分之一处、五分之二处等,优选预设位置为剩余的每个折线段的中点。在中点处拆分可以使得拆分获得的两个数据点单元能够具有足够长度且不重叠的直线段,便于后续以数据点单元为单位所进行的绘制。本实施例中除首尾直线段外的剩余的每个直线段进行拆分处理,当然也可以将首尾直线段进行拆分处理,这样除了获得三点式折线段的数据点单元的集合,还会获得表示新的两个首尾直线段的数据点组合,其与该集合中相应的数据点单元同样是直线连接,可以无缝连接,仅在绘制时多出对这两个数据点组合的绘制步骤。
步骤304,以数据点单元为单位进行绘制,且在绘制每个数据点单元时,将数据点单元所表示的三点式折线段划分为多个顺序邻接的图形区域分别进行绘制。
具体地,分别根据数据点单元的集合中的每个数据点单元进行绘制,这样每个数据点单元分别作为一个绘制单元进行绘制,因在步骤302中在连接相邻数据点的直线段处进行了拆分处理,因此绘制单元之间的连接处为直线连接,这样相邻两个绘制单元各自的一条矩形直线段可以完美的无缝连接起来,避免出现连接空隙和重复绘制。
在绘制每个数据点单元时,数据点单元所表示的三点式折线段被划分为多个顺序邻接的图形区域分别进行绘制,这样绘制时,每个图形区域可以分别被独立绘制,而由于图形区域的顺序邻接,各个图形区域就可以无缝组合起来构成完整的三点式折线段,避免出现连接空隙和重复绘制。
在一个实施例中,将数据点单元所表示的三点式折线段划分为多个顺序邻接的图形区域分别进行绘制的步骤,具体包括:将数据点单元所表示的三点式折线段划分为顺序邻接的第一图形区域、第二图形区域以及第三图形区域;其中,第一图形区域根据三点式折线段的两条矩形直线段的预计内交点以及第一条矩形直线段的两个远交点顶点和近交点外顶点围成;第二图形区域根据三点式折线段的两条矩形直线段的预计内交点以及两条矩形直线段各自的近交点外顶点围成;第三图形区域根据三点式折线段的两条矩形直线段的预计内交点以及第二条矩形直线段的两个远交点顶点和近交点外顶点围成。
具体地,参照图5,图5中为一个数据点单元所表示的预计用两条矩形直线段连接获得的三点式折线段,其中D402、D404和D406为三个数据点。这里预计是指当用两条矩形直线段连接获得的三点式折线段的情况。第一条矩形直线段P1P2P3P10与第二条矩形直线段P6P7P8P9具有两个交点分别为数据点D404和预计内交点P4,这里预计内交点P4是指当用两条矩形直线段连接获得三点式折线段时处于两条直线段所构成的角度内部的交点。P1和P2分别为第一条矩形直线段P1P2P3P10的远交点顶点,其中P1定义为远交点外顶点,而P2则定义为远交点内顶点;P3和P10分别为第一条矩形直线段P1P2P3P10的近交点顶点,其中P3定义为近交点外顶点,而P10则定义为近交点内顶点。类似地,P7和P8分别为第二条矩形直线段P6P7P8P9的远交点顶点,其中P8定义为远交点外顶点,而P7则定义为远交点内顶点;P6和P9分别为第一条矩形直线段P6P7P8P9的近交点顶点,其中P6定义为近交点外顶点,而P9则定义为近交点内顶点。另外定义两条矩形直线段外延线的交点P5为外延交点。
具体地,本实施例中,可将数据点单元所表示的三点式折线段D402D404D406划分为顺序邻接的第一图形区域、第二图形区域以及第三图形区域。其中第一图形区域可为图5中的P1P2P3P4区域。第二图形区域可为图5中的P3P4P6区域,或者P3P4P5P6区域,或者线P3P4、线P4P6以及点P3和点P6之间的弧线构成的扇形区域。第三图形区域可为图5中的P4P6P7P8区域。
在一个实施例中,第一图形区域按照对角线划分为两个三角形子区域,具体地,如图5所示,第一图形区域P1P2P3P4可按照其对角线P1P4划分为相互邻接的两个三角形子区域P1P3P4与P1P2P4,或者可按照其对角线P2P3划分为两个相互邻接的三角形子区域P1P2P3和P2P3P4。划分为三角形子区域,可以按照OpenGL(OpenGraphicsLibrary,图形程序接口。是一套三维图形处理库,也是该领域的工业标准。所谓计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术)的三角形纹理来直接贴图绘制,效率很高。其中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的图案。
在一个实施例中,如图6所示,图6示出的是第二图形区域的放大示意图。本实施例中第二图形区域为一个或者多个顺序邻接的扇形区域。其中第二图形区域为多个顺序邻接的扇形区域时,每个扇形区域可以近似为一个三角形,可以直接按照OpenGL的三角形纹理来直接贴图绘制,效率很高。
在一个实施例中,第二图形区域按照对角线划分为两个三角形子区域,具体地,如图5所示,第二图形区域P4P6P7P8可按照其对角线P4P8划分为相互邻接的两个三角形子区域P4P7P8与P4P6P8,或者可按照其对角线P6P7划分为两个相互邻接的三角形子区域P4P6P7和P6P7P8。划分为三角形子区域,可以按照OpenGL的三角形纹理来直接贴图绘制,效率很高。
在一个实施例中,还可以在分别绘制数据点单元所表示的三点式折线段的各个顺序邻接的图形区域时,根据设置采用相同或者不同类型的颜色的纹理来对各个图形区域进行贴图绘制,且采用的纹理的颜色类型可以是渐变颜色类型。拆分为数据点单元并将数据点单元所表示的三点式折线段拆分为多个顺序邻接的图形区域,使得为折线段添加不同的颜色变的容易了很多。
上述绘制地图中路线的方法,将数据点序列在连接相邻数据点的直线段处进行拆分处理,获得表示三点式折线段的数据点单元的集合,这样就能够以数据点单元为单位进行绘制。其中相邻的两个三点式折线段之间的连接成为直线连接,可以无缝连接。而在绘制每个数据点单元时,将其所表示的三点式折线段划分为顺序邻接的图形区域来分别进行绘制,这样顺序邻接的图形区域就可以无缝连接在一起组成三点式折线段。这样将所有数据点单元绘制完成后,就可以得到一条没有连接空隙以及重复绘制的折线段路线,使得图像品质得到提升。
在一个实施例中,地图中路线的绘制采用图片纹理的方式进行绘制,且图片纹理的作为绘制的路线的边缘的边缘部位经过透明渐进处理。
在三维图像中,受分辨率等因素的制约,物体边缘总会或多或少的呈现三角形的锯齿,如图7中(a)中绘制的路线702,锯齿情况明显。为了克服这种图形失真的情况,可以采用一些系统抗锯齿(Anti-aliasing,抗图像折叠失真)方法来对绘制的路线进行处理,比如可采用多重采样抗锯齿(MultiSamplingAnti-Aliasing,简称MSAA)方法和覆盖采样抗锯齿(CoverageSamplingAnti-Aliasing,简称CSAA)方法等,其实现的抗锯齿效果如图7中(b)中绘制的路线704,边缘的三角形锯齿得到了很好的抑制。
优选地,本实施例中采用图片纹理的方式来绘制地图中的路线,并同时对图片纹理的边缘部位做了透明渐进处理。透明渐进处理是指在图片纹理的边缘处部位某一预设位置开始,越远离图片纹理的中心透明度越高,这样在图片纹理最边缘的位置基本变成透明。可以理解的是,这里的图片纹理的边缘部位是指对应绘制的路线的边缘的边缘部位。具体如图8所示,其中802所示的图像区域中的图像用来表示透明区域,对于图片纹理的左边缘区域804,越远离图片纹理中心越透明,类似地,对于图片纹理的右边缘区域806,越远离图片纹理中心越透明。其中透明渐进的透明程度以及渐变程度可以根据线条宽度和/或实际需求设定。由于路线的锯齿通常是由于边缘的叠加造成,这样处理锯齿问题就得到了更进一步的抑制。如图7中(c)中绘制的路线706,基本已经看不到锯齿,绘制的路线质量很高。
在一个实施例中,步骤302之前,还包括步骤:根据地图的显示比例尺,对数据点序列进行抽稀处理。
具体地,对于地图中较长的路线,采用上述实施例中的绘制地图中路线的方法进行绘制,会存在绘制效率低的问题,因为在一个实施例中,绘制每个数据点单元,都需要绘制4个三角形和X个扇形,绘制整条路线就共需要绘制(M-2)*(4+X)个图形。
为了解决这一问题,本实施例中在步骤302之前根据地图的显示比例尺来对数据点序列进行抽稀处理。其中抽稀是指通过某种算法,在保证曲线形状不变的情况下,最大限度地减少数据点个数的过程。具体地,绘制的路线显示在地图上,会因为地图显示比例尺的不同而显示出完全不同的效果。如图9(a)所示,在1:10米比例尺下较长的路线902存在很多细节,而如图9(b)所示,同样的路线在1:50米比例尺下就变成了较短的近似直线的路线904。这种情况下就没有必要依据数据点序列中所有数据点来绘制路线。本实施例根据地图的显示比例尺的不同,对数据点序列进行不同程度的抽稀处理。
在一个实施例中,对数据点序列进行抽稀处理的具体过程为:在数据点序列中依次选取相邻的三个数据点为第一数据点、第二数据点和第三数据点,如果第二数据点与第一数据点的直线距离以及第二数据点与第一数据点的直线距离的和小于预设像素个数,则删除该第二数据点,直至将数据点序列中的所有数据点处理完毕。这样依次判断每相邻3个数据点,将会删除较多没必要绘制的折线段。这样绘制效果基本不受影响,绘制效率却高了很多。其中预设像素个数优选为5个,此时效果最好。
在一个实施例中,步骤302之前,还包括步骤:将用来绘制折线段路线的数据点序列中超出地图显示区域的数据点剔除。
具体地,对于一整段较长的折线段,当显示比例尺较大时每个数据点偏离相邻两点的距离都很大,这就可能使得抽稀处理方式无效。然而,在大的显示比例尺下,作为路线的较长的折线段,其大部分不会显示在地图最终的显示区域中,此时可根据地图的显示区域大小,将数据点序列中超出地图显示区域的数据点剔除。而当接收到操作指令而要显示地图的另一个显示区域从而要显示路线的另一部分时,则再执行将原始的数据点序列中超出地图显示区域的数据点剔除的步骤。这样只有在地图显示区域内的路线才会被绘制,不显示的则不绘制,提高了绘制的效率。可以理解的是,对数据点序列进行抽稀处理以及将超出地图显示区域的数据点剔除的实施例并不矛盾,可以结合在一起。
在一个实施例中,该绘制地图中路线的方法还包括:根据待绘制的路线类型确定线条类型,并采用确定的线条类型来绘制路线;其中,线条类型包括不同宽度的线条、不同颜色的线条、虚线条、点划线条、实线条以及包含间隔设置的预设图标的线条中的至少一种。
具体地,地图可以显示多种类型的路线,比如驾车导航路线、步行路线以及公交路线等,可预先固化或者用户自定义设置路线类型和线条类型的对应关系,从而此时可根据待绘制的路线类型来确定线条类型,从而采用确定的线条类型来绘制路线。
其中采用不同宽度的线条所绘制的路线如图10和图11所示,其中图10中绘制的路线为采用预设的普通宽度的线条所绘制的路线,适用于常规路线的表示;图11中为采用预设的粗线条所绘制的路线,适用于驾车导航路线的表示。采用虚线条类型所绘制的路线如图12所示,具体图12中的路线采用的是点虚线类型,当然还可以采用短横虚线类型,虚线条类型尤其适用于步行路线的表示。实线条类型包括上述的折线段路线类型,还可以是平滑的曲线类型。包含间隔设置的预设图标的线条类型如图13所示,图13中间隔设置的预设图标为箭头图标,还可以采用三角形等具有方向指向功能的图标,可以方便地指示出路线的行进方向。
如图14所示,在一个实施例中,提供了一种绘制地图中路线的装置1400,用于实现上述的绘制地图中路线的方法,该绘制地图中路线的装置1400包括拆分模块1402和绘制执行模块1404。
拆分模块1402,用于将用来绘制折线段路线的数据点序列在连接相邻数据点的直线段处进行拆分处理,获得表示三点式折线段的数据点单元的集合。
折线段路线是指需要绘制得到的折线段,数据点序列是用于绘制该折线段路线所要依据的数据层数据。数据点序列中任意一个数据点可以用其所在坐标表示,也可以用其相对于预设固定点的相对位置来表示。数据点序列则是按顺序排列而成的数据点的集合,将该数据点序列中的数据点按顺序连接起来就能够得到折线段路线。优选地,数据点序列中任意连续的三个数据点所表示的点不在一条直线上,事先可以将数据点序列中可以连成一条直线的连续的三个以上的数据点合并为两个数据点。
三点式折线段是指三个不在一条直线上的数据点顺序连接所构成的折线段形的绘制单元,表示三点式折线段的数据点单元则是用于绘制该三点式折线段的数据层数据。将数据点序列进行拆分处理后,获得数据点单元的集合,该集合中的数据点单元可以按顺序排列,也可以不按顺序排列。
在一个实施例中,拆分模块1402用于在用来绘制折线段路线的数据点序列所表示的直线段序列中,将除首尾直线段外的剩余的每个直线段分别在中点位置处拆分,获得表示三点式折线段的数据点单元的集合。
具体地,如图4所示,假设数据点序列为D1|D2|D3|D4|D5|D6,那么该数据点序列所表示的直线段序列为L12|L23|L34|L45|L56。其中首尾直线段分别为L12和L56,拆分模块1402用于出去直线段L12和L56之后,将剩余的每个直线段L23、L34、L45分别在预设位置处拆分出新的数据点分别为D23、D34和D45。然后拆分模块1402用于将每首尾相接的连续的三个数据点进行组合,就获得了表示三点式折线段的数据点单元的集合为{D1|D2|D23、D23|D3|D34、D34|D4|D45、D45|D5|D6},其中数据点单元D1|D2|D23与D23|D3|D34通过数据点D23首尾相接,数据点单元D23|D3|D34和D34|D4|D45通过数据点D34首尾相接,数据点单元D34|D4|D45和D45|D5|D6通过数据点D45首尾相接。
其中预设位置的选取可以按需要选取,比如为剩余的每个折线段的三分之一处、五分之二处等,优选预设位置为剩余的每个折线段的中点,此时拆分出的数据点可以根据相邻两个数据点的坐标取平均值获得。在中点处拆分可以使得拆分获得的两个数据点单元能够具有足够长度且不重叠的直线段,便于后续以数据点单元为单位所进行的绘制。本实施例中除首尾直线段外的剩余的每个直线段进行拆分处理,当然也可以将首尾直线段进行拆分处理,这样除了获得三点式折线段的数据点单元的集合,还会获得表示新的两个首尾直线段的数据点组合,其与该集合中相应的数据点单元同样是直线连接,可以无缝连接,仅在绘制时多出绘制这两个数据点组合的过程。
绘制执行模块1404,用于以数据点单元为单位进行绘制,且在绘制每个数据点单元时,将数据点单元所表示的三点式折线段划分为多个顺序邻接的图形区域分别进行绘制。
具体地,绘制执行模块1404用于分别根据数据点单元的集合中的每个数据点单元进行绘制,这样每个数据点单元分别作为一个绘制单元进行绘制,因在连接相邻数据点的直线段处进行了拆分处理,因此绘制单元之间的连接处为直线连接,相邻两个绘制单元分别绘制后可以将两者无缝连接起来,避免出现连接空隙和重复绘制。
绘制执行模块1404用于在绘制每个数据点单元时,将数据点单元所表示的三点式折线段划分为多个顺序邻接的图形区域分别进行绘制,这样绘制时,每个图形区域可以分别被独立绘制,而由于图形区域的顺序邻接,各个图形区域就可以无缝组合起来构成完整的三点式折线段,避免出现连接空隙和重复绘制。
上述绘制地图中路线的装置1400,将数据点序列在连接相邻数据点的直线段处进行拆分处理,获得表示三点式折线段的数据点单元的集合,这样就能够以数据点单元为单位进行绘制。其中相邻的两个三点式折线段之间的连接成为直线连接,可以无缝连接。而在绘制每个数据点单元时,将其所表示的三点式折线段划分为顺序邻接的图形区域来分别进行绘制,这样顺序邻接的图形区域就可以无缝连接在一起组成三点式折线段。这样将所有数据点单元绘制完成后,就可以得到一条没有连接空隙以及重复绘制的折线段路线,使得图像品质得到提升。
在一个实施例中,绘制执行模块1404还用于将数据点单元所表示的三点式折线段划分为顺序邻接的第一图形区域、第二图形区域以及第三图形区域;其中,第一图形区域根据三点式折线段的两条矩形直线段的预计内交点以及第一条矩形直线段的两个远交点顶点和近交点外顶点围成;第二图形区域根据三点式折线段的两条矩形直线段的预计内交点以及两条矩形直线段各自的近交点外顶点围成;第三图形区域根据三点式折线段的两条矩形直线段的预计内交点以及第二条矩形直线段的两个远交点顶点和近交点外顶点围成。
具体地,参照图5,图5中为一个数据点单元所表示的预计用两条矩形直线段连接获得的三点式折线段,其中D402、D404和D406为三个数据点。这里预计是指当用两条矩形直线段连接获得的三点式折线段的情况。第一条矩形直线段P1P2P3P10与第二条矩形直线段P6P7P8P9具有两个交点分别为数据点D404和预计内交点P4,这里预计内交点P4是指当用两条矩形直线段连接获得三点式折线段时处于两条直线段所构成的角度内部的交点。P1和P2分别为第一条矩形直线段P1P2P3P10的远交点顶点,其中P1定义为远交点外顶点,而P2则定义为远交点内顶点;P3和P10分别为第一条矩形直线段P1P2P3P10的近交点顶点,其中P3定义为近交点外顶点,而P10则定义为近交点内顶点。类似地,P7和P8分别为第二条矩形直线段P6P7P8P9的远交点顶点,其中P8定义为远交点外顶点,而P7则定义为远交点内顶点;P6和P9分别为第一条矩形直线段P6P7P8P9的近交点顶点,其中P6定义为近交点外顶点,而P9则定义为近交点内顶点。另外定义两条矩形直线段外延线的交点P5为外延交点。
具体地,本实施例中,绘制执行模块1404可用于将数据点单元所表示的三点式折线段D402D404D406划分为顺序邻接的第一图形区域、第二图形区域以及第三图形区域。其中第一图形区域可为图5中的P1P2P3P4区域。第二图形区域可为图5中的P3P4P6区域,或者P3P4P5P6区域,或者线P3P4、线P4P6以及点P3和点P6之间的弧线构成的扇形区域。第三图形区域可为图5中的P4P6P7P8区域。
在一个实施例中,绘制执行模块1404可用于将第一图形区域按照对角线划分为两个三角形子区域,具体地,如图5所示,第一图形区域P1P2P3P4可按照其对角线P1P4划分为相互邻接的两个三角形子区域P1P3P4与P1P2P4,或者可按照其对角线P2P3划分为两个相互邻接的三角形子区域P1P2P3和P2P3P4。划分为三角形子区域,可以按照OpenGL(OpenGraphicsLibrary,图形程序接口。是一套三维图形处理库,也是该领域的工业标准。所谓计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术)的三角形纹理来直接贴图绘制,效率很高。其中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的图案。
在一个实施例中,如图6所示,图6示出的是第二图形区域的放大示意图。本实施例中第二图形区域为一个或者多个顺序邻接的扇形区域。其中第二图形区域为多个顺序邻接的扇形区域时,每个扇形区域可以近似为一个三角形,可以直接按照OpenGL的三角形纹理来直接贴图绘制,效率很高。
在一个实施例中,绘制执行模块1404可用于将第二图形区域按照对角线划分为两个三角形子区域,具体地,如图5所示,第二图形区域P4P6P7P8可按照其对角线P4P8划分为相互邻接的两个三角形子区域P4P7P8与P4P6P8,或者可按照其对角线P6P7划分为两个相互邻接的三角形子区域P4P6P7和P6P7P8。划分为三角形子区域,可以按照OpenGL的三角形纹理来直接贴图绘制,效率很高。
在一个实施例中,绘制执行模块1404还可用于在分别绘制数据点单元所表示的三点式折线段的各个顺序邻接的图形区域时,根据设置采用相同或者不同类型的颜色的纹理来对各个图形区域进行贴图绘制,且采用的纹理的颜色类型可以是渐变颜色类型。拆分为数据点单元并将数据点单元所表示的三点式折线段拆分为多个顺序邻接的图形区域,使得为折线段添加不同的颜色变的容易了很多。
一个实施例中,地图中路线的绘制采用图片纹理的方式进行绘制,且图片纹理的作为绘制的路线的边缘的边缘部位经过透明渐进处理。
在三维图像中,受分辨率等因素的制约,物体边缘总会或多或少的呈现三角形的锯齿,如图7中(a)中绘制的路线702,锯齿情况明显。为了克服这种图形失真的情况,绘制执行模块1404可以用于采用一些抗锯齿的技术手段来对绘制的路线进行处理,比如可采用多重采样抗锯齿方法和覆盖采样抗锯齿方法等,其实现的抗锯齿效果如图7中(b)中绘制的路线704,边缘的三角形锯齿得到了很好的抑制。
优选地,本实施例中绘制执行模块1404用于采用图片纹理的方式来绘制地图中的路线,并同时对图片纹理的边缘部位做了透明渐进处理。透明渐进处理是指在图片纹理的边缘处部位某一预设位置开始,越远离图片纹理的中心透明度越高,这样在图片纹理最边缘的位置基本变成透明。这样由于路线的锯齿通常是由于边缘的叠加造成,这样处理锯齿问题就得到了更进一步的抑制。如图7中(c)中绘制的路线706,基本已经看不到锯齿,绘制的路线质量很高。
如图15所示,在一个实施例中,该绘制地图中路线的装置1400还包括抽稀处理模块1401,用于根据地图的显示比例尺,对数据点序列进行抽稀处理。
具体地,本实施例中抽稀处理模块1401用于根据地图的显示比例尺来对数据点序列进行抽稀处理。具体地,绘制的路线显示在地图上,会因为地图显示比例尺的不同而显示出完全不同的效果。如图9(a)所示,在1:10米比例尺下较长的路线902存在很多细节,而如图9(b)所示,同样的路线在1:50米比例尺下就变成了较短的近似直线的路线904。这种情况下就没有必要依据数据点序列中所有数据点来绘制路线。本实施例中抽稀处理模块1401用于根据地图的显示比例尺的不同,对数据点序列进行不同程度的抽稀处理。
在一个实施例中,抽稀处理模块1401具体用于在数据点序列中依次选取相邻的三个数据点为第一数据点、第二数据点和第三数据点,如果第二数据点与第一数据点的直线距离以及第二数据点与第一数据点的直线距离的和小于预设像素个数,则删除该第二数据点,直至将数据点序列中的所有数据点处理完毕。这样依次判断每相邻3个数据点,将会删除较多没必要绘制的折线段。这样绘制效果基本不受影响,绘制效率却高了很多。其中预设像素个数优选为5个,此时效果最好。
如图16所示,在一个实施例中,绘制地图中路线的装置1400还包括:数据点剔除模块1403,用于将用来绘制折线段路线的数据点序列中超出地图显示区域的数据点剔除。
具体地,对于一整段较长的折线段,当显示比例尺较大时每个数据点偏离相邻两点的距离都很大,这就可能使得抽稀处理方式无效。然而,在大的显示比例尺下,作为路线的较长的折线段,其大部分不会显示在地图最终的显示区域中,数据点剔除模块1403可用于根据地图的显示区域大小,将数据点序列中超出地图显示区域的数据点剔除。而数据点剔除模块1403用于当接收到操作指令而要显示地图的另一个显示区域从而要显示路线的另一部分时,则再执行将原始的数据点序列中超出地图显示区域的数据点剔除。这样只有在地图显示区域内的路线才会被绘制,不显示的则不绘制,提高了绘制的效率。
在一个实施例中,绘制执行模块1404还用于根据待绘制的路线类型确定线条类型,并采用确定的线条类型来绘制路线;其中,线条类型包括不同宽度的线条、不同颜色的线条、虚线条、点划线条、实线条以及包含间隔设置的预设图标的线条中的至少一种。
具体地,地图可以显示多种类型的路线,比如驾车导航路线、步行路线以及公交路线等,可预先固化或者用户自定义设置路线类型和线条类型的对应关系,从而绘制执行模块1404可用于根据待绘制的路线类型来确定线条类型,从而采用确定的线条类型来绘制路线。
其中采用不同宽度的线条所绘制的路线如图10和图11所示,其中图10中绘制的路线为采用预设的普通宽度的线条所绘制的路线,适用于常规路线的表示;图11中为采用预设的粗线条所绘制的路线,适用于驾车导航路线的表示。采用虚线条类型所绘制的路线如图12所示,具体图12中的路线采用的是点虚线类型,当然还可以采用短横虚线类型,虚线条类型尤其适用于步行路线的表示。实线条类型包括上述的折线段路线类型,还可以是平滑的曲线类型。包含间隔设置的预设图标的线条类型如图13所示,图13中间隔设置的预设图标为箭头图标,还可以采用三角形等具有方向指向功能的图标,可以方便地指示出路线的行进方向。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。