用于3D地图的虚拟相机的制作方法

文档序号:25997236发布日期:2021-07-23 21:12阅读:79来源:国知局
用于3D地图的虚拟相机的制作方法

本申请是申请日为2013年5月31日、申请号为201380028723.6,发明名称为“用于3d地图的虚拟相机”的发明专利申请的分案申请。



背景技术:

当今可用的许多基于地图的应用设计用于各种不同的设备(例如,台式计算机、膝上型电脑、平板设备、智能电话、手持式全球位置系统(gps)接收器等)以及用于各种不同的目的(例如,导航、浏览、运动等)。大多数这些应用基于在地图中描述街道、公路、兴趣点等的相对位置的地图数据来生成对地图的显示。

此类应用中使用的地图通常是二维(2d)地图或三维(3d)地图。然而,大量应用使用2d地图,其部分原因在于对查看3d地图的处理密集型需求。出于相同原因,使用3d地图的应用通常缓慢、效率低、无格式和/或简单,以至于使得应用没用。



技术实现要素:

本发明的一些实施例提供用于生成和呈现用于浏览和导航的沉浸式和非沉浸式3d地图展示的新颖方法。在一些实施例中,沉浸式和非沉浸式3d地图展示可交替地和/或顺序地显示在设备(例如,移动设备)上,该设备具有允许用户通过屏幕上的触摸和手势输入与展示进行交互的触敏屏幕和多点触摸界面。在其他实施例中,在不具有触敏屏幕的设备上提供展示。

在以下所描述的一些实施例中,这些3d展示由集成的地图绘制应用提供,该集成的地图绘制应用提供若干有用的模态,诸如位置浏览、地图搜索、路线识别和路线导航操作。然而,在其他实施例中,地图绘制应用并不使用所有这些模态。例如,在一些实施例中,地图绘制应用不提供路线导航。

为了显示沉浸式和非沉浸式3d地图展示,一些实施例必须生成各种图块以供客户端设备渲染来生成道路、建筑物和周围景色。在一些实施例中,此类图块的实例包括用于非沉浸式3d展示的道路和建筑物图块,以及用于沉浸式3d展示的导航和建筑物图块。

在生成这些图块之前,服务器集合必须生成放置在每个图块中的道路、建筑物和其他几何结构的描述。该任务涉及多个子任务,诸如(1)自各种供应商接收地图数据,(2)处理此类数据以产生一维(1d)道路、(3)平滑1d道路图、(4)定义数据以指定接合点、(5)生成2d道路几何结构和土地覆盖物、(6)平滑2d道路几何结构、(7)生成关于建筑物的数据(例如,估计的高度数据)、(8)使用此类数据来定义建筑物几何结构、(9)构造道路几何结构细节(诸如岛屿、车道标记以及道路几何结构之间的距离和土地覆盖物),以及(10)识别几何结构边缘节点特征和传播此类特征。

一旦在地图绘制服务侧上生成图块,所述图块就由客户端设备上的地图绘制应用用于将3d地图呈现给客户端设备的用户。一些实施例的地图绘制应用使用各种新颖技术来在地图正在被浏览时或者在地图正在提供导航展示时呈现地图的3d展示。例如,地图绘制应用根据虚拟相机的有利位置来渲染3d展示,并且使用在某些情形下自动移动虚拟相机(即,移动视角渲染位置)的各种方法来实现所需的3d展示。当一些实施例的地图绘制应用在设备即将沿路线转弯时将虚拟相机的位置从移动的设备的当前位置后面的视角渲染位置移动至当前位置的自上而下视图时,一个此类实例发生。另一个实例是提供的放大/缩小动画,所述放大/缩小动画示出场景中的对象随着放大操作和缩小操作而变大和收缩。

另外,在一些实施例中,地图绘制应用提供两种不同类型的3d展示——沉浸式3d展示和非沉浸式3d展示。在一些实施例中的沉浸式展示不仅显示更多几何结构而且还显示在非沉浸式展示中显示的几何结构的更多细节。地图绘制应用还提供非沉浸式展示与沉浸式展示之间的平滑过渡。

为了实现此类平滑过渡并生成其他新颖的效果,一些实施例的地图绘制应用使用新颖的图像处理流水线(pipeline)。此流水线执行各种预加载操作以下载、检索和/或解压缩可能为导航展示所需要的地图图块,以为其渲染操作准备好其渲染流水线,并且准备复制流水线以在沉浸式3d展示与非沉浸式3d展示之间平滑地过渡。

上述发明内容旨在用作对本发明的一些实施例的简单介绍。其并非意味着对在本文档中所公开的所有发明主题进行介绍或概述。随后的具体实施方式以及在具体实施方式中所参照的附图将进一步描述发明内容中所述的实施例以及其他实施例。因此,为了理解该文档所描述的所有实施例,需要全面审阅发明内容、具体实施方式和附图。此外,受权利要求书保护的题材不被发明内容、具体实施方式及附图中的示例性细节所限定,而是被所附权利要求所限定,这是因为受权利要求书保护的题材在不脱离本题材的实质的情况下能够以其他特定形式而体现。

附图说明

在所附的权利要求中阐述了本发明的新颖特征。然而,出于说明的目的,在以下附图中阐释了本发明的若干实施例。

图1示出了执行本发明一些实施例的集成的地图绘制应用的设备的实例。

图2示出了一些实施例的导航应用如何将3d控件提供为进入3d导航模式的快速机制。

图3呈现了简化的实例以示出虚拟相机的概念。图4示出了通过收缩和展开手势进行的对虚拟相机的距离的调节。

图5示出了角度可通过手势调节的相机的一个实施例。

图6概念性地示出了一些实施例的地图绘制服务处理。

图7概念性地示出了用于生成道路图的一些实施例的过程。

图8示出了针对地图区域内的道路的一些实施例的各种数据结构。

图9示出了针对在接合点处相汇的两个路段的修改的实例。

图10示出了为用于在接合点处聚集至道路中的候选者的三个路段的实例。

图11示出了第一路段与第二路段和第三路段相交(在平面中)的情形。

图12示出了相隔距离x、在相反的方向上平行地延伸并且具有相同名称的两个路段。

图13和图14示出了具有25mph和60mph的速度限制的类似弯折的道路。

图15概念性地示出了用于生成将用于在客户端地图绘制应用上生成道路多边形的道路几何结构的一些实施例的过程。

图16示出了执行以平滑车道扩展接合点的操作,其中道路的两边中的一者保持为直的(即,是“对齐的”)。

图17示出了来自图16的如由一些实施例的客户端地图绘制应用渲染的平滑车道扩展的结果。

图18示出了执行以平滑车道扩展接合点的操作,其中道路在两边扩展。

图19示出了来自图18的如由一些实施例的客户端地图绘制应用渲染的平滑车道扩展的结果。

图20示出了当路段之间的角度大于第一阈值角度时执行以平滑路段几何结构之间的拐角的逐渐减小操作。

图21示出了来自图20的如由一些实施例的客户端地图绘制应用渲染的平滑接合点的结果。

图22示出了当路段之间的角度小于第一阈值角度且大于第二阈值角度时执行以平滑路段几何结构之间的拐角的投影操作。

图23示出了来自图22的如由一些实施例的客户端地图绘制应用渲染的平滑接合点的结果。

图24示出了当路段之间的角度小于第一阈值角度且大于第二阈值角度时执行以消除路段几何结构的多余道路的裁剪操作。

图25示出了执行以平滑路段几何结构之间的拐角的相交操作。

图26示出了来自图24和图25的如由一些实施例的客户端地图绘制应用渲染的平滑接合点的结果。

图27示出了在一些实施例中执行以平滑在符合高速公路入口匝道的特征的情形下的路段几何结构之间的拐角的逐渐减小操作。

图28示出了来自图27的如由一些实施例的客户端地图绘制应用渲染的平滑高速公路合并接合点的结果。

图29示出了接合点处的额外几何结构的生成以便在接合点处创建更逼真的圆拐角。

图30示出了来自图29的如由一些实施例的客户端地图绘制应用渲染的平滑交叉口的结果。

图31示出了在两条道路重叠时将所述两条道路推开。

图32示出了在路段重叠时减小两个路段的宽度。

图33和图34示出了具有两种不同类型的中央分离带的双行车道。

图35示出了两条主干线道路的接合点的几何结构的实例。

图36示出了来自图35的如由一些实施例的客户端地图绘制应用渲染的接合点的结果。

图37示出了使用顶点注释来指定立交桥的桥框的实例,在所述立交桥中,一条道路在另一条道路上方行进且这些道路不形成接合点。

图38示出了图37的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图39示出了使用顶点注释来将路段几何结构的边缘指定为内边缘的实例,其指示不应针对从所注释的顶点起的导向边缘绘制框。

图40示出了图39的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图41示出了使用顶点注释来指定路段的隧道的实例,其指示应在路段上绘制隧道。

图42示出了图41的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图43示出了使用顶点注释来指定路段的一边的人行道的实例。

图44示出了图43的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图45示出了针对一些实施例的单个顶点使用若干注释的实例。

图46示出了图45的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图47示出了使用顶点注释数据来改变道路几何结构的道路框的特性的实例。

图48示出了图47的如由一些实施例的客户端地图绘制应用渲染的路段的结果。

图49概念性地示出了一操作,该操作由一些实施例的地图绘制服务执行以为请求设备生成路线并将路线与导航指令一起提供至请求设备。

图50概念性地示出了一过程,该过程由一些实施例的地图绘制服务执行以便生成并向用户传输路线和交叉口数据。

图51概念性地示出了一些实施例的用于确定接合点集合之间的路径段的过程,所述接合点集合应被一起当作单个交叉口。

图52示出了一些实施例的接合点的实例并示出了不需要路径段以直角相汇或者路径以直线继续穿过接合点。

图53示出了一些实施例的包括两条双行车道路径与一条单行道的交叉口。

图54概念性地示出了一些实施例的用于将若干接合点一起连结成单个交叉口并识别交叉口的支路的过程。

图55示出了一些实施例的在具有两条路径的双行车道与具有两条路径的双行车道之间的共同存在的交叉口。

图56示出了一些实施例的交叉口,其中左转通道被定义为独立的路径段。

图57示出了一些实施例的交叉口中的岔道。

图58示出了一些实施例的具有岔道和左转通道两者的交叉口。

图59示出了在一些实施例中的交叉口中的额外的双向路径。

图60示出了在一些实施例中将八路径交叉口减少成四条支路。

图61示出了在一些实施例中将一不同的八路径交叉口减少成五条支路。

图62概念性地示出了一些实施例的针对点型交叉口的数据结构的实例。

图63概念性地示出了一些实施例的针对环型交叉口的数据结构。

图64概念性地示出了在一些实施例中将环型交叉口减少成相交数据。

图65概念性地示出了一些实施例的用于修改交叉口数据以便提供路线的导航信息的过程。

图66示出了对穿过交叉口的路线的概念性绘制、交叉口的数据结构以及对数据结构的修改以创建用于逐向导航指令的新数据结构。

图67概念性地示出了一过程,该过程由本发明的一些实施例执行以用于将土地覆盖物多边形合并至道路多边形。

图68示出了将土地覆盖物合并至道路多边形的一个实例。

图69概念性地示出了一过程,在一些实施例中,该过程对从两个不同来源接收的相邻多边形之间的交界进行合并。

图70示出了本发明一些实施例的两个阶段,所述两个阶段通过合并相邻多边形之间的交界坐标来解决所识别的间隙。

图71示出了本发明一些实施例的两个阶段,所述两个阶段对围绕所识别的重叠的多边形的交界坐标进行合并。

图72概念性地示出了一过程,该过程由本发明的一些实施例执行以用于解决区域之间的边界冲突。

图73示出了解决两个相邻区域之间的边界冲突的实例。

图74概念性地示出了根据本发明一些实施例的基于路线导航自动围绕3d地图的区域移动的虚拟相机的实例。

图75概念性地示出了一些实施例的用于在路线导航期间以动画方式显示地图视图的过程。

图76概念性地示出了根据本发明一些实施例的在路线导航期间自动操纵3d地图中的转弯的虚拟相机的实例。

图77概念性地示出了一些实施例的用于在路线导航的转弯期间以动画方式显示地图视图的过程。

图78概念性地示出了根据本发明一些实施例的在路线导航期间围绕3d地图平移的虚拟相机的实例。

图79概念性地示出了一些实施例的用于基于手势输入平移至地图视图侧的过程。

图80概念性地示出了由一些实施例的地图绘制应用提供的视角调节特征。

图81概念性地示出了一些实施例的用于调节虚拟相机的位置的过程,该虚拟相机用于响应于视角调节而渲染地图视图。

图82概念性地示出了根据本发明一些实施例的虚拟相机,该虚拟相机可沿不同弧线在不同缩放级别下移动。

图83概念性地示出了一些实施例的用于确定虚拟相机可沿其移动的弧线的过程。

图84概念性地示出了由一些实施例的地图绘制应用提供的特征,该特征用于维持虚拟相机在沿弧线的定义范围内的位置。

图85示出了由一些实施例的地图绘制应用提供的缩放调节特征。

图86概念性地示出了一些实施例的调节虚拟相机的位置的过程,该虚拟相机用于响应于缩放级别调节而渲染地图视图。

图87概念性地示出了根据本发明一些实施例的3d地图视图的旋转操作。

图88概念性地示出了根据本发明一些实施例的在激活位置指示符特征之后3d地图视图的旋转操作。

图89概念性地示出了根据本发明一些实施例的从3d地图的2d透视图起的3d地图视图的旋转操作。

图90概念性地示出了一些实施例的用于基于手势输入旋转地图视图的过程。

图91概念性地示出了一些实施例的地图绘制应用的实例,该地图绘制应用针对不同查看模式的不同缩放级别渲染3d地图视图。

图92示出了虚拟相机围绕3d地图的被定义为由一些实施例的沉浸式查看模式查看的区域的移动。

图93示出了虚拟相机围绕3d地图的被定义为由一些实施例的非沉浸式查看模式查看的区域的移动。

图94概念性地示出了一些实施例的地图绘制应用的实例,该地图绘制应用针对不同查看模式的不同缩放级别渲染3d地图视图。

图95概念性地示出了处理流水线,该处理流水线由一些实施例的地图绘制应用执行以用于基于不同的3d地图图块来渲染3d地图视图。

图96概念性地示出了由一些实施例的处理流水线使用的数据结构。

图97概念性地示出了一些实施例的地图绘制应用的状态图。

图98概念性地示出了处理流水线,该处理流水线由一些实施例的地图绘制应用执行以便渲染用于在客户端设备处显示的地图。

图99示出了针对一些实施例将不同纹理应用于不同类型的道路。

图100示出了包括一条干线道路和两条连接道路的地图展示。

图101示出了非沉浸式地图展示,其示出了在地图浏览视图中以地图图块渲染道路。

图102概念性地示出了对用于地图区域的两个不同视图的两个虚拟相机实例化的控制器。

图103概念性地示出了一些实施例的用于预加载导航图块以进入导航的过程。

图104示出了将地图绘制应用显示为从地图浏览的非沉浸式地图视图到导航的沉浸式地图视图的应用过渡。

图105a和图105b概念性地示出了状态图10500,其描述了一些实施例的集成地图绘制、搜索和导航应用的不同状态以及这些状态之间的过渡。

图106为移动计算设备的架构的实例。

图107概念性地示出了实现本发明的一些实施例所利用的电子系统的实例。

图108示出了根据一些实施例的地图服务操作环境。

具体实施方式

本发明的一些实施例提供用于生成和呈现用于浏览和导航的沉浸式和非沉浸式3d地图展示的新颖方法。在一些实施例中,沉浸式和非沉浸式3d地图展示可交替地和/或顺序地显示在设备(例如,移动设备)上,该设备具有允许用户通过屏幕上的触摸和手势输入与展示进行交互的触敏屏幕和多点触摸界面。在其他实施例中,在不具有触敏屏幕的设备上提供展示。

在以下所描述的一些实施例中,这些3d展示由集成的地图绘制应用提供,该集成的地图绘制应用提供若干有用的模态,诸如位置浏览、地图搜索、路线识别和路线导航操作。然而,在其他实施例中,地图绘制应用并不使用所有这些模态。例如,在一些实施例中,地图绘制应用不提供路线导航。

为了显示沉浸式和非沉浸式3d地图展示,一些实施例必须生成各种图块以供客户端设备渲染来生成道路、建筑物和周围景色。在一些实施例中,此类图块的实例包括用于非沉浸式3d展示的道路和建筑物图块,以及用于沉浸式3d展示的导航和建筑物图块。

在生成这些图块之前,服务器集合必须生成放置在每个图块中的道路、建筑物和其他几何结构的描述。该任务涉及多个子任务,诸如(1)自各种供应商接收地图数据,(2)处理此类数据以产生一维(1d)道路、(3)平滑1d道路图、(4)定义数据以指定接合点、(5)生成2d道路几何结构和土地覆盖物、(6)平滑2d道路几何结构、(7)生成关于建筑物的数据(例如,估计的高度数据)、(8)使用此类数据来定义建筑物几何结构、(9)构造道路几何结构细节(诸如岛屿、车道标记以及道路几何结构之间的距离和土地覆盖物)、以及(10)识别几何结构边缘节点特征和传播此类特征。

一旦在地图绘制服务侧上生成图块,所述图块就由客户端设备上的地图绘制应用用于将3d地图呈现给客户端设备的用户。一些实施例的地图绘制应用使用各种新颖技术来在地图正在被浏览时或者在地图正在提供导航展示时呈现地图的3d展示。例如,地图绘制应用根据虚拟相机的有利位置来渲染3d展示,并且使用在某些情形下自动移动虚拟相机(即,移动视角渲染位置)的各种方法来实现所需的3d展示。当一些实施例的地图绘制应用在设备即将沿路线转弯时将虚拟相机的位置从移动的设备的当前位置后面的视角渲染位置移动至当前位置的自上而下视图时,一个此类实例发生。另一个实例是提供的放大/缩小动画,所述放大/缩小动画示出场景中的对象随着放大操作和缩小操作而变大和收缩。

另外,在一些实施例中,地图绘制应用提供两种不同类型的3d展示——沉浸式3d展示和非沉浸式3d展示。在一些实施例中的沉浸式展示不仅显示更多几何结构而且还显示在非沉浸式展示中显示的几何结构的更多细节。地图绘制应用还提供非沉浸式展示与沉浸式展示之间的平滑过渡。

为了实现此类平滑过渡并生成其他新颖的效果,一些实施例的地图绘制应用使用新颖的图像处理流水线。此流水线执行各种预加载操作以下载、检索和/或解压缩可能为导航展示所需要的地图图块,以为其渲染操作准备好其渲染流水线,并且准备复制流水线以在沉浸式3d展示与非沉浸式3d展示之间平滑地过渡。

以下第i章节描述了本发明的一些实施例的地图绘制应用。第ii章节接着描述了用于生成产生沉浸式3d展示和非沉浸式3d展示所需要的图块的服务器侧操作。第iii章节接着描述了用于生成沉浸式3d展示和非沉浸式3d展示的客户端侧操作。第iv章节接着描述了使用一些实施例的地图绘制应用的电子设备。第v章节最后描述了本发明的一些实施例使用的位置服务。

在本发明的以下具体实施方式中,提出并描述了本发明的许多细节、实例和实施例。然而,对于本领域的技术人员来说将清楚和显而易见的是,本发明并不限于所示出的实施例,并且本发明可在没有所讨论的具体细节和实例的情况下被实施。

i.导航用户界面

a.开始

一些实施例的导航应用是集成的地图绘制应用的一部分,该集成的地图绘制应用包括若干有用的模态,包括位置浏览、地图搜索、路线识别和路线导航操作。在一些实施例中的该集成应用(以下被称为地图绘制应用、导航应用或集成应用)被定义来由具有显示该应用的输出的触敏屏幕的设备执行。在一些实施例中,该设备具有用于允许用户通过屏幕提供触摸和手势输入来与应用交互的多点触摸界面。此类设备的实例是智能手机(例如,由appleinc.出售的操作操作系统的手机、操作windows操作系统的手机等)。

图1示出了执行本发明一些实施例的集成的地图绘制应用的设备100的实例。该图还示出了在该应用中发起路线导航的实例。该应用具有新颖的用户界面(ui)设计,该用户界面设计通过使用屏幕上控件的最少集合来无缝地并且协调地集成用于该应用的不同模态中的每一者的控件,所述屏幕上控件浮在内容的顶部上以便显示尽可能多的内容。另外,该群集适应即将发生的任务,从而在用户在不同模态之间(例如,在浏览、搜索、路线规划与导航之间)移动时,以动画方式调节该群集的内容。具有自适应本质的该共用元件使地图绘制应用能够针对不同的任务进行优化,同时在那些任务之间移动时维持一致的外观和交互模型。

图1示出了与地图绘制应用的交互的六个阶段105、110、115、117、119、121。第一阶段105示出了设备的ui120,该设备的ui包括在任务栏区域125中和ui的一个页面上的若干应用的若干图标。该页面上的图标中的一者是用于地图绘制应用130的图标。第一阶段示出了通过在屏幕上的该应用的位置处与设备屏幕的触摸接触进行的地图绘制应用的用户选择。

第二阶段110示出了地图绘制应用打开之后的设备。如该阶段中所示,地图绘制应用的ui具有起始页,该起始页在一些实施例中(1)显示设备的当前位置的地图,和(2)布置在顶部栏140中并作为浮动控件的若干ui控件。如图1中所示,浮动控件包括指示符145、3d控件150和卷页控件155,同时顶部栏140包括方向控件160、搜索字段165和书签控件170。

在一些实施例中,用户可通过在搜索字段165中触击来发起搜索。这指导应用呈现动画,该动画(1)呈现屏幕上的键盘并且(2)打开充满非常宝贵的完成项的搜索表格。该表格具有一些重要的微妙之处。当触击搜索字段时并且在编辑词之前,或当搜索字段为空时,表格包含“最近项”的列表,所述“最近项”在一些实施例中是用户已请求的最近搜索和路线方向。这使得快速调出最近访问的结果非常容易。

在搜索字段中的任何编辑之后,表格填有来自本地来源(例如,书签、联系人、最近搜索、最近路线方向等)和远程服务器两者的搜索完成项。将用户的联系人卡结合至搜索界面中增添了设计的额外灵活性。当示出最近项时,在一些实施例中总是提供自当前位置至用户家的路线,而在其他实施例中在被认为是“适当”的上下文中该路线被提供。另外,当搜索词匹配地址标签的至少一部分(例如,“work”的“wo”或“ork”)时,在一些实施例中该应用将用户的所标记的地址呈现为搜索表格中的完成项。这些行为一起使得搜索ui成为用以将来自各种来源的结果放到地图上的非常强大的方式。除了允许用户发起搜索之外,在一些实施例中的主地图视图中的文本字段的存在还允许用户查看对应于地图上的搜索结果的查询并通过清除该查询来移除那些搜索结果。

书签控件170(例如,按钮)允许位置和路线被应用添加书签。位置指示符145允许设备的当前位置被具体地标注在地图上。一旦该指示符被选择一次,应用就将设备的当前位置维持在地图的中心。在一些实施例中,该位置指示符还可以识别设备当前指向的方向。

3d控件150是用于在三维(3d)中查看地图或检查路线的控件。地图绘制应用提供3d控件作为进入和离开3d的快速机制。该控件还充当(1)当前视图为3d视图的指示符、(2)3d视角对给定地图视图可用(例如,缩小的地图视图可能不具有可用的3d视图)的指示符、(3)3d视角不可用(例如,3d数据对地图区域不可用)的指示符,以及(4)立交桥动画在给定缩放级别下为可用的指示符。3d控件可提供对应于每个指示的不同外观。例如,当3d视图不可用时3d控件可为灰色,当3d视图可用但地图处于2d视图中时3d控件为黑色,并且当地图处于3d视图中时3d控件为蓝色。在一些实施例中,当立交桥动画对于用户的给定缩放级别和在地图上的位置而言可用时,3d控件改变成建筑物的图像。

卷页控件155是允许应用通过将某些不常用的动作放置于二级ui屏幕中来最小化屏幕上控件的数量的控件,该二级ui屏幕可通过显示在地图上的“卷页”控件访问。在一些实施例中,卷页永久地显示在应用提供的地图视图中的至少一些上。例如,在一些实施例中,应用将卷页永久地显示在该应用提供来允许用户浏览或搜索位置或识别路线的起始页(在第二阶段110中示出)上。

方向控件160打开方向进入页面180,用户可通过该方向进入页面请求将要在开始位置与结束位置之间识别的路线。图1的第三阶段115示出了方向控件160的选择打开了方向进入页面180,该方向进入页面示出于第四阶段117中。方向控件是地图绘制应用可藉以被指导来识别并显示两个位置之间的路线的三种机制中的一种;另外两种机制是(1)针对地图中所选择的项目显示的信息旗帜中的控件,以及(2)显示在搜索字段165中的由设备所识别的最近路线。因此,信息旗帜控件和搜索字段165是应用用来使不同模态之间的过渡无缝的两个ui工具。

第四阶段117示出了方向进入页面180包括用于提供路线的开始位置和结束位置的开始字段和结束字段,以及列出应用已向用户提供的最近路线的表格。该页面上的其他控件是用于开始路线的控件、用于颠倒开始位置和结束位置的顺序的控件、用于取消方向请求的控件以及用于挑选步行、汽车或公共交通路线的控件。地图绘制应用的这些控件和其他方面描述于以下临时专利申请和专利申请中:2012年6月6日提交的标题为“integratedlocationbrowsing,mapsearching,routeidentifying,androutenavigatingapplication”的美国临时专利申请61/656,080;2012年9月11日提交的标题为“problemreporting”的美国临时专利申请61/699,841;以及2012年9月30日提交的标题为“problemreportinginmaps”的美国专利申请13/632,102。临时申请61/656,080和61/699,841,以及专利申请13/632,102以引用的方式并入本文。

第四阶段示出了用户选择自动填充在表格182中的最近方向中的一者。第五阶段119然后示出了2d地图视图上的介于通过页面180指定的所指定的开始位置与结束位置之间的三条路线。第五阶段还示出了第二路线的选择和在布局的顶部处的栏中有关这条路线的一些信息。该栏被示出为包括开始按钮和结束按钮。开始按钮被示出为在第五阶段中被选择。

如由第六阶段所示,开始按钮的选择指示应用进入逐向导航模式。在该实例中,应用已进入2d逐向导航模式。在其他实施例中,应用将默认进入3d逐向导航模式。在该模式中,应用显示逼真的指示牌184,该逼真的指示牌识别从设备的当前位置到所导航路线中的下一次操纵的距离以及一些其他相关信息。应用还显示顶部栏,该顶部栏包括有关导航的一些信息,以及结束按钮和概览按钮,所述结束按钮和概览按钮分别用于结束导航和获得所导航路线的剩余部分或在其他实施例中获得所导航路线的整个部分的概览。

一些实施例的地图绘制应用使用设备在设备的位置处接收的gps信号中的坐标(例如,经度坐标、海拔坐标和纬度坐标)来识别设备的位置。另选地或结合地,地图绘制应用使用其他方法(例如,小区塔三角测量)来计算当前位置。当携带设备的用户偏离路线时,一些实施例的地图绘制应用跟踪设备的位置并且根据偏离位置重新计算新路线,以便将用户从偏离位置重新导向到目标位置。换句话说,一些实施例的在导航模式中操作的地图绘制应用要求设备始终位于路线上。

应用进一步显示以上所描述的浮动3d控件和浮动列表控件。应当指出的是,在进入路线检查和路线导航模态时,列表控件被自适应地添加至浮动控件群集,而在进入路线导航模态时,位置指示符从浮动控件移除。另外,在从路线检查模式过渡至路线导航模式时,在一些实施例中应用执行动画,该动画涉及卷页在应用过渡至导航展示中之前完全展开。

在一些实施例中,动画过渡包括从导航展示移除顶部栏、与该顶部栏相关联的控件和浮动控件,以及在导航展示开始后的短时期将指示牌184移动至展示的顶部边缘。在一些实施例中,应用要求用户触击所导航的地图以使顶部栏、该顶部栏的控件和浮动控件恢复,并且要求进行另一个触击以再次从地图移除这些控件。其他实施例提供用于查看和移除这些控件的其他机制。一些实施例的导航用户界面和导航模式的其他方面更详细地描述于以下临时专利申请和专利申请中:2012年6月5日提交的标题为“routenavigatingmethodandapparatus”的美国临时专利申请61/655,997;2012年6月10日提交的标题为“routenavigatingmethodandapparatus”的美国临时专利申请61/657,864;2012年9月11日提交的标题为“voiceinstructionsduringnavigation”的美国临时专利申请61/699,851;以及2012年9月30日提交的标题为“context-awarevoiceguidance”的美国专利申请13/632,121。临时申请61/655,997、61/657,864和61/699,851,以及专利申请13/632,121以引用的方式并入本文。

b.2d导航和3d导航

一些实施例的导航应用可以2d模式或3d模式显示用于导航的地图。如上所述,浮动控件中的一者是允许用户在三维(3d)中查看导航展示的3d控件150。图2示出了一些实施例的导航应用如何将3d控件150提供为进入3d导航模式的快速机制。该图示出了在三个阶段205-215中的该操作。第一阶段205示出了用户在查看二维导航展示时选择3d控件150。

第二阶段210示出了在导航展示过渡至3d展示过程中的导航展示。如该图中所示,3d控件在该阶段被加亮显示以指示导航展示已进入3d模式。在一些实施例中,导航应用通过渲染来自三维场景中的特定位置的地图视图来生成所导航地图的3d视图,该特定位置在概念上可被视为捕获地图视图的虚拟相机的位置。以下将参考图3进一步描述该渲染。

第三阶段215然后示出了在导航展示过渡至其3d外观结束时的导航展示。如由第二阶段和第三阶段中的建筑物的高度之间的差所示,从2d导航到3d导航的过渡在一些实施例中包括示出所导航地图中的三维对象变得越来越大的动画。

1.虚拟相机

一些实施例的导航应用能够从多个视角显示导航地图。该应用可以三维(3d)或以二维(2d)示出地图。3d地图是如由虚拟相机看到的虚拟场景的所生成模拟。图3呈现了简化的实例以示出虚拟相机312的概念。当渲染3d导航地图时,虚拟相机是3d地图场景中的位置的概念化,设备根据该概念化来渲染场景的3d视图。图3示出了包括四个对象的3d导航地图场景310中的位置,该四个对象为两个建筑物和两条相交道路。为了示出虚拟相机概念,该图示出了三个情景,其中的每一者对应于一个不同的虚拟相机位置(即,不同的渲染位置)和显示在设备上的不同所得视图。

第一阶段301示出了在第一位置处以一角度(例如,30°角度)向下指向3d场景310的虚拟相机312。通过根据阶段301中所示的位置和角度来渲染3d场景,应用生成3d地图视图318。根据该位置,相机正指向设备前面的移动的位置的位置。虚拟相机312保持在设备的当前位置后面。“在当前位置后面”在该情况下意味着沿导航应用的所定义路径反向,该导航应用的所定义路径在与设备移动所在的当前方向相反的方向上。

导航地图视图318看起来像其是由相机从设备的位置指示符316上方及后方所拍摄。虚拟相机的位置和角度将位置指示符316放置在导航地图视图318的底部附近。这也导致了大部分屏幕充满在设备目前位置的前方的街道和建筑物。相比之下,在一些实施例中,位置指示符316在屏幕的中心,其中屏幕中的一半表示设备前方的事物并且另一半表示设备后方的事物。为了简化该图,对于视图318、328和338没有示出道路指示牌。

第二阶段302示出了在一不同的位置处以较大的第二角度(例如,45°角度)向下指向场景310的虚拟相机312。应用根据该角度渲染场景310,得到3d导航地图视图328。建筑物和道路小于其在第一导航地图视图318中的图示。虚拟相机312再一次位于场景310中的位置指示符326上方和后方。这再次导致了位置指示符出现在3d地图视图328的下部分中。相机的位置和取向还再次导致了大部分屏幕显示汽车前方的事物,这是导航的人需要了解的内容。

第三阶段303示出了在自上而下视图处向下观看2d地图345上对应于用来渲染3d视图318和328的3d地图场景310中的位置的位置的虚拟相机312。根据该视角渲染的场景是2d地图视图338。不同于在一些实施例中为视角3d渲染操作的第一和第二阶段的3d渲染操作,第三阶段中的渲染操作是相对简单的,因为该渲染操作仅需要裁切2d地图中由应用或用户所指定的缩放级别所识别的一部分。因此,在该情形下的虚拟相机特征描述有些不必要地使对应用的操作的描述复杂化,因为裁切2d地图的一部分不是视角渲染操作。

在第三阶段303处,当相机从3d透视图切换至2d自上而下视图时,在一些实施例中的地图绘制应用从根据特定视角方向渲染3d场景切换至裁切2d场景。这是因为在这些实施例中,应用被设计来使用比较容易并且不生成不必要的视角伪影的简化渲染操作。然而,在其他实施例中,地图绘制应用使用视角渲染操作来根据自上而下虚拟相机位置渲染3d场景。在这些实施例中,生成的2d地图视图与第三阶段303中所示的地图视图338稍有不同,因为远离视图中心的任何对象都被扭曲,并且对象距视图中心的距离越远扭曲越大。

虚拟相机312在不同实施例中沿不同的轨线移动。在图3中示出了两个此类轨线350和355。在这两个轨线中,相机以弧线移动,并且当相机在弧线上向上移动时向下旋转得更多。轨线355不同于轨线350之处在于,在轨线355中当相机沿弧线向上移动时该相机进一步远离其聚焦点(和用户的当前位置)移动。

当相机沿弧线中的一者移动时,相机旋转以将位置指示符前方的点维持在相机的焦点处。在一些实施例中,用户可关闭三维视图并采用纯二维视图。例如,一些实施例的应用允许三维模式通过3d按钮360的使用被打开和关闭。3d按钮360对于逐向导航特征非常有用,其中该3d按钮具有作为指示符和双态元件的作用。当3d关闭时,相机将维持2d导航体验,但是当3d打开时,在3d查看角度无意义时(例如,在绕3d模式中将被堵塞的拐角行走时)可仍然存在一些自上而下的视角。

2.相机高度的用户调节

除了(或者代替)使导航应用控制相机(例如,当绕拐角行走时从3d转向2d),一些实施例还允许用户调节相机的水平高度。一些实施例允许用户使用两个手指做出命令手势来调节相机的距离(高度)和角度。一些实施例甚至允许多种类型的手势来控制相机。图4示出了通过收缩和展开手势进行的对虚拟相机的距离的调节。在三个阶段中示出该图。在阶段401中,应用示出了虚拟相机412处于用于3d查看的默认水平高度的基本场景410和根据场景410渲染的屏幕视图414。基本场景包含两个建筑物和一个丁字路口。在阶段401中,从45度的向下角度和使建筑物看起来为特定大小的特定高度查看建筑物。位置指示符416也以特定的大小示出。

在阶段402中,用户通过将彼此接近的两个指尖420放置在设备的屏幕上(屏幕视图424上)并且在指尖处于屏幕上时使指尖分开来做出手势。使指尖420分开具有使地图(地图的手指之间的部分和剩余部分两者)变大的效果。为了使地图中的事物看起来更大,应用使虚拟相机412放大。在一些实施例中,地图绘制应用移动虚拟相机412所沿的线450是由虚拟相机412的前部和虚拟相机412的聚焦点形成的线。一些实施例的地图绘制应用基于放大至3d地图410的视图中(缩小出该3d地图的视图)的用户输入来沿由虚拟相机412的前部和3d地图410中的位置形成的线移动虚拟相机412。

在针对阶段402放大之后,用户决定针对阶段403缩小。在该阶段中,用户已将两个手指430放置在屏幕上并且使两个手指更靠近在一起。使手指更靠近在一起具有缩小地图(地图的手指之间的部分和剩余部分两者)的效果。缩小调节是通过沿线455移动虚拟相机412更远离3d地图410来实现。在一些实施例中,地图绘制应用移动虚拟相机412所沿的线455是由虚拟相机412的前部和虚拟相机412的聚焦点形成的线。一些实施例的地图绘制应用基于放大至3d地图410的视图中(缩小出该3d地图的视图)的用户输入来沿由虚拟相机412的前部和3d地图410中的位置形成的线移动虚拟相机412。

在该位置处使用虚拟相机412渲染3d地图视图会得到3d地图视图434,其中建筑物和道路看起来比3d地图视图424中所示的位置更远。如由虚拟相机412的虚线型式所示,虚拟相机412沿线455移动得更远离3d地图410。

除了可通过放大和缩小控制之外,一些应用允许用户改变虚拟相机的角度。图5示出了角度可通过手势调节的相机的一个实施例。在三个阶段501-503中示出了该图。在阶段501中,相机以45度向下指向场景510。场景510包含在屏幕视图514中示出的两个建筑物和一个丁字路口。建筑物是从特定的角度并且以特定的大小示出。位置指示符516也以特定的大小示出。

在阶段502中,用户已经将两个手指520大致彼此水平地放置在屏幕上并且向上拖动。这具有使场景与手指一起向上拖动的明显效果。场景上升是通过虚拟相机512降低并将其查看角度从45度改变成30度来实现。在屏幕视图524中,建筑物和位置指示符看起来比在阶段501中更高。

在用户在阶段502中向上拖动场景之后,用户然后在阶段503中向下拖动场景。为此,用户再次将两个手指530放置在屏幕上并且向下拖动。这使场景与手指530一起向下拖动。场景下降是通过虚拟相机512上升并将其向下相对于场景510的角度改变成60度来实现。在阶段503中,相机512已比阶段501中向上移动得更远并且向下成角度更大。因此,建筑物和位置标识符536在阶段503中再次看起来比阶段501中甚至更矮并且更小。

在一些实施例中,地图绘制应用提供用于不同操作(例如,平移、旋转、从2d进入至3d)的惯性效果。当用户提供特定类型的输入(例如,以大于阈值速率的速率终止的输入)以平移3d地图时,地图绘制应用生成使3d地图继续平移并减速到停止的惯性效果。在一些实施例中的惯性效果为用户提供与3d地图的更逼真交互,该更逼真交互模仿现实世界中的行为。

一些实施例的应用允许相机的距离和角度被独立地控制。例如,其允许距离通过收缩和展开手指手势来控制,并且允许角度通过水平放置的手指的拖动来控制。其他实施例使用被执行以设定相机的距离或角度的任何一个手势,其中另一个变量自动设定。虽然图4和图5示出了导致某些结果的在一定方向上执行的手势,但在一些实施例中,这些手势中的一者或两者可反向。例如,在一些实施例中,向下拖动水平放置的手指可使相机降低而不是使场景降低。这将在手指向上移动时具有向下移动场景的效果,并且在手指向下移动时具有向上移动场景的效果。

ii.地图图块的服务器侧生成

为了显示沉浸式和非沉浸式3d地图展示两者,一些实施例必须生成各种图块以供客户端设备渲染来生成道路、建筑物和周围景色。在一些实施例中,此类图块的实例包括用于非沉浸式3d展示的道路和建筑物图块,以及用于沉浸式3d展示的导航和建筑物图块。

在生成这些图块之前,服务器集合必须生成放置在每个图块中的道路、建筑物和其他几何结构的描述。该任务涉及多个子任务,诸如(1)自各种供应商接收地图数据,(2)处理此类数据以产生一维(1d)道路、(3)平滑1d道路图、(4)定义数据以指定接合点、(5)生成2d道路几何结构和土地覆盖物、(6)平滑2d道路几何结构、(7)生成关于建筑物的数据(例如,估计的高度数据)、(8)使用此类数据来定义建筑物几何结构、(9)构造道路几何结构细节(诸如岛屿、车道标记以及道路几何结构之间的距离和土地覆盖物)、以及(10)识别几何结构边缘节点特征和传播此类特征。

一些实施例的地图绘制服务通过地图数据(例如,从地图供应商接收的数据)的离线处理生成可下载的地图图块数据。在一些实施例中,该离线处理获得地图对象位置输入(例如,道路的纬度/经度数据、行政交界、自然交界等)并且生成聚合道路和所述聚合道路之间的关系。根据聚合道路及其关系,地图绘制服务处理生成道路几何结构。地图绘制服务还使用地图对象位置输入生成土地覆盖物(例如,公园、海洋、州等)的几何结构。一些实施例使用可扩展的分布式处理来根据几何矢量数据创建可下载的地图图块。本领域的普通技术人员将认识到,本申请中所描述的“离线”处理可由实际上连接至地图绘制应用藉以请求图块数据的网络的地图绘制服务计算设备来执行,但用来表示处理并不是响应于用户对图块的请求而被执行。

图6概念性地示出了一些实施例的地图绘制服务处理600。如所提及的,一些实施例离线地执行该处理以生成各种地图图块,所述地图图块可然后响应于实时请求而被发送至客户端设备。处理可被定期(例如,每小时、每天、每周)执行或者可在新数据变得可用(例如,通过地图数据的提供方接收的更新、从用户接收的校正等)的任何时间被执行。

地图绘制服务处理600包括1-d道路处理器605、道路几何结构生成器610、土地覆盖物几何结构生成器615、建筑物几何结构生成器617和图块生成器620。本领域的普通技术人员将认识到,图6中所示出的各种模块化操作可全部在单个服务器上执行,或者可分布在若干计算设备上。实际上,一些操作(例如,图块生成)可被执行为跨越多个计算设备的分布式处理操作。

除了处理操作之外,图6还示出了路段数据625、土地覆盖物数据630和建筑物数据633。路段数据625存储定义道路的位置和特性的数据。在一些实施例中,每个路段都被分配一个或多个名称(例如,“lincolnblvd.”、“ca-1”)、指示路段的路径的位置数据,和路段的属性(例如,速度限制、宽度、车道数量、道路类型等)。在一些实施例中,接合点的位置(也被称为接合点)是路段数据的一部分。土地覆盖物数据630存储定义各种类型的非道路土地覆盖物的位置和特性的数据。土地覆盖物可包括水体(例如,河流、海洋、湖泊、游泳池等)、行政体(例如,州、国家、城市、公园等的交界)、区域标示(例如,乡村/市区/郊区、沙漠/山脉/森林等)或描述道路之间的土地的其他数据。一些实施例的建筑物数据633存储建筑物的位置以及有关建筑物的数据。例如,建筑物数据可包括地表标高数据和地面标高,可根据该地表标高数据和地面标高计算建筑物高度。

可从单个来源(例如,单个地图数据供应商)或若干来源(例如,若干不同供应商)接收路段数据625、土地覆盖物数据630和建筑物数据635。例如,第一供应商可提供用于第一区的道路数据,而第二供应商提供用于第二区的道路数据,第三供应商提供用于第一区和第二区的土地覆盖物数据,并且第四供应商提供标高数据(或其他组合,诸如用于不同类型的信息的土地覆盖物数据的多个不同供应商)。

1-d道路处理器605接收路段数据625并且自该数据生成一个或多个道路图。道路图在一些实施例中将路段集合与路段接合点连结在一起。为了生成道路图,1-d道路处理器605识别应组合成聚合道路(即,基于名称、开始点和结束点和所述路段的公共属性)的路段。例如,当第一路段的结束与第二路段的开始共享一个位置时,所述路段具有至少一个共同的名称,并且所述路段共享至少一些属性,然后道路处理器605将所述路段组合成聚合道路。当在路段数据中缺少额外处理所需要的数据(例如,标高数据、速度限制数据、车道数量)时,1-d道路处理器另外填充该数据。

除了形成聚合道路之外,1-d道路处理器605识别并生成用于道路的接合点的角度信息(如以下所描述),并且识别道路之间的其他关系(例如,汇合双行车道、建立重叠关系)。接合点和路段的连接集形成道路图。

道路几何结构生成器610使用各种过程基于道路图生成用于道路的几何结构(即,用于在客户端设备处绘制道路的顶点的集合)。在一些实施例中,道路几何结构生成器610从道路中心线增长道路几何结构(例如,使用车道号、宽度和偏移数据),然后执行各种操作以细化几何结构。作为实例,道路几何结构生成器610平滑具有不同数量的车道的路段之间的过渡、创建交叉口处更逼真的圆拐角、平滑道路并道以移除多余的道路块和道路之间的间隙,并且移除不相交的独立道路之间的重叠。另外,在一些实施例中,道路几何结构生成器610将特定的特征分配给多边形顶点和/或边缘,诸如标记隧道入口、标记道路内部边缘(例如,各路段之间)、标记人行道以及标记应在其中绘制阴影的桥框。

土地覆盖物几何结构生成器615在一些实施例中使用土地覆盖物数据630和路段数据625两者来创建用于土地覆盖物的几何结构(即,定义多边形的顶点的集合)。在增长用于土地覆盖物的几何结构之后,一些实施例使用各种操作来解决几何结构之间的交界。例如,当组合来自不同来源的数据时,指示对象交界的位置数据可能没有完美地对齐并且因此可能存在对象几何结构之间的间隙或几何结构的重叠。一些实施例使用不同的操作来解决不同的几何结构之间的交界,这取决于对象的类型。另外,土地覆盖物几何结构生成器615使用路段数据来填充土地覆盖物几何结构并确保在土地覆盖物与道路之间不留下间隙。一些实施例使土地覆盖物几何结构朝向道路长出其所标记的交界,在道路中心线位置处停止几何结构。虽然这创建了土地覆盖物几何结构与道路几何结构之间的重叠,但在一些实施例中客户端地图绘制应用包括用以渲染在土地覆盖物几何结构顶部上的道路几何结构的指令。

一些实施例的建筑物几何结构生成器617使用建筑物数据633生成建筑物几何结构。在一些实施例中,如所提及的,除了建筑物的位置之外,建筑物数据633还包括地表标高和地面标高数据。为了生成建筑物几何结构,一些实施例针对建筑物的位置内的各个点计算建筑物高度。建筑物几何结构生成器617检索地表标高并且自地面标高减去该地表标高来计算建筑物高度。在其他实施例中,建筑物几何结构生成器617(或另一个模块)使用3d卫星数据来计算高度数据。为了总体上计算建筑物的高度,建筑物几何结构生成器617将总高度计算为在不同点处的各个所计算高度的平均值,加上乘以点高度的标准偏差的偏差因子常数。偏差因子在一些实施例中是根据地表实况(例如,在实际位置确定的数据)和实验确定的常数。

一些实施例还确定建筑物是平坦的还是非平坦的(例如,具有尖屋顶)。当点高度的标准偏差高于阈值(该阈值也可基于地表实况和实验)时,建筑物几何结构生成器617将屋顶指定为非平坦的。当点高度的标准偏差低于阈值时,建筑物几何结构生成器617将屋顶指定为平坦的。当生成几何结构顶点时,一些实施例对于非平坦建筑物创建尖屋顶(例如,三角棱柱或金字塔)。

道路、土地覆盖物和建筑物几何结构被发送至图块生成器620。在一些实施例中,图块生成器620以不同级别的细节(即,缩放级别)创建用于地图区域的若干图块。一些实施例定义用于不同缩放级别的图块位置交界(例如,其中在第一缩放级别下的图块包含在下一个缩放级别下的四个图块),然后使用分布式处理技术来将不同的几何结构(道路和土地覆盖物两者)分配给各种图块。在将几何结构分配给图块(每个几何结构可被分配给在每个缩放级别下的一个或多个图块)之后,图块生成器620使用额外的分布式处理来生成并压缩图块。在一些实施例中,地图图块包含描述生成来将数据渲染为2d或3d地图的多边形的矢量数据。为了减少矢量数据的量(从而减少文件的大小以用于更容易的传输),一些实施例使用将矢量数据减少为光栅信息的瞬时格栅化过程,然后使用较少顶点重新矢量化数据。

如图所示,图块生成器620将图块数据635输出至存储装置。所存储的图块数据635是由客户端地图绘制应用访问的数据,以便应用生成用于供用户查看的地图。如图所示,一些实施例的图块数据包括非沉浸式地图图块640、沉浸式地图图块645、建筑物图块650和交通图块655。非沉浸式地图图块640和沉浸式地图图块645提供不同级别的数据。在一些实施例中,地图绘制应用包括沉浸式3d视图和非沉浸式3d视图,其中沉浸式3d视图提供额外细节(例如,道路的柏油视图、更逼真的土地覆盖物和建筑物、驾驶视野的更接近模拟等)。一些实施例将独立图块集合使用于不同的视图,其中沉浸式地图图块645包括有关道路和土地覆盖物的更大级别的细节。除了路段和土地覆盖物数据之外,地图图块还可以包含额外数据。例如,图块可包括标签数据的各种集合(例如,道路标签、地点标签、土地覆盖物标签等)。如图所示,在一些实施例中,图块数据635还包括指示用于绘制建筑物(基于高度和位置信息)的几何结构的建筑物图块,以及定期以交通信息更新的交通图块655。一些实施例使用用于沉浸式和非沉浸式3d视图两者的建筑物图块。

a.道路数据和道路图生成

如以上所述,一些实施例接收路段数据(即,从一个或多个来源)并且根据所述路段生成道路图。图7概念性地示出了用于生成道路图的一些实施例的过程700。将参考图8来描述过程700,图8示出了针对地图区域内的道路的一些实施例的各种数据结构。以下将更详细地描述的这些数据结构包括路段800、边缘805、道路810、接合点815和道路图820。

如图所示,过程700从接收(在710处)用于地图区域的路段和接合点的集合开始。在一些实施例中,针对不同的地图区域(例如,针对州、矩形地理区域、大陆块等)单独地运行过程700(或类似的道路图生成过程)。可从单个来源或从若干不同的来源接收用于地图区域的路段。在一些实施例中,路段是具有单个一致的属性集合(即,相同数量的车道、速度限制等)的道路的一致伸展。当道路属性改变(例如,速度限制从45mph改变至35mph,或增加车道)时,新路段被定义。

通常从与在接合点相汇的道路相同的来源接收用于地图区域的接合点。在一些实施例中,接合点定义至少两条道路的交叉口——即,两条或更多个路段不仅穿过相同位置(该相同位置可根据路段数据确定),而且路段事实上彼此相交以使车辆可在接合点处从一个路段过渡至另一个路段。

图8示出了路段的一些实施例的数据结构800以及接合点的数据结构815。如图所示,路段包括段id(即,唯一标识)、一个或多个名称、几何结构信息和属性信息。几何结构信息(其不同于创建来用于定义矢量数据的道路几何结构)定义有关路段的路径和其他几何信息。如图所示,几何结构信息包括中心线路径数据(例如,定义道路的中心的坐标的排序字符串)、开始和结束接合点信息、用以指示宽度和相对于中心线的偏移的参数、以及能够对沿路段的任一点处的道路的两边进行评估的功能。在一些实施例中,这是关于路段类的函数,该函数利用中心线、偏移和宽度信息来计算道路的两边的位置。虽然该图示出了包括开始和结束接合点的道路绘制数据,但一些实施例并不将一个接合点定义为开始并且将一个接合点定义为结束,而是仅指示两个接合点id作为终点(或如果路段到达尽头则仅指示一个接合点id作为终点)。

属性信息描述有关路段的元数据,诸如道路类型(或功能道路类,其定义道路的重要级别,从高速公路下降至拟路径)、车道数量、速度限制、道路的相对标高(其可包含对一条或多条其他路段和/或接合点的参考,从而指示目前路段在所参考的对象以下或以上延伸)、道路的高度(与识别标高有关)、路的形式(其将路径定义为双行车道、单行车道、走道、阶梯、连接道路、岔道等)、限制(例如,长话限制、车辆类型限制、对道路为私有的指示等)。

另外,如图8中所示,一些实施例定义每个路段的边缘805。边缘数据结构包含对边缘所对应的路段的参考(例如,指针)、指示边缘是否以与路段相同的方向取向的取向标志、以及用以使用所参考路段的宽度和中心线数据来计算边缘的右边和左边的功能。在一些实施例中,该功能作为关于边缘类的函数而存在。边缘在一些实施例中是用来创建道路图的数据构造。对于具有开始和结束接合点两者的路段来说,一些实施例定义两个边缘(在每个方向上一个),以使每个接合点可参考从接合点引出的一个边缘。

如图8中所示,接合点数据结构815包括唯一接合点id、边缘的具有相关联角度的排序列表、位置和标高等级。虽然该数据结构示出了边缘列表,但一些实施例另外包括由路段id引用的路段的列表,可根据该列表生成边缘列表。在一些实施例中,从道路数据来源接收接合点id、路段id的列表和标高等级,而角度和边缘列表由地图绘制服务计算。因为每个路段与一个或多个边缘相关联,所以地图绘制服务处理可确定用以对接合点列表的适当导向边缘(被导向离开接合点的边缘)。对于许多地面街道接合点来说,相对标高并不是特别有意义的,因为接合点和在该位置处的所有道路将处于相同水平高度。然而,在交叉口诸如立体交叉道处,或当路段通过高速公路下方或上方时,标高等级指示哪些接合点在其他接合点和/或路段的顶部上。

在接收到路段之后,过程根据路段和接合点定义(在710处)用于地图区域的道路图。如图8中所示,道路图数据结构820包括路段集合和接合点集合。在一些实施例中,应用遍历边缘和接合点以识别边缘的连接集,然后将这些边缘映射至路段。其他实施例使用存储在路段中的每一者中的开始和结束接合点,和针对每个接合点存储的路段的列表,来定义路段和接合点的连接性。一些实施例定义用于地图区域的单个道路图。然而,当存在不相交的多个连接集时,一些实施例将定义多个道路图。

接下来,过程700对道路图执行(在715处)预处理以使接合点处的路段对齐。为了适当地识别接合点处的道路的角度,并且为了生成用于道路的多边形几何结构,在接合点处相交的道路应该全部在完全相同的位置处结束/开始。然而,用于在特定接合点处相汇的路段中的每一者的道路中心线可能并没有在所接收的地图数据中的完全相同位置处结束。因此,针对每个接合点,一些实施例计算路段路径结束的平均位置,并且将该位置分配给其位置的接合点。另外,地图绘制服务处理修改用于在接合点处相汇的路段中的每一者的路段路径数据,使得中心线全部在所计算的平均位置处结束。

图9示出了在两个阶段920和930上针对在接合点处相汇的两个路段905和910的此类修改的实例。如图所示,每个路段包括开始接合点和结束接合点,其中第一路段905的结束接合点和第二路段910的开始接合点是相同的(两者参考具有id16的接合点)。然而,如第一阶段920中所示,第一路段905和第二路段910的中心线路径并没有在相同地点开始/结束(并且,实际上,完全不相交)。因此,一些实施例识别应该相汇的结束的平均位置。对于具有仅两个路段的接合点来说,该位置将在沿两条路径终点之间的线上的中途,如由图中的位置915所示。中心线的结束顶点中的每一者具有一对坐标值(例如,(x,y)坐标值或地理位置坐标(纬度、经度))。一些实施例在每个坐标的所有结束顶点之间计算平均值,并且使用该平均值作为接合点的平均位置。

在识别接合点位置之后,地图绘制服务处理修改路段,使得中心线全部在所识别位置处结束。第二阶段930示出了此类结果的一个实例。在一些实施例中,当接收路段时,中心线路径可能并不具有在固定距离处的顶点。一些实施例的地图绘制服务处理标准化路段顶点,使得每个顶点在固定距离(例如,10米)处,从而实现更平滑(较少弯折)的道路多边形。一些实施例对于特定路段识别距结束固定距离(例如,50米、100米等)的顶点并保持该点固定,同时修改该点与结束顶点之间的其他顶点。在一些实施例中,使顶点随着所述顶点变得更远离终点而移动较少的量。即,针对结束顶点至所识别位置的移动计算矢量,并且使其他顶点移动该矢量的较少迭代。

在预处理完成的情况下,过程将路段组合(在720处)成聚合道路。一些实施例确定路段何时是实际上相同道路的不同部分,使得路段可被当作单个道路以用于定义地图(例如,用于生成标签)的目的以及用于生成用于道路的多边形的某些方面。在一些实施例中,过程使用路段的各种属性和几何结构数据来确定是否应该组合两个路段。

一些实施例遍历道路图以将路段组合成聚合道路。当遍历图、从特定路段进入接合点时,地图绘制服务处理确定其他路段中的哪一个是将为当前路段的延续的最佳匹配。一些实施例对路段中的每一者评分,并且以贪婪方式聚合道路。

为了计算特定路段的分数,地图绘制服务处理评估驶入的路段与特定路段之间的角度差、路段名称的兼容性,并且比较道路属性。对于角度来说,路段越接近180°(即,直线通过接合点的延续),路段将通常得分越高;通常,道路将继续直线或大致直线通过接合点,而不转弯。一些实施例执行与每个路段相关联的道路名称之间的模糊比较。即,处理使用近似字符串匹配技术来将驶入路段的字符串与特定路段的字符串进行比较。在一些情况下,路段中的一者或多者可具有多个名称,并且处理执行每一者的比较以查找一个或多个最佳匹配,并且在计算分数中使用这些最佳匹配(例如,使用“sandiegofreewaysouth”与“sandiegofreewaysouth”而不是与“1-405south”的比较)。

另外,在一些实施例中,比较道路属性中的至少一些以计算比较分数。例如,一些实施例的地图绘制服务处理比较道路类型(即,公路、干线道路、次要道路等)、车道数量、速度限制、路的形式(即,单行车道、双行车道等)。一旦对分数进行了计算,一些实施例选择具有最高分数的路段并确定该最高分数是否高于用于继续道路的阈值。另外,一些实施例识别所选择的最佳路段,并且执行所选择的路段与其他路段中的每一者之间的比较。只有在第一路段是第二路段的最佳匹配并且第二路段是第一路段的最佳匹配时处理才聚合道路。这防止事实上在“t”形交叉口结束的驶入路段与事实上继续穿过交叉口的路段中的一者接合。

图10示出了为用于在接合点1020处聚合成道路的候选者的三个路段1005、1010和1015的实例。如图所示,第一路段1005具有名称“威尔士大道”、40mph的速度限制和三个车道,并且是干线道路。第二路段1010也具有名称“威尔士大道”和三个车道,并且也是干线道路,但是具有35mph的速度限制。第三路段1015具有名称“saltair大街”、35mph的速度限制和2个车道,并且表征为次要道路。如果初始驶入路段是第三路段1015,则路段1010将为两个可能延续中的较高得分的路段。然而,对于第二路段1010来说,第三路段1015将不是最佳道路延续,因为第一路段1005将具有高得多的延续分数(角度、道路名称、道路类型和车道数量是相同的,并且唯一差异是速度限制中的5mph)。如此,在此接合点1020处的最佳结果针对如下道路,其中第三路段1015为将终止的一部分,并且第一路段1005和第二路段1010连结在一起作为单条道路。其他实施例不执行相互作用测试,但相反地设定不良匹配为不可能的足够高的阈值。此外,在遍历道路图时,当较优匹配在遍历中发生得较迟时,一些实施例允许将一个路段从一个聚合道路移动至另一个(例如,如果发现路段1015继续进入路段1010中,但然后再次通过路段1005到达接合点1020,则路段1010可从第一道路移动至也包含路段1005的新道路)。

图8示出了一些实施例的道路数据结构810。如图所示,道路数据结构810包括边缘的排序列表(道路对象通过该排序列表包含对该道路对象的组成路段的引用)。另外,道路结构包含对沿道路的任一点处的道路中心线和道路的两边进行评估的功能。在一些实施例中,中心线功能作为参考组成路段的中心线信息(并且也可以内插在任何稍微失配的中心线之间)的道路类的函数而存在。路边功能也作为道路类的函数而存在,该功能使用来自由道路对象包含的路段对象的路边函数。

返回图7,在组合路段之后,过程700得出(在725处)额外的道路描述数据。在一些实施例中,这涉及在路段信息中填充缺失的数据。因为一些实施例将路段(和其他数据)实现为对象,所以在一些情况下对象变量将具有空值,因为数据还没有由地图数据提供方提供。例如,速度限制数据、道路宽度、车道数量或其他参数可能缺失。一些实施例在可能的情况下使用来自路段的其他信息或来自相邻路段的信息自动填充路段的缺失数据中的至少一些的值。例如,一些实施例可基于相邻路段的速度限制来填充路段的缺失的速度限制信息(例如,如果第一路段具有55mph的速度限制并且第三路段具有35mph的速度限制,则可以45mph的速度限制填充中间路段)。

其他实施例仅填充生成道路几何结构所必需的数据,诸如车道数量和道路宽度信息。例如,一些实施例可使用聚合道路内的相邻路段来生成车道数量(例如,如果特定路段的两边上的路段都具有特定数量的车道,则该特定数量的车道也可被分配给该特定路段)。对于道路宽度,一些实施例使用车道数量(如果其存在)来将宽度分配给道路(例如,假设每个车道为4米宽)。另一方面,一些实施例基于道路类型来分配道路宽度(即,高速公路具有第一宽度、主要干线具有第二宽度等)。实际上,一些实施例自道路类型得出车道数量(例如,高速公路总是被分配三个车道等),然后基于车道数量来生成宽度。

另外,一些实施例填充用于高度或标高信息的缺失数据。如以上所述,在一些情况下地图数据具体指示特定路段通过另一个路段上方(或下方),或通过接合点上方(或下方),或者特定接合点通过另一个接合点上方(或下方)。然而,该相对标高数据在一些情况下可能缺失。当第一路段(或接合点)和第二路段(或接合点)具有在平坦平面中相交的中心线路径,但对于所述路段没有定义接合点时,则路径必须在不同的标高处。当包括来自地图数据提供方的绝对标高数据时,该数据可用于确定相对标高数据(即,定义具有较低绝对标高的第一路段通过具有较高绝对标高的第二路段下方的关系)。

当对于在平面中相交但在接合点处不相汇的路段的特定集合无法确定相对标高数据时,一些实施例创建针对路段的随机相对排序。在其他实施例中,可能的相对排序可自非相交道路的道路类型得出,但是也可以使用其他附近路段的属性。图11示出了第一路段1105(“i-405n”)与第二路段1110(“威尔士大道”)和第三路段1115(“主街”)相交(在平面中)的情形。然而,在这种情况下,地图数据不指示这些路段之间的任何接合点。i-405n路段具有高度1而wilshire路段具有高度0。然而,主街路段具有空高度(即,该信息没有提供)。基于i-405n路段在威尔士大道路段上方行进的事实,一些实施例还假定i-405n将在主街上方行进。如此,地图绘制服务操作以值0自动填充用于主街的路段数据结构的高度,或者将填充指示主街路段在i-405n路段下方行进的相对排序。

另外,过程700建立(在730处)道路与路段之间的关系。在一些实施例中,建立关系包括识别语义数据,诸如双行车道的相对边,和定义相关道路之间的连结。在一些实施例中,过程识别包含具有相同或类似名称(例如,“i-5n”和“i-5s”)的路段的道路、标记为双行车道(即,以路字段的形式)的道路,以及在彼此的阈值距离和平行的阈值角度内的道路。图12示出了相隔距离x、在相反的方向上平行地延伸并且两者都称为“主街”的两个路段1205和1210。假设距离x小于用于具有相同名称的道路的阈值距离,则这些道路将被连结为相关联的双行车道,并且道路之间的转弯可被分类为u形转弯而不是独立左转弯。可传播的额外语义数据包括为连接道路/岔道分配名称(例如,高速公路入口、高速公路立体交叉道、右转弯岔道等)。

最后,过程700生成(在735处)道路的平滑型式。在一些实施例中,中心线数据可具有噪声。例如,高速公路的五英里伸展现实中可为直的,但数据在各处可具有轻微的反复。另外,因为道路被定义为中心线顶点之间的线,所以弯折可能出现在道路实际上具有平滑转弯的地方。此外,当路段在接合点处接合时,这可创建实际上应该更平滑的急转弯。因为这种噪声是不需要的,所以一些实施例对道路图中的道路(例如,每次一个路段,或对聚合道路)施加由道路特性控制的平滑操作。为了执行平滑,各种不同的操作可由不同实施例执行。一些实施例使用基于道路中的每个顶点的相邻顶点的位置使该每个顶点移动一段距离的平滑操作(例如,拉普拉斯平滑)。

一些实施例对于较快的道路允许更多平滑,因为期望这些道路(例如,高速公路)将更平滑且不太可能具有尖角。一些实施例使用速度限制数据来控制平滑。例如,一些实施例对于具有不同速度限制的道路允许中心线与所接收的顶点数据的不同偏差(例如,对于速度限制65的道路允许达5米的偏差,并且对于30mph的道路允许2米的偏差)。图13示出了具有25mph的速度限制的弯折的道路1310。对道路施加平滑操作的结果被示出为修改的道路1320。另一方面,图14示出了具有60mph的速度限制的类似弯折的道路1410。对道路施加类似平滑操作的结果被示出为修改的道路1420。如图所示,修改的道路1420示出了较高级别的曲线平滑,因为道路的速度限制较大。一些实施例使用其他特性来修改所允许的平滑的级别,诸如道路类型(其可充当用于速度限制的代理)。

另外,一些实施例在特殊情况下限制平滑。例如,道路可能进行90°转弯(例如,其中两条道路都在居住地区中的接合点处结束,并且已连结在一起)。在此类情况下,一些实施例固定接近于接合点的两个点(90°转弯的每个边上一个)并且平滑这两个点之间的小急弯,而不是过多地平滑道路。

b.生成道路几何结构

在从路段和接合点生成道路图、聚合道路图中的道路、填充缺失数据、平滑聚合道路等之后,一些实施例的地图绘制服务的离线处理生成用于道路图中的道路的几何结构。在一些实施例中,几何结构包括定义将要由客户端地图绘制应用渲染的多边形的边缘的顶点集合。这些几何结构包括在矢量地图图块中,所述矢量地图图块被发送至运行地图绘制应用的设备,以便地图绘制应用渲染所得的多边形。地图绘制服务处理最初以路段定义(即,中心线顶点和宽度数据)的几何结构为基础,而且还对几何结构执行各种调节操作,诸如平滑多边形以创建更逼真的渲染道路和交叉口、消除重叠,以及以标记要绘制的特征(例如,阴影、桥框、路缘、人行道、隧道等)的数据对顶点作注释。

图15概念性地示出了用于生成将用于在客户端地图绘制应用上生成道路多边形的道路几何结构的一些实施例的过程1500。与过程700一样,各种实施例将过程1500执行为可在单个计算设备上执行或分布在若干计算设备上的离线过程。

如图所示,过程1500从接收(在1505处)用于地图区域的道路图开始。如上所述以及图8所示,道路图是路段和接合点的连接集。在一些实施例中,针对不同的地图区域(例如,针对州、矩形地理区域、大陆块等)单独地运行过程700(或类似的道路图生成过程)。

几何结构生成过程1500生成(在1510处)道路图中的路段的初始多边形表示。一些实施例将分段的线性中心线表示(其应在以固定距离插入顶点并随后平滑这些顶点后在过程诸如上述过程700中得到合理平滑)展开成沿循道路路径的多边形,所述道路具有由其路段数据结构所指定的宽度。所得多边形基本上为具有可能看起来弯曲的平行边的结构。然而,这些多边形在许多情形下将需要被调节以便生成更逼真的道路动画。

在一些实施例中,多边形调节包括平滑多边形以创建更逼真的渲染道路和接合点、消除重叠、以及以标记要绘制的特征(例如,阴影、桥框、路缘、隧道等)的数据对顶点作注释。过程1500中的接下来若干操作以特定顺序描述这些调节操作。然而,本领域的普通技术人员将认识到,一旦初始多边形被增长,这些操作可以各种不同顺序执行。

过程1500调节(在1515处)接合点处的几何结构。一般来说,除两个或更多个几何结构之间的重叠以外,主要在道路图的接合点处需要平滑。在路段内,上述顶点的平滑应防止任何种类的强加事物或不规则性。一些实施例遍历道路图,并且在每个接合点处确定对几何结构的任何修改是否为确保客户端地图绘制应用处平滑的、有吸引力的渲染道路所必需的(并且随后进行那些修改)。这些接合点可仅仅涉及沿速度限制改变的直线继续的道路(如果道路宽度保持恒定,则在一些实施例中这将不涉及任何平滑),但是可能还包括高速公路并道、以各种角度相交的道路、大道路与小道路之间的交叉口(其中高速公路并道是一个实例)、车道扩展等。

以下将连同实例中的一些的图一起来描述各种类型的这些接合点平滑实例。当道路扩展或收缩其车道数量时,一些实施例执行特定的平滑操作。在一些实施例中,地图绘制服务处理首先确定接合点是否包括仅两个边缘,并且随后确定所述两个边缘连接在道路内。如果是这样,并且车道数量改变,则一些实施例执行以下过渡平滑操作中的一者以防止看起来不自然的尖角。

图16示出了经过三个阶段1610-1630执行以平滑车道扩展接合点的第一操作,其中道路的两边中的一者保持为直的(即,是“对齐的”)。如第一阶段1610中所示,在该实例中,第一路段1605连接至第二路段1615中。第一路段1605具有指示该第一路段具有两个车道的数据,而第二路段1615具有指示该第二路段具有三个车道的数据。在一些情况下,在从地图数据提供方接收的路段数据中指示该数据。当地图数据提供方包括车道信息时,在一些情况下该提供方另外包括车道连接性数据。在一些情况下,车道被编号(例如,从左至右),并且连接性数据指示第一路段(例如,路段1605)中的哪个车道继续进入第二路段(例如,路段1615)中的哪个车道中。如第一阶段1610中所示,在这种情况下,第一路段1605的车道1继续进入第二路段1615的车道1中,而第一路段的车道2继续进入第二路段的车道2和车道3两者中。这指示车道扩展发生在道路的右边(基于道路的行进方向的“右”)上。该车道连接性数据在各种实施例中可与接合点存储在一起,或与路段中的一者或两者存储在一起。

第二阶段1620示出了第一路段和第二路段的初始增长的路段几何结构1625和1635。如可看出的,第二路段几何结构1635比第一路段几何结构1625宽,并且该额外宽度中的全部都在道路的右边,而道路的左边为对齐的。当提供车道连接性数据时,一些实施例生成具有出现在正确位置中的额外车道的几何结构。然而,当使用此几何结构渲染时,柏油将看来像是具有90度角度,并且车道莫名其妙地出现。虽然高速公路车道确实偶而以这种方式开始,但是通常高速公路车道从现有车道平滑地扩展出来。

因此,一些实施例使车道扩展自动逐渐减小,如第三阶段1630中所示。一些实施例识别沿较窄路段几何结构(具有较少车道的几何结构)的边缘的一个点,并且从该点至较宽路段的边缘的开始逐渐减小。一些实施例使用固定的距离来识别该点(例如,25米、50米等)。逐渐减小可为直线(如所示)或曲线。另外,一些实施例使用较宽几何结构内的过渡,或使过渡遍布两个几何结构。

图17示出了如由一些实施例的客户端地图绘制应用渲染的平滑车道扩展的结果1700(例如,在便携式设备的显示器上)。对于该图,以及该章节内的许多图,示出了如在客户端地图绘制应用上渲染的特定路段的结果。在这些图中,没有显示通常将存在于地图绘制应用显示器上的各种控件和特征(例如,用户位置指示符(或导航位置器)、路线线条、额外土地覆盖物和建筑物特征、ui控件等),以便突出路段的各个方面。在图17中,柏油进行从两个车道至三个车道的平滑过渡,并且车道标记在车道完全形成之前一点开始。如以下将描述的,一些实施例增添道路框(例如,路缘、护拦等)和车道标记。在不同实施例中,用于绘制道路框的指令可被传送至客户端地图绘制应用作为额外几何结构或作为对几何结构的注释,其中用于渲染的指令基于存储在客户端设备处的注释。

图18示出了经过三个阶段1810-1830执行以平滑车道扩展接合点的第二操作,其中道路在两边扩展。如第一阶段1810中所示,在该实例中,第一路段1805连接至第二路段1815中。在这种情况下,不存在车道连接性数据,但是第一路段1805具有两个车道,而第二路段1815具有三个车道。车道计数数据可从地图提供方直接提供,或从所提供的道路宽度或道路类型得出。

第二阶段1820示出了第一路段和第二路段的初始增长的路段几何结构1825和1835。如可看到,第二路段几何结构1835比第一路段几何结构1825宽,并且额外宽度在道路的两个边之间拆分。当没有车道连接性数据可用时,一些实施例使用拆分道路的两个边之间的差的默认车道扩展。然而,当使用该几何结构渲染时,柏油将看来像是在两边上都具有90度角度。虽然高速公路车道可能偶而以这种方式开始,但是通常高速公路车道从现有车道平滑地扩展出来。

因此,一些实施例使车道扩展在两边上都自动逐渐减小,如第三阶段1830中所示。一些实施例对于道路的每个边识别沿较窄路段几何结构的边缘的一个点,并且从该点至较宽路段的边缘的开始逐渐减小。一些实施例使用固定的距离来识别该点(例如,25米、50米等)。逐渐减小可为直线(如所示)或曲线。另外,一些实施例使用较宽几何结构内的过渡,或使过渡遍布两个几何结构。

图19示出了如由客户端地图绘制应用渲染的平滑车道扩展的结果1900(例如,在便携式设备的显示器上)。柏油进行从两个车道至三个车道的平滑过渡。一些实施例使车道中的两者在一个方向上弯曲并且在另一边上增添新车道,以便在一些实施例中保持车道标记连续(例如,为新车道选取随机边,或使用默认值)。

以上实例是所关注的接合点仅具有两个路段的情形。针对具有三条或更多个路段的接合点,一些实施例识别特殊情况,并且对于其他情况通过接合点中的路段的列表逐步安排并且对用于后续道路对的几何结构执行校正。当双向单行车道道路拆分成一对对应的双行车道时,一个此类特殊情况发生。这经常发生在中央分离带被引入双车道道路(在任一方向上一个车道)中的时候。一些实施例在外边缘处使道路向外(从单行车道至双行车道)逐渐减小,并且识别用于两个双行车道的内部边缘的并道点。一些实施例使用车道信息来确定并道点(例如,如果双行车道中的一者是一个车道而另一者是两个车道),而其他实施例使用在单行车道(在其结束处)的中心处的一个点的默认值。

当通过接合点处的路段的列表逐步安排时,一些实施例基于两个路段之间的角度执行不同校正。一些实施例选择接合点的第一路段,然后校正由路段几何结构(如离开接合点查看的)的左边形成的拐角,其中用于第二路段的路段几何结构(如离开接合点查看的)的右边相对于第一路段直接在逆时针方向上。然后将第二路段设定为第一路段,并且对于下一拐角重复该过程,直到全部拐角都被校正为止。

以下将连同实例中的一些的图一起来描述对于各种接合点角度执行的各种校正。这些图尽管示出了具有若干路段的接合点,但也示出了用于在实例中彼此相符的仅两个路段的几何结构。

图20示出了经过三个阶段2010-2030,当路段之间的角度大于第一阈值角度(例如,170°)时执行以平滑路段几何结构之间的拐角的逐渐减小操作。在此类情况下,一些实施例使道路中的一者的边自动逐渐减小以与另一道路的边相汇。如第一阶段2010中所示,在该实例中,第一路段2005与第二路段2015在接合点处相交以及与两条额外路段2025和2035相交。

第二阶段2020示出了两个路段2005和2015的初始增长的路段几何结构2040和2045。其他两个路段的几何结构未在该图中示出,因为一些实施例的地图绘制服务处理一次校正接合点的一个拐角,并且该实例示出了路段2005与路段2015之间的校正。一些实施例的地图绘制服务处理将随后执行对路段2015与路段2025之间的拐角的校正、对路段2025与路段2035之间的拐角的校正、以及最后对路段2035与路段2005之间的拐角的校正。如在该第二阶段2020处所示,几何结构2040与几何结构2045之间的初始拐角涉及视觉上不协调的(并且不真实的)中断,部分由于道路具有不同的宽度(然而一些实施例对于相同宽度的道路执行相同的过程)。

因此,一些实施例使较窄路段的边自动逐渐减小至较宽路段的边,如由第三阶段2030中的修改的几何结构2040所示。在这种情况下,因为较宽路段是两个路段中更偏逆时针方向的,所以处理使较窄路段的左边逐渐减小至较宽路段的右边(对于该实例和后续实例,特定路段的“右”边和“左”边是自沿特定路段离开接合点的车辆的视角查看的)。当较宽路段是两个路段中更偏顺时针方向的时,处理使较窄路段的右边逐渐减小至较宽路段的左边。为了执行逐渐减小操作,一些实施例固定沿较窄路段几何结构的边的一个点,并且从该点至较宽几何结构的边的开始逐渐减小。一些实施例使用固定的距离来识别该点(例如,25米、50米等)。逐渐减小可为直线(如所示)或曲线。该操作类似于图16中所示的逐渐减小,并且当不同宽度的仅两条道路在接合点处相汇时也可被执行。

图21示出了如由一些实施例的客户端地图绘制应用渲染的平滑接合点的结果2100(例如,在便携式设备的显示器上)。柏油指示从第一路段(示出在显示器的底部)至第二较宽路段(示出在显示器的右上方)的平滑右转弯。另外,显示器包括用于形成交叉口的其他两个路段的柏油(和车道标记、道路框等)。在不同实施例中,用于绘制道路框的指令可被传送至客户端地图绘制应用作为额外几何结构或作为对几何结构的注释,其中用于渲染的指令基于存储在客户端设备处的注释。

图22示出了经过三个阶段2210-2230,当路段之间的角度小于第一阈值角度并大于第二阈值角度(例如,在120°与170°之间)时执行以平滑路段几何结构之间的拐角的投影操作。在此类情况下,一些实施例使道路中的一者的边自动投影以与另一个道路的边相汇。如第一阶段2210中所示,在该实例中,第一路段2205与第二路段2215在接合点处相交以及与两条额外路段2225和2235相交。

第二阶段2220示出了两个路段2205和2215的初始增长的路段几何结构2240和2245。其他两个路段的几何结构未在该图中示出,因为一些实施例的地图绘制服务处理一次校正接合点的一个拐角,并且该实例示出了路段2205与路段2215之间的校正。一些实施例的地图绘制服务处理将随后执行对路段2215与路段2225之间的拐角的校正、对路段2225与路段2235之间的拐角的校正,以及最后对路段2235与路段2205之间的拐角的校正。如在该第二阶段2220处所示,几何结构2240与几何结构2245之间的初始拐角涉及视觉上不协调的(并且不真实的)中断,部分由于道路具有不同的宽度(然而一些实施例对于相同宽度的道路执行相同的过程)。

鉴于针对图20中所示的几何结构之间的角度,一些实施例的地图绘制服务处理使较窄道路逐渐减小至较宽道路,在该实例中,地图绘制服务处理使较宽道路的边投影至较窄道路上,如由第三阶段2230中的修改的几何结构2240所示。在这种情况下,因为较宽路段是两个路段中更偏逆时针方向的,所以处理使几何结构2245的右边投影至几何结构2240的中心线(或左边,在一些实施例中)上。当较宽路段是两个路段中更偏顺时针方向的时,处理使较宽路段的左边投影至较窄路段的中心线(或右边,在一些实施例中)上。鉴于逐渐减小操作涉及改变路段中的一者的边的角度,在一些实施例中投影仅延伸所投影的边,如阶段2230中所示。

图23示出了如由一些实施例的客户端地图绘制应用渲染的平滑接合点的结果2300(例如,在便携式设备的显示器上)。柏油指示从第一路段(示出在显示器的底部)至第二较宽路段(示出在显示器的右上方)的平滑右转弯。另外,显示器包括用于形成交叉口的其他两个路段的柏油(和车道标记、道路框等)。在不同实施例中,用于绘制道路框的指令可被传送至客户端地图绘制应用作为额外几何结构或作为对几何结构的注释,其中用于渲染的指令基于存储在客户端设备处的注释。

图24示出了经过三个阶段2410-2430,当路段之间的角度小于第一阈值角度并大于第二阈值角度(例如,在30°与80°之间)时执行以消除路段几何结构的多余道路的裁剪操作。在此类情况下,一些实施例自动裁剪道路中的一者或两者的边以避免超过另一条道路。如第一阶段2410中所示,在该实例中,第一路段2405与第二路段2415在接合点处相交以及与额外路段2425相交。

第二阶段2420示出了两个路段2405和2415的初始增长的路段几何结构2440和2445。其他路段的几何结构未在该图中示出,因为一些实施例的地图绘制服务处理一次校正接合点的一个拐角,并且该实例示出了路段2405与路段2415之间的校正。下文所述的图25示出了路段2415与路段2425之间的校正。如在该第二阶段2420处所示,几何结构2440与2445之间的初始拐角是没有问题的,但几何结构2445的右边超过几何结构2440的右边,部分由于几何结构2440比几何结构2445窄。

因此,一些实施例的地图绘制服务处理将更偏顺时针方向的路段的左边裁剪回到两个路段中的更偏逆时针方向的中心线,并且对应地将更偏逆时针方向的路段的右边裁剪回到更偏顺时针方向的路段的中心线,如由第三阶段2430中的修改的几何结构2440和2445所示。在一些实施例中,仅裁剪较宽路段的边,但是其他实施例如所示裁剪两个几何结构。如第三阶段2430中所示,这移除道路的多余“耳部”,该多余“耳部”否则将与事实不符地伸出交叉口。

图25示出了经过三个阶段2510-2530,执行以平滑路段几何结构2445与路段2425的路段几何结构2505之间的拐角的相交操作。一些实施例由于以大于180°的角度留在路段几何结构之间的间隙而对于此类大角度执行相交操作。在此类情况下,一些实施例识别道路边的切线之间的交叉口,并且延伸或裁剪道路几何结构,使得边在该交叉点处结束。

第二阶段2520示出了如在图24中所示的操作中修改的路段几何结构2445,以及路段2425的初始增长的路段几何结构2505。如图所示,这(1)留下两个几何结构之间的间隙,并且(2)导致较宽路段2445超过路段2505。第二阶段还示出了表示更偏顺时针方向的几何结构2445的左边的投影与更偏逆时针方向的几何结构2505的右边的投影的相交的虚线。

如第三阶段2530中所示,一些实施例将几何结构的边裁剪或投影至该交叉点。就较窄路段2505而言,边延伸来填充间隙,而就较宽路段2445而言,裁剪边以防止几何结构2505的超过。

图26示出了如由一些实施例的客户端地图绘制应用渲染的来自前两个图的平滑接合点的结果2600(例如,在便携式设备的显示器上)。柏油指示后续道路中的每一者之间的平滑转弯,而没有缺失部分或多余柏油片。

图27示出了经过三个阶段2710-2730,在一些实施例中执行以平滑在符合高速公路入口匝道的特征的情形下的路段几何结构之间的拐角的逐渐减小操作。在该实例中,第一路段2705在接合点处继续直线进入第三路段2725中,其中第二路段2715以相对于第一路段2705的浅角度进入接合点。该情形在一些实施例中符合高速公路并道的轮廓:第一路段和第三路段是连接的道路、比第二路段更宽,并且第一路段与第二路段之间的角度小于阈值角度(例如,30°)。

第二阶段2720示出了三个路段2705-2725的初始增长的路段几何结构2735-2745。两个高速公路段几何结构2735和2745显著比入口匝道路段几何结构2740更宽。另外,第三路段几何结构2745比第一路段几何结构2745更宽,以便适应并道车道。然而,因此,初始几何结构在入口匝道几何结构2740与第三路段几何结构2745之间留下间隙。

因此,一些实施例的地图绘制服务处理使第二几何结构2740的外侧(左边)逐渐减小至第三几何结构2745的右边,如第三阶段2730中所示。在这种情况下,逐渐减小被示出为弯曲的路边,但是不同实施例可使用其他方法(例如,使用直线来连接路段)。一些实施例还使用从第一几何结构2735的左边至第三几何结构2745的右边的逐渐减小,如在以下所示的渲染结果中。

图28示出了如由一些实施例的客户端地图绘制应用渲染的平滑高速公路并道接合点的结果2800(例如,在便携式设备的显示器上)。柏油指示平滑并道,而非将作为初始矩形几何结构的结果渲染的不连贯显示。此外,该图示出了一些实施例不同地渲染不同的道路。例如,一些实施例将高速公路渲染为与其他道路(包括高速公路入口匝道)不同的色彩(或色调)。

除了使用逐渐减小、投影、裁剪等操作来修改几何结构之外,一些实施例使用用以在某些类型的接合点处创建更圆的拐角的技术。一些实施例生成创建这些圆拐角的新几何结构,而不是使用技术来修改已经生成的路段几何结构以便创建圆拐角。在一些实施例中,修改已经生成的路段几何结构将是处理极其密集的。

图29示出了经过三个阶段2910-2930接合点处的此类额外几何结构的生成以便在接合点处创建更逼真的圆拐角。第一阶段2910示出了具有以直角相交的四个路段2905-2935的接合点。第二阶段2920示出了用于这些路段的初始几何结构。在这种情况下,全部路段具有相同宽度,因此几何结构全部具有相同形状和大小。因为路段之间的角度全部为直角,所以不需要以上所描述的投影、裁剪或逐渐减小中的任一者。

第三阶段2930示出了与路段几何结构重叠并生成交叉口的圆拐角的额外几何结构的生成。具体来说,额外几何结构2940(示出为实线,而路段几何结构在该阶段处由虚线表示)具有从接合点位置朝向距由路段几何结构形成的90°拐角固定距离处的点辐射出的边缘。额外几何结构2940还具有这些点之间的弯曲线(或足够顶点之间的直线以近似弯曲线,使得交叉口将被渲染成具有更逼真的弯曲外观)。

图30示出了如由一些实施例的客户端地图绘制应用渲染的平滑交叉口的结果3000(例如,在便携式设备的显示器上)。柏油在路段之间不进行不协调的90°转弯,而相反地具有更弯曲的令人愉快的外观。另外,交叉口包括停止线和中心线标记,以下描述停止线和中心线标记的生成。

返回图15,过程1500还消除(在1520处)道路重叠。在一些情况下,两个(或更多个)初始增长的道路几何结构将不正确地重叠。在接合点处相交的路段的几何结构将重叠,并且当不形成接合点的两个路段但是跨过相同纬度/经度坐标(例如,堆叠级别的道路、在彼此上方/下方穿过的道路等)时,其几何结构将重叠(如投影至表示地球表面的平坦平面上)。然而,当大多数其他几何结构重叠时,这很可能是由于不正确的数据并且应被校正。在没有校正的情况下,当两条道路实际上不相交时,渲染的地图将向地图绘制应用的用户指示所述道路相交。

此类重叠的最常见情况是在两条对应的双行车道重叠时(例如,向北行驶和向南行驶的或向东行驶和向西行驶的高速公路、由中央分离带划分的干线道路的相对边等)。在大多数情况下,此类对应的双行车道的几何结构应彼此非常接近而事实上不重叠然而,因为路段几何结构基于路段的中心线和宽度数据,所以如果所述信息中的任一者稍微不准确,则几何结构可能无法正确地排列起来。例如,当既不为道路提供车道计数也不为道路提供宽度时,一些实施例基于道路类型得出宽度。然而,如果道路事实上比其道路类型的通常情况更窄,则道路几何结构可最终比现实世界中的实际道路更大。可引起此类重叠的其他情形包括高速公路和其支路、在高速公路处到达尽头而非在高速公路上方或下方穿过的道路等。

不同的实施例使用不同的技术来移除路段几何结构的这些重叠。例如,一些实施例在重叠的位置处将两条道路推开,而其他实施例减小重叠处的道路的宽度。另外,在将道路移开之后,当道路为对应的双行车道时,一些实施例增添道路几何结构之间的中央分离带的几何结构。

图31示出了经过三个阶段3110-3130,在两条道路重叠时将所述两条道路推开。第一阶段3110示出了第一路段3105和第二路段3115,各自作为顶点的序列。如上所述,一些实施例使用道路的中心线顶点之间的恒定距离,以便标准化使用顶点执行的操作。当由地图绘制服务从数据提供方接收路段数据时,在一些情况下表示路段中心线的顶点数据可以变化的距离(例如,具有10米、25米、50米等的间隙)定义。一些实施例在摄取路段数据时以预定间隔(例如,每10米)自动定义顶点。这确保(i)道路将具有比顶点散开的情况下更弯曲、逼真的外观,因为一些实施例的地图绘制服务处理定义顶点之间的直线边缘。此外,其通过提供更多的点以在操作中移动来使得上述的平滑操作更成功。此外,以固定间隔定义顶点使得能够进行用于道路重叠的更有用的测试。

第一阶段3110另外示出了针对路段3105和3115的道路几何结构生成的路边。如可清楚地看出,两个生成的道路几何结构针对一部分重叠。为了检测此类重叠,一些实施例生成围绕道路中心线的边缘(后续顶点之间的线)中的每一者的囊(capsule),并且对囊测试重叠。第一阶段3110示出了四个此类囊:第一路段3105的囊3125和3135以及第二路段3115的囊3140和3145。囊在一些实施例中被定义成包围两个后续顶点之间的边缘,并且伸出至道路的宽度(使用路段的中心线和宽度数据)。虽然在该实例中示出为卵形(即,椭圆),但是不同的实施例将不同的形状用于囊,诸如矩形或其他平行四边形、其他椭圆体等。

如在第一阶段处所示,第一路段3105的第一边缘的囊3125与第二路段3115的第一边缘的囊3140重叠。另外,第一路段3105的第二边缘的囊3135不与第二路段3115的第二边缘的囊3145重叠。另外,虽然在该图中未示出,但是在具有所示囊的那些边缘之间,每个路段的两个边缘的囊将很可能也重叠。为了在示出对路段的修改中简单起见,在图31

中未示出或说明这些额外重叠。在一些实施例中,当在两个路段的囊之间检测到重叠时,地图绘制服务处理将“力”施加至被囊包围的顶点,以便将路段彼此推开。一些实施例使用弹簧-质量方程式来确定该力,其中囊之间的较大重叠导致较大的向外力。即,重叠越大,概念上的弹簧质量“压缩”越多,从而导致更大的向外的力。一些实施例将该力施加至两个重叠囊内的四个顶点中的每一者,然后使力在到达附近顶点时也逐渐减小至消失。第二阶段3120示出了这些力的施加,其中最大的力箭头施加至囊3125和3140中的每一者内部的两个顶点,并且较小的力箭头施加至两边上的顶点。

在一些实施例中,地图绘制服务处理识别重叠囊的每个集合,并且识别由于那个单独的重叠而施加至每个顶点的力。在识别不同顶点上的力之后,地图绘制服务处理将力整合于每个顶点上以得出用于路段的新中心线路径。处理然后执行相同的囊测试以确定路段之间的任何重叠是否仍然存在。如果仍然存在重叠,地图绘制服务处理将额外力施加至顶点并且再次将所述顶点推开。第三阶段3130示出了两个路段3105和3115已经被推开,使得围绕第一路段的边缘的囊完全不与围绕第二路段的边缘的囊重叠。如图所示,两个路段几何结构的路边现在是独立的并且完全不重叠。

其他实施例使用不同的机制来将顶点移开。例如,即使在多个重叠囊的情况下,一些实施例一检测到第一重叠就移动顶点,一旦第一所识别的集合已被推开得足够远以便避免任何重叠,则移动至顶点的下一个集合。另外,虽然实例示出了力被施加至在重叠的那些边缘附近的顶点,但是一些实施例仅移动实际上引起重叠的边缘的顶点(即,仅囊3125和3140内的顶点)。此外,不同实施例可使用不同的方程式(即,不同于弹簧-质量方程式)来确定将顶点推离彼此多少,并且使用不同的方程式来计算将周围顶点移动多远。

移动路段的中心线顶点是由一些实施例用来处理重叠的道路几何结构的一种选项。另一方面,一些实施例减小在重叠附近的道路的宽度而非移动中心线(即,减少道路几何结构的大小)。

图32示出了经过三个阶段3210-3230,在路段重叠时减小两个路段的宽度。第一阶段3210示出了第一路段3205和第二路段3215,各自作为顶点的序列(类似于图31中所示的路段)。如上所述,一些实施例使用道路的中心线顶点之间的恒定距离,以便标准化使用顶点执行的操作。当由地图绘制服务从数据提供方接收路段数据时,在一些情况下表示路段中心线的顶点数据可以变化的距离(例如,具有10米、25米、50米等的间隙)定义。一些实施例在摄取路段数据时以预定间隔(例如,每10米)自动定义顶点。

第一阶段3210另外示出了针对路段3205和3215的道路几何结构生成的路边。如可清楚地看出,两个生成的道路几何结构针对一部分重叠。为了检测此类重叠,一些实施例生成围绕道路中心线的边缘(后续顶点之间的线)中的每一者的囊,并且对囊测试重叠。第一阶段3210示出了两个此类囊:第一路段3205的囊3225和第二路段3215的囊3235。囊在一些实施例中被定义成包围两个后续顶点之间的边缘,并且伸出至道路的宽度(使用路段的中心线和宽度数据)。虽然在该实例中示出为卵形(即,椭圆),但是不同的实施例将不同的形状用于囊,诸如矩形或其他平行四边形、其他椭圆体等。一些实施例可使用图31中所示的解决方案和图32中所示的解决方案两者,并且将相同囊用于每个解决方案。

如在第一阶段处所示,第一路段3205的边缘的囊3225与第二路段3215的边缘的囊3235重叠。另外,虽然在该图中未示出,但是在具有所示重叠囊的那些边缘以下,每个路段的两个边缘的囊很可能也重叠。为了在示出对路段的修改中简单起见,在图32

中未示出或说明这些额外重叠。在一些实施例中,当在两个路段的囊之间检测到重叠时,地图绘制服务处理减小重叠囊的位置处的路段的宽度。如第二阶段3220中所示,一些实施例将重叠的位置处的路边朝向中心线向内移动特定的距离。一些实施例将特定路段的路边的该部分移动与重叠量成比例的一个距离。距离可以是刚好足够减少位置处的重叠的,或者该量加上额外余量使得在两个路段几何结构之间存在间隙。另外,一些实施例仅将引起重叠的路边向内移动,而其他实施例也对称地修改每个道路的另一边(使得中心线保持在道路的中心)。

为了防止客户端地图绘制应用上的渲染的道路看起来具有自道路移除的突兀大块,一些实施例在任一方向上沿路边选择一个点(例如,距受影响的顶点100米、500米等)并且保持这些点固定。地图绘制服务处理然后使宽度减小自重叠部分至固定点逐渐尖灭。

第三阶段3230示出了道路的宽度已减小后的路段3205和3215的道路几何结构。如图所示,道路几何结构完全不再重叠(至少在图中所示的部分中)。一些实施例在检测到任何两个囊之间的重叠后执行过程来减小那个位置处的宽度并且使宽度减小逐渐尖灭。处理然后重新测试那个边缘对并且继续以识别任何重叠的道路部分是否仍然存在。另一方面,其他实施例首先识别所有重叠部分、减小在每个此类部分处的宽度,并且计算宽度减小的每一者所需要的不同逐渐减小。

除了在1515和1520处执行以平滑接合点并消除道路重叠的几何结构校正之外,过程1500还生成(在1525处)道路标记以显示在道路上。这些道路标记在一些实施例中可包括车道标记、中央分离带、停止线和/或交叉口处的人行横道等。

例如,一些实施例自动增添双行车道之间的中央分离带。如在前一小节中所述的,一些实施例使用路段数据将路段(或聚合道路)识别为道路的对应边(例如,高速公路的相对方向或由中央分离带分离的干线道路的边等)。在一些实施例中,该路段数据指示道路是双行车道(有时被称为分车道公路,与在两个方向上进行交通运输的单行车道相对),并且其他特性(路段的几何数据和属性数据两者)指示两条道路是对应的双行车道的可能性。

此类双行车道通常具有由各种不同种类的中央分离带分离的两个边。例如,不同区域可使用混凝土修建的中央分离带、草坪中央分离带、绘制的中央分离带(例如,黄色标线的不同组合)、分隔物等。一些实施例生成填充对应的双行车道道路之间的间隙的几何结构,然后分配这些几何结构特性使得所述几何结构特性被渲染为中央分离带。一些实施例使用路边的顶点的位置来确定中央分离带顶点的位置,使得中央分离带与道路的边精确地对齐。

不同的实施例不同地渲染中央分离带。例如,一些实施例将单个中央分离带类型用于所有双行车道,而其他实施例具有不同类型。与道路、土地覆盖物等非常类似,存储在客户端处的样式表可定义以不同方式绘制的不同中央分离带样式。以对应于由客户端地图绘制应用以不同方式渲染的图的不同样式(例如,干线道路中央分离带、高速公路中央分离带等)对来自地图绘制服务的中央分离带几何结构加标签。

图33和图34示出了具有两种不同类型的中央分离带的双行车道。图33示出了系对应的双行车道的两条渲染的道路3305和3315。另外,应用显示了表示两条道路中间的中央分离带3310的黄色标线的设计(具体来说,一对双黄线,其中对角线连接所述黄色标线)。图34示出了绘制在两条双行车道3305和3315之间的混凝土中央分离带3405。

除了中央分离带之外,一些实施例生成各种类型的道路漆(例如,车道分隔物、停止线等)的几何结构。在一些实施例中,这包括在上文所述的渲染结果中所示的车道标记。为了生成用于路段的车道标记,一些实施例使用存储在路段数据结构中的车道计数信息(该车道计数信息可自宽度数据或道路类型数据得出)。另外,专用车道诸如合用车专用道可在路段数据中被指示并且可具有生成的几何结构。

另外,一些实施例辨认驾驶员将可能必须在停止指示牌或停止灯处停止的接合点。一些实施例的地图绘制服务从地图提供方接收该数据(例如,作为存储在接合点数据中的信息)。因此,特定接合点可指示4路停止、2路停止(挑选出特定路段作为具有停止指示牌)、交通灯等。在一些实施例中,地图绘制服务处理基于接合点处的道路类型得出该信息。例如,当连接道路与主干线道路相交时,一些实施例假设连接道路具有停止指示牌,并且主干线道路具有明确的通行权。当两条主干线道路相交时,地图绘制服务处理假设交叉口将由交通信号灯控制,并且将停止线标记添加至接合点处的所有路段。

图35示出了此类接合点3500的几何结构的实例。在交叉口的所有路段几何结构均具有相同宽度并且以90°角度排列时,那么生成停止线是容易的(如下所示)。然而,四个路段3505-3520并非对齐得如此之好。相反,路段具有不同的宽度,且路段3510以不同的(非直角)角度与接合点相交。在此类情形下,针对每个特定路段,地图绘制服务处理识别与特定路段的中心线垂直的最靠近交叉口的线,并在也不与其他路段几何结构相交的情况下接触特定路段几何结构的两边。虽然示出为针对更复杂的接合点,但在更简单的情况下,一些实施例也使用该过程来识别停止线位置。

图35中的虚线3525示出了接合点3500的这些线。地图绘制服务处理然后针对在这些所识别的线(虚线3525)处结束的停止线来生成几何结构。针对单行车道路段(其具有双向行进),处理仅生成跨该路段延伸一半的停止线。此外,一些实施例使停止线从交叉口的边缘(在该图中,边缘由虚线表示)回推特定距离(例如,两英尺、五英尺等)。

图36示出了如由一些实施例的客户端地图绘制应用渲染的接合点3500的结果3600(例如,在便携式设备的显示器上)。如图所示,将白色粗线在图35的虚线所识别的位置处跨每个路段绘制一半。将停止线几何结构的内(朝交叉口)边缘绘制在所指示的线处,其中停止线一路延伸到路段中(远离交叉口)。一些实施例也将停止线推离交叉口一固定距离。此外,生成车道标记使得它们在停止线处或在停止线之前不远处停止。

再次返回图15,道路几何结构创建过程1500接下来指定(在1530处)关于道路几何结构的注释信息,然后结束。在一些实施例中,这种注释信息存储在多边形顶点(或边缘,因为这两者基本上可互换)上,所述注释信息指导客户端地图绘制应用的网格构建模块和/或渲染引擎将特定特征应用于所渲染的输出。例如,一些实施例通过道路几何结构顶点来指定不同类型的道路框(即,位于道路两边的对象),指示客户端应用绘制路缘、人行道、桥框(及对应阴影)、隧道、叠层道路等。在一些实施例中,将绘制这些框的指令作为地图绘制应用的一部分存储在客户端设备上。客户端地图绘制应用然后读取存储在特定顶点上的信息并针对对应于顶点的边缘生成适当的道路框。

以下示出了用于道路顶点的一些实施例的不同注释的若干实例,所述注释用于指示将要绘制的框的类型。图37示出了使用顶点注释来指定立交桥的桥框的实例,在所述立交桥中,一条道路在另一条道路上方行进且这些道路不形成接合点。如图37所示,两个道路几何结构3705和3710在平坦空间中相交。然而,路段数据指定,针对其生成几何结构3705的路段比针对其创建几何结构3710的路段具有更高的标高(使用绝对标高数据或相对标高数据)。此外,虽然针对两条道路中的每一者示出为一个路段,但在一些实施例中,将使用若干路段来定义道路(例如,针对道路3705,第一路段从为0的标高至为1的标高,第二路段具有为1的标高,且第三路段从为1的标高至为0的标高)。

图37还示出了用于定义道路几何结构3705和3710的两边的若干顶点3715-3735。每个特定顶点定义从特定顶点按顺序到下一个顶点的导向边缘。因此,例如,顶点3735的注释定义客户端地图绘制应用将如何绘制从顶点3735到顶点3730的边缘,顶点3730的注释定义客户端地图绘制应用将如何绘制从顶点3730到顶点3725的边缘等等。沿单个路段的不同顶点可具有不同的注释,使得单个路段的部分将绘制有不同的特征(例如,不同的道路框)。

在这种情况下,顶点3715(以及路段几何结构3710的其他顶点)指定其为连接道路的顶点并且指定使用默认框。在一些实施例中,不同类型的道路(例如,连接道路、干线道路、高速公路等)不仅可以不同方式绘制(例如,针对柏油的不同颜色/纹理、不同宽度等),而且还可具有不同的框(例如,用于连接道路的路缘)。虽然这示出了默认框的实际指定,但一些实施例在顶点上不具有针对默认框的特定注释(或顶点为其提供注释的任何其他特性)。

所示出的顶点3725-3735三者均针对几何结构3705的各自边缘具体地指示了桥框,而顶点3720指示默认的干线道路框。就像不同类型的道路可具有不同的默认框一样,不同类型的道路也可具有不同的桥框。即,客户端地图绘制应用可包含用于为干线道路、高速公路等绘制不同立交桥的指令。顶点3720,虽然位于立交桥区域的边缘处,但不指定桥框,而是指定其边缘的默认道路框。这是因为,其边缘针对道路几何结构3705的该边朝着左侧的下一个顶点(未示出)导向远离立交桥。

图38示出了如由一些实施例的客户端地图绘制应用渲染的路段3705和3710的结果3800(例如,在便携式设备的显示器上)。在这种情况下,使用与干线道路的柏油相同的颜色/纹理来渲染连接道路的柏油,但一些实施例可以不同的方式来渲染道路。此外,针对顶点为其指定默认道路框的位置,沿着两条道路的边缘绘制颜色更浅的路缘。然而,针对立交桥部分,客户端应用根据一些实施例绘制立交桥桥梁。此外,应用在连接道路的柏油上渲染阴影以更逼真地示出立交桥。如果用户要旋转这些道路的地图的视图,则将针对立交桥的其他边渲染类似的桥框。此外,虽然阴影仅针对连接道路的立交桥而出现,但一些实施例还可在干线道路从地面向上移动至立交桥时在干线道路下方渲染阴影。

图39示出了使用顶点注释来将路段几何结构的边缘指定为内边缘的实例,其指示不应针对从所注释的顶点起的导向边缘绘制框。在道路在接合点相汇的情况下,一些实施例使用此类注释,以便防止客户端地图绘制应用在道路中间绘制路缘。如图39所示,两个路段几何结构3905和3910在接合点相汇。在这种情况下,路段作为聚合道路的连续部分而连接;然而,在一些实施例中,还可在表示不止一条道路的交叉口的接合点处使用相同的道路框注释。

图39还示出了用于定义道路几何结构3905的两边的若干顶点3915-3925。其他道路几何结构3910也由顶点定义,所述顶点包括位于与顶点3915和3920相同的点处的顶点。如在前一个图中,每个特定顶点定义从特定顶点按顺序到下一个顶点的导向边缘。因此,例如,顶点3915的注释定义客户端地图绘制应用将如何绘制从顶点3915到顶点3920的边缘,顶点3920的注释定义客户端地图绘制应用将如何绘制从顶点3920到顶点3925的边缘,等等。

在这种情况下,所有顶点3915-3925(以及路段几何结构3910的其他顶点)均指定它们为连接道路的顶点。此外,顶点3925和3920指定使用默认框。虽然这示出了默认框的实际指定,但一些实施例在顶点上不具有针对默认框的特定注释(或顶点为其提供注释的任何其他特性)。此外,顶点3915具体指示使用内框(即,与顶点3915相关联的导向边缘为道路的内边缘)。在一些实施例中,内框注释指导客户端地图绘制应用根本不针对这些边缘绘制任何道路框。

顶点3920,虽然位于道路几何结构的靠近内边缘的拐角处,但指定了默认框而不是内框。这是因为其边缘朝向顶点3925。此外,在一些实施例中,道路几何结构3910的顶点将位于与顶点3915和3920相同的点处,其中与顶点3920位于同一处的顶点指定内框(假设边缘的方向对于几何结构3910而言与对于3905而言是相同的)。

图40示出了如由一些实施例的客户端地图绘制应用渲染的路段3905和3910的结果4000(例如,在便携式设备的显示器上)。在这种情况下,第一路段的柏油平滑地融合到下一个路段的柏油中,而没有对从一个路段到下一个路段的过渡的视觉指示。应用还沿道路任一边将路缘作为默认框来绘制。除用于颜色更浅的路缘的多边形之外,一些实施例还绘制细节,诸如由路缘生成的小阴影,以便至少在客户端地图绘制应用的一些模式中,为显示器提供更为三维的感觉。虽然如此地指定了道路的内(即,面向其他路段)边缘,使得路缘和其他道路框不绘制在道路中间,但一些实施例也针对在其外边缘上不具有框的道路使用内注释,诸如与靠近道路的草处于相同水平的不具有路缘或其他框的乡村道路。

图41示出了使用顶点注释来指定路段的隧道的实例,其指示应在路段上绘制隧道。一些实施例使用此类注释来指示隧道的入口/出口,以及隧道中部,使得客户端地图绘制应用将在渲染路段时绘制隧道。如图41所示,两个路段几何结构4105和4110在接合点相汇。在这种情况下,路段作为聚合道路的连续部分而连接;然而,在一些实施例中,还可在表示不止一条道路的交叉口的接合点处使用相同的道路框注释。

图41还示出了用于定义道路几何结构4110的两边的若干顶点4115-4130。其他道路几何结构4105也由顶点定义,所述顶点包括位于与顶点4115和4130相同的点处的顶点。在一些实施例中,将对这些顶点加注释以针对不同顶点指定默认框或内框。如在先前图中,每个特定顶点定义从特定顶点按顺序到下一个顶点的导向边缘。因此,例如,顶点4115的注释定义客户端地图绘制应用将如何绘制从顶点4115到顶点4120的边缘,顶点4125的注释定义客户端地图绘制应用将如何绘制从顶点4125到顶点4130的边缘,等等。

在这种情况下,所有顶点4115-4130(以及路段几何结构4105的顶点)均指定它们为干线道路的部分。此外,顶点4130指定使用隧道入口框,而顶点4115-4125指定使用隧道框。在一些实施例中,隧道入口框注释指定特定边缘(路段几何结构4110的跨越路面的边缘)为隧道的入口并且应如此绘制。一些实施例的隧道框注释指定边缘为隧道的边并且因此应在这些边缘的位置处跨越道路绘制隧道。

图42示出了如由一些实施例的客户端地图绘制应用渲染的路段4105和4110的结果4200(例如,在便携式设备的显示器上)。在这种情况下,第一路段显示有柏油和路缘,即一些实施例的默认渲染。然而,针对第二路段,应用绘制弯曲的隧道入口然后绘制路段的圆形覆盖物。在路段另一端,应用将渲染隧道出口。此外,应用在入口下方渲染阴影,导致柏油在该位置处变暗。

图43示出了使用顶点注释来指定路段的一边的人行道的实例。该图示出了直线行进的路段的单个道路几何结构4305。如图所示,使用若干顶点4310-4325来定义道路几何结构4305的两边。每个特定顶点定义从特定顶点按顺序到下一个顶点的导向边缘。因此,例如,顶点4310的注释定义客户端地图绘制应用将如何绘制从顶点4310到顶点4315的边缘,顶点4320的注释定义客户端地图绘制应用将如何绘制从顶点4320到顶点4325的边缘,等等。沿单个路段的不同顶点可具有不同的注释,使得单个路段的部分将绘制有不同的特征(例如,不同的道路框)。

在这种情况下,顶点4310和4315指定它们为连接道路的顶点并且指定使用默认框。如上所述,不同类型的道路可具有不同的默认框(例如,用于连接道路或干线道路的路缘、用于某些其他类型的道路的护栏等等)。虽然这示出了默认框的实际指定,但一些实施例在顶点上不具有针对默认框的特定注释(或顶点为其提供注释的任何其他特性)。

顶点4320和4325针对几何结构4305的各自边缘具体地指示了人行道道路框。就像不同类型的道路可具有不同的默认框一样,不同类型的道路也可具有不同的人行道。即,客户端地图绘制应用可包含用于为连接道路、干线道路等绘制不同的人行道(例如,用于干线道路的更宽的人行道)的指令。

图44示出了如由一些实施例的客户端地图绘制应用渲染的路段4305的结果4400(例如,在便携式设备的显示器上)。在这种情况下,干线道路的柏油以与如上所示相同的方式渲染,且左边(具有默认道路框)仅绘制有路缘。然而,针对道路的右边,除路缘之外,应用还渲染人行道。除用于颜色更浅的路缘的多边形之外,一些实施例还绘制细节,诸如由路缘生成的小阴影,以便至少在客户端地图绘制应用的一些模式中,为显示器提供更为三维的感觉。

上述实例示出了可应用于路段几何结构的不同类型的注释。在一些实施例中,可通过用若干类型的注释对边缘的顶点加注释,来将多种类型的道路框应用于单个边缘。在图43的上述实例中,人行道注释暗示客户端应用应渲染路缘和人行道两者。

图45示出了针对一些实施例的单个顶点使用若干注释的实例。具体地,图45示出了使用顶点注释来指定在桥梁一边上包括人行道的立交桥的实例。几何结构4505和4510类似于图37的几何结构3705和3710,后者(连接道路)在前者(干线道路)下方穿过。实际上,与图37的差别在于顶点4515-4525包括指定桥框和人行道框两者的注释。

图46示出了如由一些实施例的客户端地图绘制应用渲染的路段4505和4510的结果4600(例如,在便携式设备的显示器上)。与图45一样,使用与干线道路的柏油相同的颜色/纹理来渲染连接道路的柏油,并且应用沿两条道路的边缘绘制颜色更浅的路缘。针对立交桥部分,客户端应用不仅渲染立交桥及其阴影,而且还渲染立交桥顶部的、在道路的注释有人行道的边上的人行道。在这种情况下,路段3705的另一边不为指定人行道而加注释,因此应用不渲染该人行道。

在先前的实例中,地图绘制服务处理仅针对顶点指定框类型。在一些实施例中,地图绘制服务还可针对不同类型的框指定各种不同的变量,从而修改框的渲染方式。例如,可在注释数据中指定桥框的高度(即,基于路段标高信息)。此外,人行道宽度、路缘高度、护栏高度、隧道厚度、路缘颜色等在不同实施例中可有所不同。

图47示出了使用顶点注释数据来改变道路几何结构4705的道路框的特性的实例。具体地,道路几何结构4705包括在一边上的两个顶点4710和4715以及在另一边上的两个顶点4720和4725。两个顶点4710和4715为客户端应用指定渲染人行道框,并且包括针对该人行道的1米的宽度。在道路的另一边,两个顶点4720和4725也为客户端应用指定渲染人行道框,这次宽度为1.5米。

图48示出了如由一些实施例的客户端地图绘制应用渲染的路段4705的结果4800(例如,在便携式设备的显示器上)。渲染类似于图44中所示的渲染。然而,所渲染的道路现在在两边均具有人行道,且人行道为不同的宽度(如在注释数据中所指定)。

上述实例示出了针对一些实施例使用顶点注释数据来指定道路框数据。然而,由于在一些实施例中使用顶点以地图图块来描述其他地图对象(例如,建筑物、土地覆盖物多边形等),因此这些其他对象还可在其描述中包含顶点注释。例如,可使用此类注释来指定建筑物细节(例如,不同颜色面、不同类型的线脚等),也可以使用此类注释来指定土地覆盖物的方面(例如,如何绘制土地覆盖物多边形的不同边界)。

在指定注释信息之后,道路几何结构创建过程结束。如上所述,在一些实施例中,创建道路几何结构的操作的特定顺序可以不同。此外,一些实施例可使用并行处理来一次性地对若干路段(或路段集合)执行一些或全部道路几何结构操作。

c.交叉口数据的服务器侧生成

已经描述了直接得到道路几何结构的服务器操作(例如,定义聚合道路以及道路几何结构的创建),现在将讨论使用上文所提及的接合点数据来生成交叉口数据。在请求路线时,客户端地图绘制应用在一些实施例中接收与路线所遍历的每个交叉口有关的数据,所述数据指示交叉口的不同支路并标注路线穿过哪些支路进入和退出交叉口。在一些实施例中,由地图绘制服务存储该交叉口信息,地图绘制应用访问该地图绘制服务以便检索地图数据以及路线和导航信息。

如上所述,一些实施例的地图绘制服务接收指定路段的每个接合点的数据。在一些实施例中,地图绘制服务针对存储在地图数据中的这些接合点中的每一者自动生成附加数据,并且在一些实施例中,将接合点数据转变成交叉口数据。该接合点信息将每个所接收的接合点(或在现实世界中视为单个交叉口的相关接合点的集合)简化成以不同角度离开接合点的支路的集合。当用户通过在设备上操作的地图绘制应用来请求路线时,设备将请求发送至地图绘制服务,地图绘制服务生成从开始位置到结束位置的路线。在一些实施例中,地图绘制服务还使用交叉口数据针对路线生成逐向导航指令。地图绘制服务识别进行操纵的交叉口,并修改特定于在路线期间进行的操纵的交叉口数据。然后将该数据发送至客户端地图绘制应用于其上运行的用户设备。以下小节首先介绍了针对路线创建导航数据,然后讨论了由地图绘制服务进行的交叉口数据预计算(使得数据可用于生成导航数据),并且最后描述了对所请求路线的交叉口数据进行的特定类型的修改。

1.导航数据创建

图49概念性地示出了一操作,该操作由一些实施例的地图绘制服务执行以为请求设备生成路线并将路线与导航指令一起提供至请求设备。图49示出了经过六个阶段4910-4960的该操作,其中地图绘制服务接收对路线的请求,生成路线,生成路线的交叉口数据,并将路线提供至设备,该设备使用该信息来显示导航指令。

如图所示,图49的每个阶段均示出了设备4905和地图绘制服务4900。设备4905在一些实施例中可为手持设备(例如,智能电话、平板设备等),或者可为专用导航设备(例如,汽车内置的导航系统、便携式导航设备等)。此外,在一些实施例中,设备4905可为非便携式设备,诸如台式计算机或其他非便携式计算设备。

地图绘制服务4900是一服务,设备4905(例如,经由有线连接、无线连接诸如蜂窝网络、wi-fi等)连接至该服务,以便请求并接收地图数据、路线数据、逐向导航数据以及附加信息(例如,与位于地图上的地点有关的信息等)。如图所示,地图绘制服务4900存储地图数据4915和交叉口数据4925,并且除其他模块(未示出)之外还包括地图生成器4935和路线生成器4945。

地图数据4915提供数据,可查看的地图区域和路线可通过所述数据生成。这种地图数据,在一些实施例中,包括纬度和经度数据、名称数据以及与道路和其他通路(例如,走道、轮渡路线、自行车路径等)、自然地貌(例如,河流、湖泊、山脉等)、兴趣点(例如,建筑物、企业、公园等)以及其他地图项有关的描述数据。在一些实施例中,例如,通路被定义为一系列纬度/经度顶点、名称及描述数据。这种描述数据可包括路形式(即,通路是单行车道还是双行车道的一部分,通路是否为单向路径)、路径所属的道路类别(例如,机动车道、地方道路、私有道路、自行车道等)以及其他信息。在一些实施例中,这种地图数据由外部源(即,地图提供方)编译并提供至地图绘制服务,而在其他实施例中,地图绘制服务提供其自己的地图数据。地图数据还可为局外者提供的数据与内部生成数据的混合体。此外,地图数据可包括针对各种地图构造的几何结构数据,所述地图构造诸如道路、土地覆盖物等。

交叉口数据4925针对地图数据中道路路径的交叉口提供预制表数据。在一些实施例中,如下所述,地图绘制服务使用地图数据来针对道路通路交叉口自动计算交叉口数据。可通过指示交叉口类型(例如,点型、环型)以及以不同角度进出交叉口的一系列支路,来存储这种交叉口数据4925。虽然地图数据4915和交叉口数据4925示出为独立存储,但这两种数据可均存储在相同的物理存储装置上或存储在独立的物理存储装置上,并且交叉口数据4925可实际上为地图数据4915的一部分。此外,地图数据和交叉口数据中的一者或两者均可跨若干物理存储装置(例如,用于存储地图数据的一系列磁盘)分布。

一些实施例的地图生成器4935生成地图信息(例如,地图图块)以传输至请求器设备。请求器设备请求特定区域的地图(例如,使用纬度/经度信息),并且地图生成器4935为该区域创建(或使用预生成的)地图图块,然后将这些图块的数据(例如,作为已编码矢量和/或图像数据)发送至设备。

路线生成器4945响应于用户请求计算两个或更多个点之间的最佳路线。在一些实施例中,路线生成器4945使用优化算法来基于地图数据计算路线。路线可被定义为一系列交叉口、一系列道路通路或者以其他方式定义。此外,在用户请求路线时,路线生成器4945提供交叉口数据以供设备在逐向导航中使用。在一些实施例中,交叉口分析器4955检索交叉口数据4925,并针对路线的导航修改该数据,如下所述。

如图所示,在阶段4910处,设备4905将对路线的请求发送至地图绘制服务4900。在一些实施例中,用户输入开始地址(或地点)和结束地址(或地点),可能包括附加中点位置(例如,始于a,前往b,然后从b前往c)。设备然后将位置信息传输至地图绘制服务。在一些实施例中,设备将位置转译为纬度和经度数据,而在其他实施例中,由地图绘制服务执行这种转变。

在阶段4920处,路线生成器4945访问地图数据4915以便针对该系列的位置生成一条或多条路线。在一些实施例中,路线生成器4945使用优化算法来查找连接该系列的位置的最佳(以及第二最佳、第三最佳等)路线。

在阶段4930处,交叉口分析器4955识别沿需要为其生成导航方向的路线的操纵并针对这些操纵检索交叉口信息。一些实施例生成逐向导航方向以与路线一起提供至设备。为生成这些方向,地图绘制服务4900,每当路线改变通路时,识别沿循方向的用户将必须在哪个点执行操纵(例如,右转、稍微左转、u型转弯、并道等)。在一些实施例中,这些通路改变中的每一者对应于存储在交叉口数据4925中的预制表交叉口。交叉口分析器4955检索这种交叉口数据。在一些实施例中,每个交叉口被存储为以各种角度(例如,基于相对于北方=0°)从交叉口出来的一系列支路。在一些实施例中,除交叉口数据之外,路线生成器创建通常描述将要执行的操纵的路线规划方向。此类描述的实例包括“左转”、“驶出高速公路匝道”、“u型转弯”等。在其他实施例中,由客户端地图绘制应用基于所接收的交叉口数据来得出这种描述。

接下来,在阶段4940处,交叉口分析器4955生成为路线设计的交叉口信息。在一些实施例中,这引起修改角度以将行进到接合点中的方向设置为0°(即,将路线进入接合点的支路设置为180°)。这按照正北与路线的驶入行进方向之间的差来有效地旋转交叉口描述。此外,交叉口分析器4955将支路中的一者加标签为出口支路。一些实施例还对入口支路加标签,而其他实施例则依赖于设备来将180°支路识别为入口支路。

阶段4950示出了地图绘制服务4900然后将路线数据(即,用于导航的路线数据和交叉口数据)传输(例如,经由设备用来传输路线请求的相同网络)至设备4905。如在阶段4960处所示,设备4905然后使用由地图绘制服务生成的交叉口和路线数据来为设备的用户显示导航指令。在一些实施例中,导航指令包括将交叉口连同程式化箭头一起显示,该程式化箭头示出通过交叉口的操纵(在这种情况下,为右转)。

虽然地图绘制服务4900被显示为包括地图生成器模块和路线生成器模块,但本领域普通技术人员将认识到,地图绘制服务可包括附加模块或不同的模块细分。地图绘制服务可由存储所有功能和数据的单个计算设备(例如,服务器)组成,或者功能可在多个服务器之间分布(例如,一个过程在第一服务器上且第二过程在第二服务器上,针对不同用户并行地执行相同操作的多个服务器,或者执行本文所述功能的计算设备的其他配置)。

图50概念性地示出了过程5000,该过程由一些实施例的地图绘制服务执行以便生成并向用户传输路线和交叉口数据。如图所示,过程5000从接收(在5005处)对地图上两个位置之间的路线的请求开始。在一些实施例中,在用户请求一系列的不止两个的位置时,每个路段被当作独立的路线(即,从点a到点b为第一路线,然后从点b到点c为第二路线)。

该过程然后使用地图数据来生成(在5010处)位置之间的至少一条路线。在一些实施例中,过程使用优化算法来识别两个位置之间的最佳(或第二最佳、第三最佳等)路线。这些路线可被描述为沿通路的一系列顶点、通路之间的一系列交叉口,或使用另一种描述。

借助为开始和结束位置生成的路线,过程5000选择(在5015处)所生成的路线中的一者以便针对路线创建逐向指令。过程然后识别(在5020处)将要沿路线进行的操纵。在一些实施例中,每当路线改变通路时,地图绘制服务识别沿循方向的用户将必须在哪个点执行操纵(例如,右转、稍微左转、u型转弯、并道等)。

接下来,过程针对每次操纵检索(在5025处)交叉口。在一些实施例中,这些通路改变中的每一者对应于由地图绘制服务存储的预制表交叉口。下面详细描述了这些交叉口的生成。在一些实施例中,每个交叉口被存储为以各种角度(例如,基于相对于北方=0°)从交叉口出来的一系列支路。此外,在一些实施例中,交叉口数据存储交叉口的类型(例如,点型、环型、交通广场等)。

过程然后针对每次操纵修改(在5030处)交叉口信息。在一些实施例中,这引起修改角度以将行进到接合点中的方向设置为0°(即,将路线进入接合点的支路设置为180°)。这按照正北与路线的驶入行进方向之间的差来有效地旋转交叉口描述。此外,一些实施例将支路中的一者加标签为出口支路。一些实施例还对入口支路加标签,而其他实施例则依赖于设备来将180°支路识别为入口支路。

过程5000接下来确定(在5035处)是否仍有针对其生成操纵/交叉口信息的附加路线。在仍有附加路线时,过程返回至5015以选择下一条路线。从开始位置到结束位置的路线的不同变型可部分地重叠,在这种情况下,一些实施例针对重叠部分重新使用已经生成的交叉口集合。

一旦针对所有路线生成了交叉口,过程便将路线和交叉口信息传输(在5040处)至请求器(例如,请求设备)。如所提及的,在一些实施例中,请求设备使用这种信息以便生成逐向导航,包括程式化的接合点/操纵箭头。

2.交叉口数据的预计算

如上所述,一些实施例通过所存储的地图数据(例如,路段和接合点数据)来预计算交叉口数据。地图绘制服务然后存储这种交叉口数据以用于生成逐向导航指令。以下章节描述了用于生成这种交叉口数据的若干过程,其中地图绘制服务接收供应商提供的接合点,识别是否应将任何集合的所接收接合点合并成单个交叉口,识别应在交叉口内接合在一起的路段对,并且针对该交叉口生成角度。在该章节内,术语接合点将通常用于指供应商提供的两条路径段在哪里相交的信息,而术语交叉口将是指通过接合点生成的表示两条或更多条道路在现实世界中在哪里相汇的数据。因此,在一些实施例中,可将多个接合点合并成一个交叉口,并且两个路段之间实际上仅为单条道路的延续的接合点根本不可被视为交叉口。

以下表示一些实施例的用于针对点型交叉口生成交叉口数据的伪码:

识别所有内路段;

识别所有内转弯隧道并将它们标记为内路段;

针对每个内路段:

收集所有连续的内路段;

将所收集的内路段标记为已处理;

通过内路段的该合集来构建交叉口;

除其他数据(例如,公园、水道、企业等的位置)之外,地图数据还存储与通路(即,道路、走道、自行车路径等)有关的信息。在一些实施例中,从地图提供方接收每个通路作为一系列段(例如,路段)。针对给定路段,在一些实施例中,所存储的数据包括路段的开始和结束接合点、定义由开始和结束接合点之间的路径所采用的线路的几何结构数据、路径表征(或“路形式”)、行进方向(其在一些实施例中可能涉及单向标志)、路径的一个或多个名称(例如,“1-405s”、“sandiegofreeway”等)、指示路径的重要性级别的类别以及网络类(路径所属的路径连接图)。在一些实施例中,几何结构信息包括路径所行进穿过的一系列纬度/经度顶点。在一些实施例中,路形式属性包括以下表征:单行车道、双行车道、机动车道、岔道、连接道路、走道、阶梯。一些实施例可包括附加表征。

图51概念性地示出了一些实施例的用于确定接合点集合之间的路径段的过程5100,所述接合点集合应被一起当作单个交叉口。如图所示,过程5100从接收(在5105处)至少两个路径段(例如,路段)之间的接合点开始。在一些实施例中,地图绘制服务接收(例如,作为来自地图供应商的预计算数据)路段集合和接合点集合。每个路段沿循两个此类接合点之间的路径,并且每个接合点参考进入和/或退出接合点的至少两个路段。另一方面,在一些实施例中,不从地图数据供应商接收接合点,并且地图绘制服务遍历路径数据以识别路径之间的交叉口并分析这些交叉口以便对接合点进行预制表。

过程然后确定(在5110处)所接收接合点处的路径段中的任一者是否为双行车道。如所提及的,双行车道为一些形式的地图数据中所使用的路径表征。被(例如,由中央分离带、双黄线等)划分的许多道路被接收(并且绘制)为两个独立的路径段,每个方向一个路径段。然后对路径段中的每一者标记行进方向并且标记为双行车道的一半。由于用户将通常均由中央分离带划分的两条道路的交叉口看作单个交叉口(而不是四个独立的交叉口),因此接合点生成过程尝试将这四个所接收的接合点统一成单个交叉口以出于导航的目的而向用户呈现。

在没有路径段被标记为双行车道时,过程仅使用在所接收的接合点中指定的路径段(即,交叉口将仅包括一个所接收的接合点)来计算(在5115处)交叉口支路。在一些实施例中,接合点支路的计算引起计算针对接合点所指定的每个路段离开接合点位置的角度。随后,该过程结束。图52示出了此类接合点5200的实例,还示出了不需要路径段以直角相汇或者路径以直线继续穿过接合点。

在针对所接收接合点所指定的至少一个路径段为双行车道时,过程确定(在5120处)在接合点处是否存在双行车道的横穿交通转弯离开。横穿交通转弯是在将横穿双行车道的匹配半道的方向(即,道路的另一个方向)上的双行车道的转弯离开,假设横穿交通转弯存在的话。在美国,左转是横穿交通转弯。虽然该文档中所示的实例涉及右侧驾驶(即在道路的右边驾驶),但普通技术人员将认识到,实例也同等地适用于左侧驾驶区域(例如,英格兰)。图53示出了包括两条双行车道路径5305和5306和一条单向道路5310的交叉口5300。在接合点5315处,不存在双行车道的横穿交通转弯离开,因为唯一的选项是双行车道路径5305的右转弯离开和单向街道5310的左转弯离开。在不存在此类转弯时,过程5100存储(在5125处)所接收的接合点,并同时认识到,该所接收的接合点可能仍为更大的交叉口的一部分,以便确定是否将所接收的接合点与其他所接收的接合点(例如,单向道路5310与双行车道路径5306之间的接合点5320)一起包括在更大的交叉口中。例如,在交叉口5300中,过程将希望将所接收的接合点5320与所接收的接合点5315接合到单个更大的交叉口中。随后,该过程结束。

当在接合点处(例如,在接合点5320处)存在双行车道的横穿交通转弯离开时,过程在横穿交通转弯的方向上移动(在5130处)直到到达下一个双行车道路径。在一些实施例中,由于路段在接合点处开始和停止,因此将在不同的所接收接合点(但不一定是下一个接合点,如果道路诸如左转车道被接收作为独立的路径段的话)处到达下一个双行车道路径。例如,从交叉口5320,过程将遍历离开接合点5320的路径5310直到在接合点5315处到达下一个双行车道。

过程5100然后确定(在5135处)在5130处到达的双行车道路径是否具有在源双行车道路径的相对方向上的行进方向。这基本上是对第二双行车道是否可能是第一双行车道的匹配路径(即,它们是否可能是相同道路的两边)的快速决定因素。在大多数情况下,归因于道路通常的构建方式的本质,该下一个双行车道将为匹配路径。

在当第二双行车道不在源路径的相对方向上时的情况下,过程前进至5125以存储新到达的接合点,以供以后用于确定是否将该接合点与任何其他所接收的接合点包括在一起。例如,如果路径5306的左转弯离开到达具有下行行进方向的另一个双行车道,则路径5306可被假设为不具有数据上的匹配(至少就考虑到接合点而言),但新识别的路径自己可能具有匹配。

另一方面,如果两条双行车道具有相对的行进方向,则过程识别并存储(在5140处)由横穿交通转弯遍历的路段。在图53的实例中,将存储从接合点5320到接合点5315的路段。在一些实施例中,该路段将用作附加接合点合并过程的一部分。随后,该过程结束。

上述过程5100,在应用于地图区域内的所有接合点时,将在双行车道之间生成路段集合。一些实施例使用这些路段来将所接收的接合点连结在一起并识别附加的所接收接合点以包括在单个交叉口定义中。以下表示一些实施例的用于识别复杂交叉口的所有此类“内”路段的伪码:

针对为双行车道的每个路段;

针对具有横穿交通转弯的每个连接,其中可将路径组接至交叉口的另一边;

将另一边的路径上的所有路段标记为内路段;

该伪码包括关于是否可将路径从路段组接至交叉口的另一边的确定。以下包括一些实施例的用于此类确定的伪码:

将第一路段添加至路径;

从路径上的最后路段获得连接;

对每个连接进行迭代处理以查找至另一边的连接或者查找为最佳延续的连接;

如果连接为另一边,则标注成功并结束;

如果没有连接为另一边,并且没有连接为最佳延续,则

标注失败并结束;

否则:

将路段添加至路径末端;

如果路径太远,则标注失败并结束;

如果十字路口太多,则标注失败并结束;

否则,返回以获得所添加的路段的连接并对连接进行迭代处理;

图54概念性地示出了用于将若干接合点一起连结成单个交叉口并识别交叉口的支路的过程5400。过程5400以接收(在5405处)双行车道之间的相交路段集合开始。在一些实施例中,可使用一过程,诸如图51所示的过程,来识别这些路段。地图绘制服务然后将彼此相交的此类路段的集合组合在一起(即,在所接收的接合点处)。图55示出了在具有路径5505和5506的双行车道与具有路径5510和5511的双行车道之间的共同存在的交叉口5500。在该图中,将相交路段集合示出为更粗的线。

过程然后识别(在5410处)直接连接至接合点处的相交路段集合的所有接合点和路径段。即,相交路径集合在接合点处相交,但这些接合点可包含附加路径段。例如,在示例性交叉口5500中,离开交叉口的八个双行车道路径段均在四个接合点处与内(更粗的)路径段相交。因此,四个接合点和八个外路径段均包括在交叉口中。

图56,另一方面,示出了交叉口5600,其中左转通道被定义为独立的路径段。在这种情况下,由于左转通道在初始地图数据中所接收的接合点处与内路段相交,因此,由过程5400识别这些通道。在大多数情况下,左转通道可在地图数据中被表征为岔道或单行车道。

以下表示一些实施例的用于识别被当作在交叉口“内部”的所有转弯通道的伪码:

针对为双行车道的每个路段;

针对具有横穿交通转弯的每个连接,其中可将路径组接至内路段;

将至内路段的路径上的所有路段自己标记为内路段;

该伪码包括关于是否可将路径从路段(例如,转弯通道)组接至内路段的确定。以下包括一些实施例的用于此类确定的伪码:

将第一路段添加至路径;

从路径上的最后路段获得连接(即,连接至接合点处最后

路段的路段);

对每个连接进行迭代处理以查找至内路段或者

查找为最佳延续的连接;

如果连接为内路段,则标注成功并结束;

如果没有连接为内路段,并且没有连接为最佳

延续,则标注失败并结束;

否则:

将路段添加至路径末端;

如果路径太远,则标注失败并结束;

如果十字路口太多,则标注失败并结束;

否则,返回以获得所添加的路段的连接并对连接进行

迭代处理;

接下来,过程5400将新交叉口定义(在5415处)为包括所有所识别的接合点和路径段,包括直接与路径段的初始集合相交的那些。在一些实施例中,在图56所示的情况下,将包括左转通道离开其源双行车道路段的接合点以及与初始路段相交的左转通道。在这种情形下,一些实施例识别岔道或单行车道路径段的其他接合点(即,开始接合点),这将为在进入交叉口之前路径段与双行车道路径段中的一者相交的地方。当单行车道路径段保持在(假设的)双行车道路径对内部一阈值距离(例如,1km)时,一些实施例假设路径段为由双行车道路径所定义的道路的一部分,并且消除对接合点的考虑。

当处理岔道或双行车道外部的其他连接道路(例如,图57的交叉口5700中所示的岔道5705)时,一些实施例不将岔道当作进入双行车道交叉口的路径。相反,一些实施例将路径表征识别为岔道并尝试形成包括岔道的开始和结束接合点的闭合回路。在该闭合回路与新定义的交叉口共享公共接合点时(如通常情况),岔道可与交叉口相关联但不被当作该交叉口的内路径。另一方面,在新定义的双行车道交叉口已由于例如左转通道的存在而增长使得岔道接合点被现在包括相交单行车道的交叉口包围(如对于图58的交叉口5800中的岔道5805而言)时,一些实施例将岔道当作在新定义交叉口的内部。在交叉口的描述中,将通常省略这些左转通道、岔道等,因为用户通常不希望复杂的指令,但相反将希望“右转上sanvicenteblvd”的指令或一些类似的指令。

借助形成所定义的交叉口的路段和接合点的集合,过程需要将双行车道并道成单个接合点支路。过程5400接下来定义(在5420处)进入交叉口的所有路径的集合,并定义(在5425处)退出交叉口的所有路径的集合。对于为单向路径(双向道的半道)的双行车道而言,路径将通常具有出口边和入口边。出于并道的目的,一些实施例将每个路段(退出交叉口的路段和进入交叉口的路段)当作独立的路径。不在双行车道内部的单行车道(例如,图59的交叉口5900中的附加双向路径5905)将通常被当作独立的支路并且在一些实施例中不是并道分析的一部分。

接下来,过程确定(在5430处)入口路径集合是否包括任何未配对的双行车道路径。当在集合中未保留此类路径(或在第一地点中不存在此类路径)时,过程将留在出口路径集合中的任何未配对双行车道存储(在5435处)为接合点的独立支路。一般来说,在误标记的地图数据(道路实际上为单向街道)或者太严格的并道标准(离开未并道的入口和出口路径对)的情况下,将发生这种情况。

当存在未配对的入口路径时,过程选择(在5440处)入口路径中的一者。过程然后确定(在5445处)在出口集合中是否存在潜在匹配。在一些实施例中,潜在匹配是通过向左(在左侧驾驶区域的情况下,向右)遍历先前识别的路段或者以顺时针方式遍历交叉口而发现的双行车道。

当不存在潜在匹配(例如,遍历中的下一条所识别双行车道也为入口路径,或者出口集合为空)时,过程将入口路径存储(在5450处)为交叉口的独立支路然后返回至5430以查找下一个未配对的入口路径。另一方面,当存在潜在匹配时,一些实施例确定(在5455处)潜在对是否满足双行车道匹配标准集合。在一些实施例中,这些是用于确定双行车道对实际上是否是相同道路的两边的标准。一些实施例确定(1)两条路径是否在路径进入/退出交叉口的阈值距离(例如,25m、50m等)内,以及(2)路径抵达交叉口内其接合点的角度是否在彼此的阈值范围(例如,5°、10°等)内。为计算角度,一些实施例使用最靠近交叉口的边缘(或者路径段与交叉口内其他路段相交的接合点的位置)的顶点以及位于特定预定距离(例如,50m)之外的顶点。过程然后针对两个顶点之间的线计算相对于北方的角度。

在一些实施例中,地图绘制服务此外还考虑路径的名称以确定这些是否匹配。在名称匹配时,此类实施例可针对匹配对而放松几何结构标准(即,允许路径之间的更大距离或路径之间的角度的更大差值)。匹配名称可能是例如“ca-1south"和“ca-1north”,或者如果两条路径均包括“威尔士大道”作为它们的名称中的一者。一些实施例还可考虑道路类数据,以确认匹配双行车道。

如果两条路径匹配,则过程将路径并道(在5460处)成新定义的交叉口的单个支路。如上文所指出,将交叉口存储为呈不同角度的支路的集合。针对所并道的路径,一些实施例将角度存储为组成支路的两条路径的角度的平均值。图60示出了将八路径交叉口6000减少成四条支路,其中右支路6010的角度是右出口路径6005与水平线的偏移的一半,因为右入口路径在水平线上。如图概念性地示出,在一些实施例中,未针对交叉口支路存储方向(入口/出口)。地图绘制服务使用地图数据生成路线,所述路线包括交叉口以及道路的行进方向,因此路线在交叉口的支路上将不会行进到错误的路上。

另一方面,在路径不匹配时,过程将路径中的每一者存储(在5465处)为交叉口的独立支路。图61示出了将一不同的八路径交叉口6100减少成五条支路。在这种情况下,

右边的双行车道路径6105和6106不并道,并且因此被当作减少的交叉口的独立支路6110和6111。在该实例中,这些支路中的每一者离开交叉口的角度是针对支路存储的角度(不进行平均)。过程5400然后返回至5430以确定是否仍有任何入口路径。如所述,一旦入口路径集合为空,过程便前进至5435并随后结束。

以下表示一些实施例的用于一旦已针对交叉口识别了内路段(例如,由过程5400中的一些或全部所执行的操作)便针对交叉口生成数据的伪码:

收集接触交叉口的内路段的所有外路段;识别由交叉口中的内路段围绕的外路段并将它们标记为内;

将表示相同道路的驶入和驶出路段的配对组合在一起;

针对每对以及针对每条未配对道路计算驶出角度;用每个角度的一条支路来构造模板交叉口图案;如果针对先前生成的交叉口存在图案,则使用现有图案来节省空间(使交叉口参考现有图案);

否则如果不存在图案,则创建和存储图案的新条目;

如所指出,一些实施例将每个交叉口存储为数据结构。该数据结构指示交叉口的支路以及支路进入和/或退出接合点的角度。图62概念性地示出了一些实施例的针对点型交叉口的此类数据结构6200的实例。如图所示,交叉口包括交叉口id(其在一些实施例中为唯一标识符)、地图数据关联以及包含角度和类型的支路集合。在一些实施例中,地图数据关联将交叉口数据结构与地图内的实际位置相关联。在一些实施例中,这仅是纬度/经度点,但在其他实施例中,还可由其他数据组成(例如,在交叉口相汇的路径段或聚合路径的列表)。每条支路包括类型和角度。在一些实施例中,类型为交叉口类型。一些实施例定义两种交叉口类型:点型和环型。然后,其他实施例可包括附加交叉口类型,诸如交通广场。一些实施例将交叉口类型存储为交叉口的特性,而不是单独针对每条支路来存储,但其他实施例辨认交叉口部分地为环型但部分地为点型交叉口的可能性。数据结构6200包括在0°(北)、90°(东)、180°(南)和-90°(西)的基本方向上的四条支路。在一些实施例中,交叉口数据结构还包括对包含在所定义的交叉口内的任何接合点(即,从地图数据提供方接收的数据)和路径段的参考。针对两条双行车道的典型交叉口,此类数据结构涉及四个接合点。

图63示出了一些实施例的针对环型交叉口的数据结构6300。一些实施例提供对环型交叉口的专门处理。以下表示一些实施例的用于针对环型交叉口生成交叉口数据的伪码:

识别所有环型路段;

针对每个环型路段:

收集所有连续的环型路段;

将所收集的环型路段标记为已处理;

通过环型路段的该合集来构建环型

交叉口;

在一些情况下,地图数据识别环岛(例如,作为一种路形式或通过另一种指示符)。这允许地图绘制服务交叉口计算器开始其专门的自动环岛处理。具体地,在执行环岛处理时,地图绘制服务尝试识别延展连接道路对(即,延展进入和退出环岛的道路的部分)。在一些实施例中,交叉口计算器遍历环岛(例如,对于右边驾驶而言,以逆时针的方式),寻找在特定距离(例如,角距离)内接下来是入口路径的出口路径。过程然后确定是否组合这些路径,从而考虑与针对在点型交叉口并道双行车道的那些因素类似的因素。例如,所使用的因素可能包括名称是否类似、出口/入口路径之间的距离是否足够小以及潜在的其他因素。由于这种处理,当随机道路在以别的方式看起来为入口/出口组合的结构之间与环岛相交时,一些实施例将这当作三条独立的支路。

为计算支路的角度,一些实施例确定支路与环岛相交的地方,而不是道路的接近角度。针对入口/出口组合,过程采用两条路径的平均值。图64概念性地示出了将环型交叉口6400减少成相交数据。顶部路径,尽管以相对于北方呈大约30°角度接近,但被指定为0°支路——用户主要对围绕交叉口的交通转盘的距离感兴趣,而不是对他们进入和退出的角度感兴趣。其他三条支路也指定了基本方向,因为它们朝向这些方向的延展最终得到平衡。数据结构6300示出了环型接合点6400的数据结构。然而,其他实施例使用路径进入或退出环岛的角度,而不是围绕路径与其相交的环岛的距离。

以下表示一些实施例的用于一旦已针对交叉口识别了环型路段便针对环型交叉口生成数据的伪码:

针对形成单个回路的环型路段的集合:

收集接触回路的、按围绕回路的行进方向排序的所有非环型路段;

将表示相同道路的连续环型退出/进入路段的配对组合在一起;

为每对和每个未配对路段分配角度;

从所有角度中减去最小的角度(因此,最小角度=0);用每个角度的一条支路来构造模板交叉口图案;如果针对先前生成的交叉口存在图案,则使用现有图案来节省空间(使交叉口参考现有图案);

否则如果不存在图案,则创建和存储图案的新条目;

如伪码的上述实例所指出,一些实施例在存储交叉口时执行附加压缩。现实世界包含数百万(或数亿)的单独交叉口,但许多这些交叉口具有相同的配置(尤其是在容许非常小的角度变化时)。因此,一些实施例在存储交叉口的过程中使用压缩,而不是针对数亿交叉口中的每一者存储独立的数据。在处理每个交叉口时,一些实施例为该交叉口存储模板图案。在识别到具有模板图案的附加交叉口时,此类实施例存储对该图案的参考(并同时仍创建独立的数据结构,因为对于沿循相同图案的两个交叉口而言,位置信息是不同的)。

3.针对导航的接合点数据修改

上一章节描述了复杂交叉口数据的生成,所述生成通常在路线生成之前作为离线过程而完成。然而,在路线生成的时候,一些实施例修改交叉口数据以传输至用户。提供路线数据的地图绘制服务修改角度以使这些角度与进入方向相关并将支路中的一者标记为出口支路。

图65概念性地示出了一些实施例的用于修改交叉口数据以便提供路线的导航信息的过程6500。如图所示,过程以接收(在6505处)针对其生成交叉口信息的路线开始。如上所述,一些实施例针对用户设备所请求的开始和结束位置的每个集合生成一条或多条路线。这些路线中的每一者均由在各个路径交叉口处(即,在道路交叉口处)的一系列操纵组成。

如图所示,在识别路线后,过程6500选择(在6510处)沿路线的下一个交叉口。一些实施例始于从路线的起点开始的第一交叉口(即,沿循路线的用户将进行的第一操纵)。许多路线涉及沿特定道路的长伸展,穿过多个交叉口直线前行(可能包括为相同道路的一部分并且不与其他道路相交的两个路段的接合点)。在一些实施例中,导航指令不包括与不进行转弯操纵的交叉口有关的信息。因此,下一个交叉口实际上是沿路线的将在其处进行操纵的下一个交叉口。

过程然后将预计算的交叉口数据检索(在6515处)作为具有相关联角度的支路集合。如上所述,一些实施例针对每个交叉口存储数据结构,该数据结构列出交叉口的支路以及每条支路的角度。图62和图63示出了针对点型交叉口和环型交叉口两者的此类数据结构的实例。

在针对所选择的交叉口检索数据结构之后,地图绘制服务旋转交叉口定义以将定义归一化为路线进入交叉口的方向。因此,过程6500识别(在6520处)交叉口的入口支路并将入口支路设置为预定角度。一些实施例将进入交叉口的移动方向设置为0°,并因此将交叉口的入口支路设置为180°。

过程然后旋转交叉口的其他支路。如图所示,过程选择(在6525处)交叉口的下一条支路。在一些实施例中,支路和角度存储在阵列、列表或类似数据结构中,并且过程遍历该数据结构。过程基于与入口支路的角距离来设置(在6530处)所选择的支路的角度。例如,如果入口支路存储为0°(即,指向北),则存储为95°的支路将偏移180°达到-85°。此外,过程确定(在6535处)所选择的支路是否为接合点的出口支路(即,路线退出交叉口的支路)。为使客户端地图绘制/导航应用处的逐向导航指令正确显示操纵,设备需要知道路线沿交叉口的哪条支路退出。因此,在所选择的支路为出口支路时,过程6500如此标记(在6540处)所选择的支路。过程然后确定(在6545处)是否仍要针对该路线来转变交叉口的任何附加支路。在仍有附加支路时,过程返回至6525以选择接合点的下一条支路。在已针对当前交叉口处理所有支路时,过程6500确定(在6560处)沿路线是否仍有需要修改的附加交叉口。在仍有附加交叉口时,过程返回至6510以选择下一个交叉口。在修改了最后一个交叉口时,过程结束。

图66示出了对穿过交叉口6600的路线的概念性绘制、交叉口的数据结构6605以及对数据结构的修改以创建用于逐向导航指令的新数据结构6610。如图所示,路线从右边(90°支路)进入并且在底部(-162°支路)退出交叉口。在已修改的数据结构中,入口支路已旋转至180°,导致其他支路的90°旋转。18°处的支路旋转至108°,-65°处的支路旋转至25°,并且-162°处的支路旋转至-72°。除旋转角度之外,数据结构6610还具有被标记为用于导航的出口的最后支路。一些实施例包括二进制出口字段,出口支路标记为“1”并且所有其他支路标记为“0”。

d.土地覆盖物几何结构的生成

除生成地图图块的道路几何结构之外,一些实施例还生成土地覆盖物几何结构。与从各种来源接收路段数据非常相似,描述土地覆盖物的数据也可如此(例如,作为指示特定土地覆盖物主体的交界的一系列顶点)。土地覆盖物可包括水体(例如,河流、海洋、湖泊、游泳池等)、行政体(例如,州、国家、城市、公园等的交界)、区域标示(例如,乡村/市区/郊区、沙漠/山脉/森林等)或描述道路之间的土地的其他数据。首先,一些实施例使用这些坐标来为土地覆盖物项目增长几何结构。

在增长用于土地覆盖物的几何结构之后,一些实施例使用各种操作来解决几何结构之间的交界。例如,当组合来自不同来源的数据时,指示对象交界的位置数据可能没有完美地对齐并且因此可能存在对象几何结构之间的间隙或几何结构的重叠。一些实施例使用不同的操作来解决不同的几何结构之间的交界,这取决于对象的类型。另外,土地覆盖物几何结构处理使用路段数据来填充土地覆盖物几何结构并确保在土地覆盖物与道路之间不留下间隙。一些实施例使土地覆盖物几何结构朝向道路长出其所标记的交界,在道路中心线位置处停止几何结构。虽然这创建了土地覆盖物几何结构与道路几何结构之间的重叠,但在一些实施例中客户端地图绘制应用包括用以渲染在土地覆盖物几何结构顶部上的道路几何结构的指令。以下小节描述了用于解决各种土地覆盖物交界之间的差异或不匹配的这些不同方法中的一些。

1.将土地覆盖物合并至道路

图67概念性地示出了过程6700,本发明的一些实施例执行该过程以用于将土地覆盖物多边形合并至道路多边形。在一些实施例中,执行合并土地覆盖物多边形的过程以便解决因从不同数据源接收土地覆盖物多边形数据和道路多边形数据而出现的数据不匹配。将参考图68来描述合并土地覆盖物的过程,图68示出了在三个阶段6801-6803中将土地覆盖物合并至道路多边形的一个实例。

如图67所示,过程6700接收(在6705处)道路多边形。过程6700然后接收(在6710处)至少两个土地覆盖物多边形。在一些实施例中,道路多边形和土地覆盖物多边形接收自两个不同的数据源,而在其他实施例中,它们接收自相同的数据源。图68中的阶段6801示出了两个此类土地覆盖物多边形6810和6820的实例。在该实例中,不同的土地覆盖物类型通过每个土地覆盖物多边形示出。例如,土地覆盖物6820可为湖泊,而土地覆盖物6810可为公园。然而,在其他实施例中,土地覆盖物多边形6810和6820可为相同类型。此外,过程可接收不止两个土地覆盖物多边形,为简单起见,这未示出。第一阶段6801还示出两个土地覆盖物多边形之间的空白空间。由于土地覆盖物表示除道路之外的所有区域,因此空白空间被假设为表示道路通常延伸的位置。然而,由于两个土地覆盖物6810和6820之间的空间的不规则性,如果在两个土地覆盖物多边形之间绘制道路,则在道路与当在用户设备上渲染地图时视觉上不美观的土地覆盖物之间将存在不规则的空白空间。因此,过程6700将土地覆盖物合并至道路,如下所述。

过程6700在两个土地覆盖物多边形之间的空白空间中绘制(在6715处)道路多边形,如图68的阶段6801中的道路多边形6830所示。在一些实施例中,该道路多边形表示位于两个土地覆盖物多边形之间的道路。在一些实施例中,道路可能未干净利索地配合在空白空间的中心。道路的部分,或者整条道路,可能重叠一个或两个多边形。为简单起见,在如下假设下描述过程6700:道路位于土地覆盖物多边形之间的空间中。

接下来,过程6700使土地覆盖物多边形增长(在6720处)一直到道路多边形。例如,如图68中阶段6802所示,过程使土地覆盖物多边形6810的左边扩展直到多边形到达道路多边形6830的右边。过程还使多边形6820的右边扩展直到其到达道路多边形6830的左边。在一些实施例中,当道路多边形未整体地位于土地覆盖物多边形之间的中心空间中时,过程另选地使土地覆盖物多边形增长至间隙的中心。在其他实施例中,土地覆盖物多边形增长超过道路几何结构,覆盖道路几何结构的部分或全部。

为执行步骤6720的这种扩展,在一些实施例中,过程在扩展之前使多边形格栅化。通过使多边形格栅化,过程针对每个土地覆盖物多边形内的像素生成像素数据。合并过程使用该像素数据来以类似数据填充相邻像素。例如,如果空像素与为表示已铺筑区域的类型的土地覆盖物多边形的像素相邻,则空像素也变成表示相同已铺筑区域的类型。过程以此方式增长空像素,直到它们到达道路多边形6830,该道路多边形充当障碍物以终止多边形扩展过程。

尽管图68示出了仅绘制了一个道路多边形的实例,但其他实施例包括表示两个土地覆盖物多边形之间的不止一条道路的多个道路多边形。在此类情况下,空白空间可保留在两条道路之间,因为土地覆盖物多边形未扩展到两条道路之间的空间中(即,道路充当多边形扩展的障碍物)。

在空白空间保留在两条道路之间时,过程6700将道路之间的空白空间标记(在6725处)为填充物。在一些实施例中,根据客户端应用上的不同指令来解译和渲染所标记的填充物。例如,在一些实施例中,用户设备将这些空白空间渲染为道路分隔物。在其他实施例中,用户设备将这些空白空间渲染为绿色空间、柏油等。

在标记了可存在于两条道路之间的任何空白空间之后,一些实施例将新增长的像素转变成矢量以减少来自土地覆盖物多边形的顶点数量,以及所增长的像素与来自过程6700的步骤6710的原始接收多边形的并集。过程然后在道路多边形上绘制(在6730处)道路。在一些实施例中,所绘制的道路还可重叠靠近道路多边形的多边形。图68的第三阶段6803示出了过程6700的操作6730,其中过程在两个多边形6820和6810之间的道路多边形上绘制道路6840。在该实例中,道路6840覆盖道路多边形并重叠多边形6810和6820的部分。

接下来,过程任选地对某些土地覆盖物多边形类型执行(在6735处)多边形优化以减少土地覆盖物多边形中的顶点数量。在一些实施例中,该过程涉及移除特定类型的某些土地覆盖物多边形并且在单独层上绘制土地覆盖物多边形。例如,可对小水体诸如游泳池(或池塘)执行这种优化技术,所述游泳池(或池塘)生成多边形内的对应于池子及其周围区域的大量顶点。例如,将由已铺筑区域围绕的四个游泳池表示为四个多边形以表示池子自身。此外,将已铺筑区域表示为其内具有四个孔的多边形。在一些实施例中,将对应于游泳池及其对应孔的多边形移除并放置在单独层中。绘制已铺筑区域并且在其上绘制池子。以此方式,与池子相关的点数得以减少。

2.基于源数据的可靠性或质量来合并交界

图69概念性地示出了过程6900,在一些实施例中,该过程对从两个不同来源接收的相邻多边形之间的交界进行合并。在一些实施例中,执行过程6900以解决从不同来源接收的不匹配的交界坐标,其中一个数据源被视为比另一个更可靠。将参考图70和图71描述合并交界坐标的过程。图70示出了本发明一些实施例的两个阶段7001和7002,所述两个阶段通过合并相邻多边形7020和7030之间的交界坐标来解决所识别的间隙7010、7040和7060。图71示出了本发明一些实施例中的两个阶段7101和7102,所述两个阶段对围绕所识别的重叠7110和7140的多边形7120和7130的交界坐标进行合并。

如图69所示,过程6900接收(在6905处)彼此相邻的两个不同的土地覆盖物类型的两个多边形。例如,这两个土地覆盖物类型可表示海洋和公园。过程还可接收表示其他地图特征的若干其他土地覆盖物类型。接下来,过程识别(在6910处)两个多边形的交界之间的任何间隙和重叠。

如图70中的阶段7001所示,在多边形7020和7030之间存在间隙7010、7040和7060。如图71所示,在多边形7120和7130之间存在重叠区域7110和7140。尽管为简单起见示出为单独的图,但本发明的一些实施例可合并围绕间隙和重叠两者的多边形交界坐标,所述间隙和重叠在合并过程期间在相同的两个多边形之间出现。

重新参考图69,在识别多边形交界之间的间隙和重叠之后,过程6900确定(在6915处)哪个多边形具有来自更可靠来源的交界坐标,从而具有更可靠的交界坐标。例如,如果多边形7120表示海洋且多边形7130表示公园,并且提供海洋多边形的供应商或来源被视为更可靠或更好质量的来源,则过程以偏向于更可靠数据的方式来解决(在6920处)重叠。在一些实施例中,过程以偏向于表示特定类型的多边形的数据的方式来解决重叠。例如,在上述海洋/公园实例中,过程可确定海洋多边形比公园多边形更可靠并且以偏向于更可靠的海洋多边形数据的方式来解决重叠。其他实施例以偏向于尺寸更大或更小的多边形的方式来解决重叠。例如,一些实施例以偏向于具有最大周长或最大表面积的多边形的方式来解决重叠,而其他实施例以偏向于具有最短周长或最小表面积的多边形的方式来解决重叠。如在图71的阶段7102中所示,通过匹配较不可靠的多边形7120的交界以与更可靠的多边形7130的交界对齐,来移除重叠区域7110和7140。换句话说,使用更可靠的多边形7130的坐标来确定两个区域之间的交界。

为解决间隙,针对具有较不可靠的交界坐标(或更低质量的数据)的多边形,过程基于多边形的形状来计算(在6925处)阈值。在一些实施例中,多边形的形状基于多边形的面积除以多边形的周长再乘以缩放系数。当在具有较不可靠的坐标的多边形上超过预定数量的交界点比阈值更靠近更可靠的多边形时,过程(在6930处)使用更可靠的多边形的交界坐标并且延伸较不可靠的区域以接合更可靠的区域。一旦两个多边形之间的距离大于阈值,则两个多边形保留为分离。例如,如果图70中的多边形7030来自更可靠的来源(或具有更好的数据质量),则通过将较不可靠的区域7020的交界延伸至区域7030的交界来封闭间隙7010和7060(其在该实例中小于所计算的阈值)。换句话说,区域7030的交界坐标用于间隙7010和7060的区域中的两个区域。另一方面,在该实例中,间隙7040的一部分中的两个区域之间的距离大于所计算的阈值。因此,间隙7040仅部分地封闭。

在这些实例中,以偏向于更可靠的交界数据的方式来合并间隙和重叠。然而,其他实施例可以其他方式来合并围绕间隙和重叠的交界坐标,所述其他方式包括以偏向于具有最多细节的多边形或交界数据的方式来合并。

3.基于边界数据的分析来合并区域交界

图72概念性地示出了过程7200,该过程由本发明的一些实施例执行以用于解决区域之间的边界冲突。区域可为任何土地覆盖物区域,诸如水体、公园、建筑物等。区域还可为行政区域,诸如州、市、县、国家等。过程提取边界以便在针对共同边界给出两个数据集合时解决不匹配。例如在从不同的来源获得共同交界的区域边界数据时,可发生此类不匹配。过程7200尝试以偏向于单个边界的方式来解决不匹配。

如图72所示,过程7200接收(在7205处)对应于不同区域的多边形。过程然后识别(在7210处)区域之间的重叠。过程通过将重叠区域包括(在7215处)在具有保持最多边界数据点的边界的区域中,来解决重叠。在一些实施例中,步骤7215涉及从第二多边形中减去第一多边形或者反之亦然。一些实施例基于前述哪个操作具有更多的边界数据点来解决重叠,从而保持更多的边界细节。

接下来,过程7200确定(在7220处)是否已检查所有重叠区域。如果否,则过程返回至步骤7210以识别不同区域之间的另一重叠区域。

在已检查所有重叠区域之后,过程7200继续至步骤7225以识别相邻区域之间的间隙。本发明的一些实施例通过获取所有区域的并集并减去已经检查到重叠的所有区域,来获得相邻边界之间的间隙的列表。

一旦过程识别了相邻区域之间的间隙,过程7200便确定(在7230处)间隙是否在仅两个区域之间。如果是,则过程使用(在7235处)沿交界保持最多点数的区域的边界。否则,间隙在三个或更多个区域之间。在这种情况下,过程使用(在7240处)具有最长边界的区域的边界。然而,在一些实施例中,如果间隙在四个或更多个州之间,则过程可标记该间隙以供人为分析。过程然后确定(在7245处)是否已检查所有间隙。如果否,则过程返回至步骤7225以识别另一间隙。如果是,则过程结束。

图73示出了通过执行过程7200来解决两个相邻区域7350和7360之间的边界冲突的实例。尽管为简单起见图73仅示出两个区域,但可对若干区域之间的不匹配边界执行过程7200。如所示,区域7350和7360共享共同边界7390。然而,两个区域之间存在边界冲突。图73的第一阶段7301示出了区域7350和7360之间的边界7390的破裂部分7340。破裂部分7340示出了边界冲突的实例,所述边界冲突诸如可通过执行过程7200来解决的重叠7310和间隙7330。

图73的第二阶段7302示出了在对边界7390执行过程7200之后边界7370可能看起来的样子的破裂部分。重新参考图72,过程7200将首先识别(在7210处)重叠7310并通过包括(在7215处)区域的保持最多边界数据点的部分来解决冲突。在图73所示的实例中,过程7200确定围绕区域7360的边界7395保持更多边界数据点并如阶段7302所示包括该边界。过程7200然后识别(在7225处)间隙7330必须被解决。过程尝试也通过使用(在7235处)保持更多边界数据点的边界来移除区域7350和7360之间的间隙7330。在图73所示的实例中,过程7200确定针对边界的该部分,围绕区域7350的边界7397保持更多边界数据点并如阶段7302所示包括该边界。在一些实施例中,由一个或多个软件模块来执行过程67、69和72中定义的一些或所有操作。

e.图块生成

由生成地图图块的服务器集合执行的最后操作之一是图块切割操作,该图块切割操作生成地图图块并在这些图块中对几何和矢量数据进行编码。在一些实施例中,服务器集合以图块树定义地图,该图块树具有对应于用于查看地图的多个缩放级别的多个级别。例如,在一些实施例中,图块树数据结构为四叉树,该四叉树具有对应于用于查看地图的二十一个缩放级别的二十一个级别。在四叉树中,每个节点为一地图图块,且每个非叶节点具有四个子图块节点。

图块切割操作具有若干新颖性。一个新颖性在于它用来将针对地图生成的每个几何结构与图块四叉树中的一个或多个图块相关联的快速机制。在一些实施例中,该快速机制使用分布式计算来将地图中的大量几何结构与大量地图图块快速地相关联。将确定是否应将每个几何结构与图块相关联的任务当作独立于其他类似任务的任务,可将所述任务中的每一者分配至分布式计算环境中的不同计算资源。

例如,一个计算资源可确定一个几何结构是否与一个图块相交。如果相交,则针对每个图块的子图块,执行单独的相交操作,以便确定几何结构是否与子图块相交。单独的计算资源可独立于其他计算资源来执行每个不同的相交操作。该过程可被视为沿图块四叉树向下“投掷”几何结构,从而识别几何结构所相交的每个图块节点,然后将几何结构的相交部分发送至每个相交节点的每个子节点以确定子节点是否与几何结构相交。然后将针对每个图块节点识别的几何结构用于图块切割过程中以生成图块。

另一个新颖性涉及它用来对地图图块中的道路矢量数据进行重新编码以移除不必要数据的快速机制。再次,图块切割操作使用分布式计算来分配该对矢量数据进行重新编码的任务。每个所分配的任务涉及在相同的画布上初始地记录每个图块的道路数据(其可能是重叠的)以便合并重叠的道路几何结构。任务然后涉及对该数据重新进行矢量编码以生成不重复的矢量数据。

一些实施例的这种图块切割操作在2012年6月10日提交的标题为“scalableandefficientcuttingofmaptiles”的美国临时专利申请61/657,872;2012年9月30日提交的标题为“scalableprocessingforassociatinggeometrieswithmaptiles”的美国专利申请13/632,003;以及2012年9月30日提交的标题为“scalableandefficientcuttingofmaptiles”的美国专利申请13/632,004中进行了进一步描述。临时申请61/657,872以及非临时申请13/632,003和13/632,004以引用方式并入本文。

iii.3d展示的客户端侧生成

一些实施例的地图绘制应用使用各种新颖技术来在地图正在被浏览时或者在地图正在提供导航展示时呈现地图的3d展示。例如,如上所述,地图绘制应用根据虚拟相机的有利位置来渲染3d展示,并且使用在某些情形下自动移动虚拟相机(即,移动视角渲染位置)的各种方法来实现所需的3d展示。当一些实施例的地图绘制应用在设备即将沿路线转弯时将虚拟相机的位置从移动的设备的当前位置后面的视角渲染位置移动至当前位置的自上而下视图时,一个此类实例发生。另一个实例是提供的放大/缩小动画,所述放大/缩小动画示出场景中的对象随着放大操作和缩小操作而变大和收缩。

另外,在一些实施例中,地图绘制应用提供两种不同类型的3d展示——沉浸式3d展示和非沉浸式3d展示。在一些实施例中的沉浸式展示不仅显示更多几何结构而且还显示在非沉浸式展示中显示的几何结构的更多细节。地图绘制应用还提供非沉浸式展示与沉浸式展示之间的平滑过渡。

为了实现此类平滑过渡并生成其他新颖的效果,一些实施例的地图绘制应用使用新颖的图像处理流水线。此流水线执行各种预加载操作以下载、检索和/或解压缩可能为导航展示所需要的地图图块,以为其渲染操作准备好其渲染流水线,并且准备复制流水线以在沉浸式3d展示与非沉浸式3d展示之间平滑地过渡。

下面的小节a描述了用于渲染3d展示的虚拟相机的自动移动。小节b然后进一步描述了地图绘制应用的沉浸式3d展示和非沉浸式3d展示。小节c接下来描述了地图绘制应用的图像处理流水线以及其相关联的网格构建流水线、虚拟相机和渲染引擎。

a.自动虚拟相机移动

如上所述,虚拟相机是3d地图中的由地图绘制应用渲染以生成3d地图视图的位置的概念化。以下提供了对此类虚拟相机的自动移动的若干不同实例的描述。

1.路线导航期间的虚拟相机移动

图74概念性地示出了基于路线导航自动围绕3d地图7435的区域移动的虚拟相机7400的实例。图74示出了在三个不同的阶段7405-7415的虚拟相机7400的围绕3d地图7435的区域的移动。在一些实施例中,地图绘制应用通过参考图75来执行下文所述的过程7500以渲染该图中所描述的3d地图视图。如该图所示,3d地图7435的区域包括在桥梁上方延伸的道路。

第一阶段7405示出了在3d地图7435中的特位置置和位置处的虚拟相机7400。在一些实施例中,虚拟相机7400在3d地图7435中正聚焦的点(即,从虚拟相机前方投射出的线与道路相交的点)被称为聚焦点。在一些实施例中,地图绘制应用将沿路线的在用户位置(在该实例中由在顶部具有三角形的圆圈表示)前方定义距离(例如,5英尺、10英尺、25英尺、50英尺等)处的点用作虚拟相机7400的聚焦点。一些实施例的地图绘制应用基于用户的行进速度使用沿路线的在用户位置前方的不同距离(例如,在用户以较快的速度行进时,使用更长的距离,以及在用户以较慢的速度行进时,使用更短的距离)。

在第一阶段7405中,虚拟相机7400的聚焦点为沿桥梁斜升部的在用户位置前方定义距离处的点。在该阶段7405中,以虚拟相机7400的视角的3d地图7435的示例性渲染图像在3d地图视图7420中示出。该图中所示的3d地图视图7420、7425和7430,以及在本节内其他图中所示的那些,不包括各种ui控件和特征(例如,道路指示牌、导航指示牌、浮动控件等)以便突出显示所渲染的地图图像。

第二阶段7410示出了在3d地图7435中的不同位置和位置处的虚拟相机7400。在该实例中,虚拟相机7400已向上移动,因为由于桥梁的高度而抬升了虚拟相机7400的聚焦点。此外,虚拟相机7400已朝右移动以沿循路线导航。从第一阶段7405到第二阶段7410,地图绘制应用自动移动虚拟相机7400,渲染来自虚拟相机7400沿路径的视角的3d地图的图像,并在设备上显示所述图像。在该阶段7410中,以虚拟相机7400的视角的3d地图7435的示例性渲染图像在3d地图视图7425中示出。

第三阶段7415示出了在3d地图7435中的另一不同位置和位置处的虚拟相机7400。对于该实例而言,虚拟相机7400已向下移动,因为虚拟相机7400的聚焦点在道路上而不再是在桥梁上。此外,虚拟相机7400已朝右移动以沿循路线导航。从第二阶段7410到第三阶段7415,地图绘制应用自动移动虚拟相机7400,渲染来自虚拟相机7400沿路径的视角的3d地图的图像,并在设备上显示所述图像。在该阶段7415中,以虚拟相机7400的视角的3d地图7435的示例性渲染图像在3d地图视图7430中示出。

在一些实施例中,地图绘制应用检测沿路线的聚焦点的标高改变的阈值量,或者标高改变的阈值速率。在地图绘制应用检测到用户沿路线的位置在标高上已降低并且已通过阈值中的一者或两者时,一些此类实施例的地图绘制应用响应于沿路线的聚焦点的位置将延迟添加至虚拟相机的跟踪调节的位置。在一些实施例中,在地图绘制应用检测到用户沿路线的位置在标高上降低时,地图绘制应用将虚拟相机的高度(例如,虚拟相机沿z轴的位置)保持一定义时间量。添加延迟并将高度保持一定义时间量是各自防止虚拟相机过近地接近道路或在一些情况下碰撞到道路的技术。这样,地图绘制应用便在遍历起伏道路的同时为用户提供更好的地图视图。

图75概念性地示出了一些实施例的用于在路线导航期间以动画方式显示地图视图的过程。一些实施例的地图绘制应用以定义的时间间隔(例如,0.5秒、1秒、3秒、5秒等)来执行过程7500。在一些实施例中,地图绘制应用重复地执行过程7500而同时地图绘制应用在路线导航模式中操作。

过程7500以识别(在7510处)用于确定在时间段结束时虚拟相机的位置的属性集合开始。在一些实施例中,时间段的结束是地图绘制应用接收到用户的当前位置的时间,并且时间段的开始是地图绘制应用接收到用户的前一个位置的时间。在一些实施例中,属性集合包括用于得出虚拟相机的位置和取向的数据。

在不同的实施例中,过程7500使用不同的属性集合。以下描述了由一些实施例的过程7500使用的一些或所有属性。例如,一些实施例的过程7500使用基准点的位置(即,用户的位置)。一些实施例的过程7500使用虚拟相机的聚焦点的位置,该位置在一些实施例中被用于确定虚拟相机应面朝哪个方向。

在用户偏离路线导航的路线的情况下,聚焦点是沿用户行进方向(如果该行进方向可确定的话)的在用户前方的固定距离处或者在不能确定用户行进方向时在用户以北的固定距离处。在用户相对于路线导航在路线上的情况下,聚焦点是沿路线的在用户前方的固定距离处以允许虚拟相机在用户实际转弯之前敏锐地窥视转弯。

一些实施例将角度限制在(1)通过基准点和聚焦点定义的矢量与(2)以一定义的最大角度量指向用户行进方向的矢量之间。例如,如果路线在前方不久的拐角转弯,则聚焦点将为从设备的当前位置起围绕拐角的点。由于转动虚拟相机以面朝实际点可能使虚拟相机直接面朝建筑物,因此虚拟相机为窥视拐角而转动的量是有限的,使得行进方向的视图始终部分地显示。

一些实施例的过程7500使用的另一个虚拟相机位置指示符是兴趣点的位置(例如,即将到来的交叉口的位置)。在一些实施例中,过程7500确定虚拟相机视图样式并使用该指示符来得出虚拟相机的位置和取向。虚拟相机视图样式的实例包括自上而下对中、自上而下朝前以及屋顶。在一些实施例中,自上而下对中的视图样式是指其中虚拟相机笔直地向下看着用户位置使得用户位置位置于屏幕的中心。在一些实施例中,自上而下朝前的视图样式是指其中虚拟相机笔直地向下看着用户位置使得用户位置朝着显示器的底部位置。在一些实施例中,屋顶视图样式是指其中虚拟相机位置在用户位置的后方并倾斜使得虚拟相机正沿从用户位置到聚焦点的矢量朝前看。如果用户偏离路线导航的路线或者用户行进方向不能确定(例如,在用户停车时),则虚拟相机设置为自上而下对中的视图样式。否则,通过用户已请求2d导航模式还是3d导航模式来确定视图样式。如果用户已请求2d导航模式,则视图样式设置为自上而下朝前的视图样式。如果用户已请求3d导航模式,则视图样式设置为屋顶视图样式。

在一些实施例中,过程7500确定虚拟相机的焦点样式并使用该焦点样式来确定虚拟相机的位置和取向。虚拟相机焦点样式的实例包括巡航焦点样式和硬焦点样式。在一些实施例中,巡航焦点样式是指其中虚拟相机被设置为预设高度和俯仰角。在一些实施例中,硬焦点样式是指其中虚拟相机被设置为一高度(例如,在自上而下对中或自上而下朝前的视图样式中)和/或一俯仰(例如,在屋顶视图样式中)使得在屏幕上显示给定兴趣点(例如,在用户接近兴趣点时,虚拟相机聚焦在该兴趣点上)。

接下来,过程7500基于所识别的属性确定(在7520处)虚拟相机的位置和取向。在确定了虚拟相机的位置和取向之后,过程7500基于虚拟相机的位置和取向识别(在7530处)在时间段结束时基准点集合的位置。基准点的实例包括相机的位置、虚拟相机的前向矢量与地面之间的相交、沿虚拟相机的右矢量的定义点,等等。

过程7500然后识别(在7540处)先前基准点的对应集合的位置。在一些实施例中,地图绘制应用维持基准点集合的位置的历史,该历史以与由过程7500在7520处识别的那些相同的方式来确定,过程7500访问该历史。

最后,过程7500基于在7530和7540处识别的基准点集合来对动画地图视图渲染(在7550处)所述时间段。为渲染动画地图视图,一些实施例的过程7500使用与每个基准点相关联的三次多项式。过程7500通过(1)在动画期间沿基准点的相关联的三次多项式来遍历虚拟相机的基准点中的每一者,并同时(2)渲染虚拟相机的地图视图,来以动画方式显示地图视图。

在渲染动画地图视图之前,在基准点已相对于其对应的前一个基准点改变时,一些实施例的过程7500更新与特定基准点相关联的三次多项式。在一些实施例中,过程7500用基于基准点的位置、对应的前一个基准点的位置确定的三次多项式以及基于基准点及其对应的前一个基准点的两个切线,来更新三次多项式。在一些实施例中,过程7500使用在基准点位置处结束并且从对应的前一个基准点的位置处开始的矢量的缩放型式作为所述切线中的一者。针对另一条切线,一些实施例的过程7500使用以与第一缩放矢量类似的方式确定的另一个缩放矢量,只不过该矢量在前一个基准点的位置处以及其对应的前一个基准点的位置处结束。过程7500使用这两个切线、基准点的位置以及对应的前一个基准点的位置来拟合三次多项式,并将所拟合的三次多项式用作基准点的当前三次多项式。

2.围绕交叉口的虚拟相机移动

图76概念性地示出了在路线导航期间在3d地图7650中自动操纵转弯的虚拟相机7600的实例。图76示出了在三个不同的阶段7605-7615的虚拟相机7600的在3d地图7650中的移动。在一些实施例中,地图绘制应用通过参考图77来执行下文所述的过程7700以操纵转弯。如图所示,3d地图7650的区域包括邻接另一条道路的道路以及在丁字路口右边的建筑物。

第一阶段7605示出了在3d地图7650中的特位置置和位置处的虚拟相机7600。在一些实施例中,虚拟相机7600在3d地图7650中正聚焦的点(即,从虚拟相机前方投射出的线与道路相交的点)被称为聚焦点。在一些实施例中,地图绘制应用将沿路线的在用户位置(在该实例中由在顶部具有三角形的圆圈表示)前方定义距离(例如,5英尺、10英尺、25英尺、50英尺等)处的点用作虚拟相机7600的聚焦点。一些实施例的地图绘制应用基于用户的行进速度使用沿路线的在用户位置前方的不同距离(例如,在用户以较快的速度行进时,使用更长的距离,以及在用户以较慢的速度行进时,使用更短的距离)。对于该实例而言,虚拟相机7600的聚焦点为沿路线的在用户位置前方的点。

在第一阶段7605中,虚拟相机7600的聚焦点为在用户正沿其行进的道路上在用户位置前方的点。第一阶段7605还示出了虚拟相机7600和3d地图7650的对应的自上而下视图7620。如图所示,在该实例中,聚焦点由在用户正沿其行进的道路上位于用户前方的黑色圆圈指示。在该阶段7605中,以虚拟相机7600的视角的3d地图7650的示例性渲染图像在3d地图视图7635中示出。3d地图视图7635还示出了虚拟相机的聚焦点。

第二阶段7610示出了在3d地图7650中的不同位置和位置处的虚拟相机7600。如在第二阶段7610中所示,虚拟相机7600已沿路线导航朝着交叉口向右移动。为将焦点维持在聚焦点上,虚拟相机7600还已向上移动(例如,沿z轴向上)以便在右转期间提供更好的聚焦点视图以防虚拟相机可能受阻。例如,当附近或在交叉口处存在建筑物时,聚焦点可能被建筑物遮挡,从而妨碍转弯拐角前方的视野。

此外,虚拟相机7600在该阶段已向下倾斜(例如,减少的俯仰)以便维持对聚焦点的瞄准。第二阶段7610处的自上而下视图7625示出了虚拟相机7600已稍微向交叉口的右侧旋转(例如,围绕z轴),因为聚焦点刚好朝向交叉口的右侧。因此,从第一阶段7605到第二阶段7610,地图绘制应用已将虚拟相机7600沿路线导航(例如,沿x轴、y轴、或x轴和y轴两者的组合等等)朝着交叉口自动朝前移动,已将虚拟相机7600移动得更高(例如,沿z轴向上),并且已将虚拟相机7600朝着交叉口的右侧旋转(例如,围绕z轴)并同时将焦点维持在用户位置前方的聚焦点上。在第二阶段7610中,以虚拟相机7600的视角的3d地图7650的示例性渲染图像在3d地图视图7640中示出。

第三阶段7615示出了在3d地图7650中的另一不同位置和位置处的虚拟相机7600。这里,虚拟相机7600已向右移动并处于沿路线导航的交叉口处。为将焦点维持在聚焦点上,虚拟相机7600还已向上移动(例如,沿z轴向上)并在交叉口上方移动,以便在用户正出于上文所述的相同或类似原因(例如,虚拟相机7600的聚焦点的视野的阻挡或遮挡)而进行右转的同时提供更好的聚焦点视图。

在第三阶段7615中,虚拟相机7600还已进一步向下倾斜(例如,减少的俯仰)以将焦点维持在聚焦点上。第三阶段7615中的自上而下视图7630示出了虚拟相机7600已向右旋转(例如,围绕z轴),因为聚焦点现在转为交叉口的右转弯。如此,从第二阶段7610到第三阶段7615,地图绘制应用已将虚拟相机7600沿路线导航(例如,沿x轴、y轴、或x轴和y轴两者的组合,等等)自动朝前移动至交叉口,已将虚拟相机7600移动得更高(例如,沿z轴向上),并且已将虚拟相机7600朝着交叉口的右侧旋转(例如,围绕z轴)并同时将焦点维持在用户位置前方的聚焦点上。在第三阶段7615中,以虚拟相机7600的视角的3d地图7650的示例性渲染图像在3d地图视图7645中示出。

出于说明和清楚的目的,图76示出了3d地图的自上而下视图中的聚焦点以及3d地图的渲染3d地图视图。在一些实施例中,地图绘制应用实际上不渲染3d地图视图中的聚焦点,并且3d地图不包含表示聚焦点的实际点。

图77概念性地示出了一些实施例的用于在路线导航的转弯期间以动画方式显示地图视图的过程7700。在一些实施例中,在地图绘制应用正遍历路线导航时,地图绘制应用迭代地执行过程7700。在地图绘制应用正遍历路线导航时,一些实施例的地图绘制应用以定义的时间间隔(例如,0.5秒、1秒、3秒等)来执行过程7700。

过程7700以识别(在7710处)即将到来的交叉口开始。在一些实施例中,过程7700使用地图数据来识别沿路线导航的即将到来的交叉口。

接下来,过程7700确定(在7720处)导航路线在即将到来的交叉口处是否具有转弯。当一些实施例的过程7700在交叉口附近或交叉口处识别到阈值变化或确定沿路线导航在交叉口处的街道名称改变时,过程7700确定导航路线在即将到来的交叉口处具有转弯。附加技术和/或其他技术是可能的。

当过程7700确定在下一个交叉口不存在转弯时,过程7700结束。否则,过程7700确定(在7730处)转弯角度是否在阈值角度内(例如,弯道是否偏离直线超过一定度数)。阈值角度针对不同实施例不同地定义。在一些实施例中,阈值角度被定义为45度以下的值、45到90度之间的值、大于90度的值等等。

如果过程7700确定转弯角度在阈值角度内,则过程7700结束。否则,过程7700在自上而下查看模式中显示(在7740处)地图视图。在一些实施例中,自上而下模式是一查看模式,在该查看模式中,虚拟相机位于场景上方或“顶部”并且大部分或全部朝下指。在一些实施例中,自上而下查看模式被称为硬焦点模式。在一些实施例中,自上而下查看模式为2d模式。在一些情况下,地图绘制应用已经正在自上而下模式中显示地图视图。在此类情况下,过程7700通过沿路线导航的转弯在该查看模式中继续。

接下来,过程7700确定(在7750处)转弯是否已完成。在用户的位置为越过交叉口一定义距离时,过程7700确定转弯已完成。在一些实施例中,在虚拟相机的位置已旋转转弯角度的角度量或转弯角度内的阈值角度范围时,过程7700确定转弯已完成。在过程7700确定转弯尚未完成时,过程7700返回至7750以继续检查转弯是否已完成。

在过程7700确定转弯已完成时,过程7700在原始查看模式中显示(在7760处)地图视图。即,过程7700在地图绘制应用于接近转弯之前正显示地图视图的查看模式中显示地图视图。然后过程7700结束。

尽管过程7700被描述为使用自上而下模式,但在一些实施例中,其他类似或相同过程使用非自上而下模式,相比在接近拐角之前其中已显示地图的无论何种模式,该非自上而下模式使拐角处的转弯更容易看到。

3.平移时的虚拟相机移动

图78概念性地示出了在路线导航期间围绕3d地图7835的虚拟相机7800平移的实例。图78示出了在三个不同的阶段7805-7815的虚拟相机7800的围绕3d地图7835的区域的移动。一些实施例的地图绘制应用通过参考图79来执行下文所述的过程7900以平移虚拟相机7800。如该图所示,3d地图7835的区域包括道路以及沿道路侧边的若干建筑物。

第一阶段7805示出了在3d地图7835中的特位置置和位置处的虚拟相机7800的自上而下视图。在一些实施例中,虚拟相机7800在3d地图7835中正聚焦的点(即,从虚拟相机前方投射出的线与道路相交的点)被称为聚焦点。在一些实施例中,地图绘制应用将沿路线的在用户位置(在该实例中由在顶部具有三角形的圆圈表示)前方定义距离(例如,5英尺、10英尺、25英尺、50英尺等)处的点用作虚拟相机7800的聚焦点。一些实施例的地图绘制应用基于用户的行进速度使用沿路线的在用户位置前方的不同距离(例如,在用户以较快的速度行进时,使用更长的距离,以及在用户以较慢的速度行进时,使用更短的距离)。

在第一阶段7805中,虚拟相机7800的聚焦点为沿道路的在用户位置前方一定义距离处的点,如由3d地图7835中的圆圈所指示。在第一阶段7805中,以虚拟相机7800的视角的3d地图7835的示例性渲染图像在3d地图视图7820中示出。

第二阶段7810示出了在3d地图7835中的不同位置和位置处的虚拟相机7800的自上而下视图。如图所示,虚拟相机7800已朝右旋转(例如,围绕z轴)。在该实例中,一些实施例的地图绘制应用响应于通过触摸屏接收的手势输入(例如,向左划动手势)而自动将虚拟相机7800朝右旋转。在该阶段7810中,以虚拟相机7800的视角的3d地图7835的示例性渲染图像在3d地图视图7825中示出。

第三阶段7815示出了在3d地图7835的另一不同位置和位置处的虚拟相机7800的自上而下视图。对于该实例而言,地图绘制应用已在一定义时间量(例如,0.5秒、1秒、2秒、3秒等)之后自动将虚拟相机7800朝左旋转回来。在一些实施例中,地图绘制应用在已行进一定义距离量(例如,10码、25码、半英里等)之后将虚拟相机7800旋转回来。在第三阶段7815中,以虚拟相机7800的视角的3d地图7835的示例性渲染图像在3d地图视图7830中示出。

图79概念性地示出了一些实施例的用于基于手势输入平移至地图视图侧的过程7900。在一些实施例中,当地图绘制应用处于路线导航模式中并且地图绘制应用通过地图绘制应用正于其上执行的设备的触摸屏接收到手势时,地图绘制应用执行过程7900。

过程7900以接收(在7910处)用于平移至所述侧的手势开始。在一些实施例中,用于平移至所述侧的手势包括通过触摸屏接收的触摸手势(例如,用手指将触摸屏划动至一侧)。另选地或结合地,在一些实施例中,用于平移至所述侧的手势包括多点触摸手势(例如,用多个手指将触摸屏划动至一侧)。

接下来,过程7900识别(在7920处)平移手势的平移分量。一些实施例的过程7900将平移手势的水平分量识别为平移分量。在其他实施例中,过程7900识别从手势的初始触摸处的位置(例如,手指触摸屏幕的位置)到手势结束处的位置(例如,手指不再触摸触摸屏的位置)定义的矢量。

在一些实施例中,过程7900限制平移手势的平移分量。例如,如果过程7900确定(在7930处)平移分量超过阈值量(例如,平移分量的大小量超过阈值量),则过程7900将平移分量限制(在7940处)(例如,将平移分量的大小降低)至定义限制内。

基于平移分量,过程7900然后平移(在7950处)正用于对沿路线导航的路线的3d地图视图进行渲染的虚拟相机。一些实施例的过程7900以与上文参考图78所述的平移虚拟相机类似的方式平移虚拟相机。即,过程7900围绕z轴旋转虚拟相机以平移虚拟相机。

接下来,过程7900确定(在7960处)是否已经过一定义时间量(例如,0.5秒、1秒、2秒、5秒等)。在过程7900确定尚未经过该定义时间量时,过程7900返回至7960以继续检查将要经过的时间量。在过程7900确定已经过该定义时间量时,过程7900前进至7970。

最后,过程7900将虚拟相机平移(在7970处)回其原始位置。在一些实施例中,过程7900以与上文参考图78所述的平移虚拟相机类似的方式平移虚拟相机。换句话说,过程7900围绕z轴旋转虚拟相机以平移虚拟相机。

4.视角调节期间的虚拟相机移动

除了(或者代替)使导航应用控制相机(例如,当绕拐角行走时从3d转向2d),一些实施例还允许用户调节相机的水平高度。一些实施例允许用户使用两个手指做出命令手势来调节相机的距离(高度)和角度。一些实施例甚至允许多种类型的手势来控制相机。

图80概念性地示出了由一些实施例的地图绘制应用提供的视角调节特征。具体地,图80示出了在三个不同的阶段8005-8015的虚拟相机8000,所述三个不同的阶段示出了响应于视角调节而进行的对虚拟相机8000的位置的调节。如图所示,图80示出了包括四个对象的3d地图8035中的位置,所述四个对象为两个建筑物和两条相交道路。

第一阶段8005示出了第一视角位置处的虚拟相机8000,该虚拟相机以相对于水平线的第一角度(例如,45度)向下指向3d地图8035。在该位置上,相机8000指向一位置,该位置可为设备的静止位置或正探索的位置的静止位置,或者可为在将地图用于导航的情况下在设备的移动位置前方的移动位置。在一些实施例中,相机8000的默认位置将处于相对于当前位置的特定取向,但在用户旋转地图时,该取向可修改。基于虚拟相机8000的位置来渲染3d地图视图会得到3d地图视图8025。

第二阶段8010示出了在不同的第二视角位置处的虚拟相机8000,该虚拟相机以相对于水平线的更小的第二角度(例如,30度)以更低的视角指向3d地图8035。阶段8010还示出了用户已通过使两个手指触摸屏幕并在向上的方向上拖动两个手指(例如,划动手势)来提供输入以调节3d地图8035的视图的视角。场景平铺通过虚拟相机8000降低和减小相对于水平线的查看角度来实现。使用以该角度位置的虚拟相机8000渲染3d地图视图会得到3d地图视图8030,其中建筑物和道路比它们在第一地图视图8025中的图示更高。如由虚拟相机8000的虚线型式所指示,虚拟相机8000在进一步向上倾斜(例如,俯仰)的同时沿弧线8050进一步向下移动。

第三阶段8015示出了在不同的第三视角位置处的虚拟相机8000,该虚拟相机以相对于水平线的更大的第三角度(例如,80°)以更高的视角指向3d地图8035上的位置(例如,虚拟相机8000的聚焦点)。阶段8015还示出了用户已通过使两个手指触摸屏幕并在向下的方向上拖动两个手指(例如,划动手势)来提供输入以调节3d地图8035的视图的视角。场景下降通过虚拟相机8000升高和增加其相对于水平线的角度来实现。如图所示,在该阶段8015处,在一些实施例中,当虚拟相机8000位置在自上而下或近乎自上而下的位置中时,地图绘制应用在3d地图8035中平铺建筑物(例如,将多边形的z轴分量降低至地面水平),使得使用虚拟相机8000渲染的3d地图视图看起来为2d。在第三阶段8015中使用以该角度位置的虚拟相机8000渲染3d地图视图会得到3d地图视图8040,其中相比它们在第二地图视图8030中的图示,建筑物看起来更小、更平且道路看起来更小。如由虚拟相机8000的虚线型式所示,虚拟相机8000在进一步向下倾斜(例如,俯仰)的同时沿弧线8050进一步向上移动。

在一些实施例中,在地图绘制应用接收到用于调节用于查看3d地图8035的视角的输入时,可使虚拟相机8000以这种方式移动。在一些这样的实施例中,在缩放级别达到特定缩小级别时,地图绘制应用切换至产生2d地图视图的自上而下模式(其中渲染位置直接面朝下)。

图80示出了沿着沿弧线的特定路径移动的虚拟相机。不同实施例的地图绘制应用在调节虚拟相机的视角时沿不同路径移动虚拟相机。例如,在一些实施例中,地图绘制应用使用与图80所示的弧线类似的特定弧线,只不过在虚拟相机沿弧线向上移动且移动得更靠近(例如,放大)时,该特定弧线更远并且是向上的(例如,缩小),并且在虚拟相机沿弧线向下移动时,该特定弧线是向下的。在一些实施例中,地图绘制应用针对虚拟相机使用一路径,该路径在虚拟相机沿弧线向上移动时水平地平铺。在其他实施例中,虚拟相机在其上移动的其他路径是可能的。

当沿弧线中的一者移动时,虚拟相机旋转以将地图上的所需位置维持在相机的焦点处。在一些情况下,所需位置为设备的静止位置或用户正在地图上浏览的静止位置。在其他情况下,所需位置为当用户正与设备一起移动时在设备的移动位置前方的移动位置。

图81概念性地示出了一些实施例的用于调节虚拟相机的位置的过程8100,该虚拟相机用于响应于视角调节而渲染地图视图。在一些实施例中,在地图绘制应用处于地图查看模式(例如,位置浏览模式、导航模式等)中并且地图绘制应用通过地图绘制应用正于其上执行的设备的触摸屏接收到手势时,上文和下文参考图1-108描述的地图绘制应用执行过程8100。

过程8100以接收(在8110处)用于调节地图视图的视角的手势开始。在一些实施例中,用于调节地图视图的视角的手势包括通过触摸屏接收的多点触摸手势(例如,用多个手指同时触摸触摸屏),诸如上文参考图80所述的手势。在该实例中,过程8100接收双点触摸划动手势。

接下来,过程8100确定(在8120处)基于触摸点的角度是否在阈值角度内。在一些实施例中,由以下来定义角度:(1)从触摸点中的一者的位置朝着另一触摸点的位置的第一矢量,以及(2)从所述一个触摸点的位置朝着水平方向的第二矢量。一些实施例的水平方向基于设备的取向,而其他实施例的水平方向基于设备的显示器的取向。

当过程8100确定角度在阈值角度内时,过程8100结束。否则,过程8100识别(在8130处)所接收手势的平动分量。在一些实施例中,过程8100通过识别手势的触摸点的垂直平动的量来识别手势的平动分量。

过程8100然后基于所识别的平动来调节(在8140处)地图视图的视角。如上文参考图3-5和图74-80所述,在一些实施例中,使用虚拟相机来渲染地图视图。一些实施例的过程8100通过调节虚拟相机的位置和取向来调节地图视图的视角。在一些实施例中,向下的垂直平动使虚拟相机的位置在高度上增加并且在俯仰上降低(例如,进一步向下指),同时维持虚拟相机的聚焦点(例如,虚拟相机的前向矢量与地面相交的点)。换言之,相机沿弧线移动,并且当相机沿着弧线向上移动时向下旋转得更多。

不同的实施例使用地图的不同坐标空间。例如,一些实施例的地图使用墨卡托单位坐标空间。在此类实施例中,过程8100相对于地图来调节虚拟相机的位置以调节地图视图的视角。又如,在一些实施例中,地图将世界测地系统(例如,wgs84)用作地图的坐标空间。在此类实施例中,过程8100相对于虚拟相机的位置来调节地图以调节地图视图的视角。

在一些实施例中,向上的垂直平动使虚拟相机的位置在高度上降低并且在俯仰上增加(例如,进一步向上指),同时维持虚拟相机的聚焦点(例如,虚拟相机的前向矢量与地面相交的点)。即,相机沿弧线移动,并且当相机沿着弧线向下移动时向上旋转得更多。在不同的实施例中,垂直平动引起对虚拟相机的位置的不同调节。例如,向下的垂直平动可使虚拟相机的位置在高度上降低并且在俯仰上增加,同时维持虚拟相机的聚焦点,并且向上的垂直平动可使虚拟相机的位置在高度上增加并且在俯仰上降低,同时维持虚拟相机的聚焦点。

最后,过程8100基于地图视图的所调节的视角来渲染(在8150处)用于显示的地图视图。然后过程8100结束。

如上所述,图81所示的过程示出了基于手势输入来调节地图视图的视角。一些实施例的过程限制虚拟相机的移动的范围。在手势输入使虚拟相机的位置超出一定义范围时,一些实施例的过程将虚拟相机的位置修改为在该定义范围内。在一些此类实施例中,即使在手势输入(例如,用于触摸点的手指仍在触摸触摸屏)期间虚拟相机的位置超出该定义范围,过程仍渲染虚拟相机的位置的地图视图。在手势输入完成(例如,用于触摸点的手指不再触摸触摸屏)时,过程渲染被修改为在该定义范围内的虚拟相机位置的地图视图。在一些实施例中,在手势输入完成时,过程显示一动画,该动画从超出该定义范围的虚拟相机位置的地图视图“跳转”至被修改为在该定义范围内的虚拟相机位置的地图视图。在一些实施例中,此类动画以及所述限制特征可被称为偏移橡皮筋特征或效果。

如图80所示,不同的虚拟相机位置渲染地图视图的不同视角。具体地,图80示出了地图视图从3d地图视图到2d地图视图的过渡。在过渡的不同阶段中,建筑物看起来像陷入地面中。类似地,在地图视图从第三阶段8015的2d视图到第一阶段8005的3d地图视图的过渡期间,建筑物将看起来像从地面升出。在一些实施例中,地图绘制应用对沿z轴的建筑物的顶点进行缩放以便当地图视图在类2d地图视图与3d地图视图的不同视角之间过渡时使建筑物看起来像上升和下降。以下为被一些实施例的地图绘制应用用于对沿z轴的顶点进行缩放的方程式的实例:

new_scaled_vertex.z=scaled_vertex.z*u_scale

其中scaled_vertex.z是顶点的z分量,u_scale是确定要缩放的量的缩放系数,并且new_scaled_vertex.z是顶点的z分量的新缩放值。此外,在放大/缩小3d地图或者围绕3d地图移动时,一些实施例内插用于融入和融出建筑物的α值以及内插用于调节建筑物的高度的缩放值。

如上所述,图80示出了若干示例性视角调节操作以及虚拟相机在3d地图中的对应移动,所述对应移动用于渲染3d地图的3d地图视图。本领域的普通技术人员将理解,任何数量的不同视角调节是可能的。此外,一些实施例的地图绘制应用响应于附加和/或不同类型的输入而执行视角调节操作。例如,在一些实施例中,向下拖动两个手指可降低虚拟相机的视角位置,并且向上拖动两个手指可增高虚拟相机的视角位置。

虽然图80示出了虚拟相机沿弧线移动以便改变虚拟相机的视角位置,但一些实施例的地图绘制应用以不同的缩放级别(例如,与3d地图的距离)沿不同的弧线移动虚拟相机。图82概念性地示出了可以三个不同的缩放级别沿三条不同的弧线8215-8225移动的虚拟相机8210。如图所示,图82示出了3d地图8205中的位置,该3d地图包括两个建筑物和形成丁字路口的两条道路。

在缩放级别18(该实例中的最低缩放级别)下,虚拟相机8210可针对指向3d地图8205的虚拟相机8210的不同视角位置而沿弧线8215移动。换句话说,该缩放级别下的一些实施例的地图绘制应用允许用户将用于查看3d地图8205的视角调节到虚拟相机8210可沿弧线8215移动的范围(例如,20度的角度范围)内。

在虚拟相机8210从缩放级别19过渡(例如,缩小)时,地图绘制应用将虚拟相机8200的视角位置的范围限制为沿弧线8215的范围。在一些实施例中,地图绘制应用将虚拟相机8210位置在沿弧线8215的位置上,该位置对应于虚拟相机8210在过渡至缩放级别18之前在缩放级别19下沿弧线8220所在的位置。如果当从缩放级别19过渡至缩放级别18时,在缩放级别19下虚拟相机8210的位置超出弧线8215的范围(例如,沿弧线8220的更低视角端的位置),则在一些实施例中,地图绘制应用将虚拟相机8210位置在尽可能近的位置处。在其他实施例中,地图绘制应用将虚拟相机8210逐渐朝弧线8215上最近的对应位置移动,同时当从缩放级别19过渡至缩放级别18时处于缩放级别18与19之间的过渡区域中,以提供虚拟相机8210从缩放级别19到缩放级别18的移动的平滑过渡。

在下一个缩放级别19下,虚拟相机8210可针对指向3d地图8205的虚拟相机8210的不同视角位置而沿弧线8220移动。如图所示,在一些实施例中,该缩放级别下的地图绘制应用允许用户将用于查看3d地图8205的视角调节到虚拟相机8210可沿弧线8220移动的范围(例如,45度的角度范围)内。因此,较之于缩放级别18,在缩放级别19下,地图绘制应用允许虚拟相机8210沿更大的范围移动。

在虚拟相机8210从缩放级别18或缩放级别20过渡(例如,放大或缩小)时,地图绘制应用将虚拟相机8200的视角位置的范围限制为沿弧线8220的范围。一些实施例的地图绘制应用将虚拟相机8210位置在沿弧线8220的位置上,该位置对应于虚拟相机8210在过渡至缩放级别19之前分别在缩放级别18或20下沿弧线8215或8225所在的位置。如果当从缩放级别20过渡至缩放级别19时,在缩放级别20下虚拟相机8210的位置超出弧线8220的范围(例如,沿弧线8225的更低视角端的位置),则在一些实施例中,地图绘制应用将虚拟相机位置在尽可能近的位置处。其他实施例的地图绘制应用将虚拟相机8210逐渐朝弧线8220上最近的对应位置移动,同时当从缩放级别20过渡至缩放级别19时处于缩放级别19与20之间的过渡区域中,以提供虚拟相机8210从缩放级别20到缩放级别19的移动的平滑过渡。

在缩放级别20(该实例中的最高缩放级别)下,虚拟相机8210可针对指向3d地图8205的虚拟相机8210的不同视角位置而沿弧线8225移动。即,在一些实施例中,该缩放级别下的地图绘制应用允许用户将用于查看3d地图8205的视角调节到虚拟相机8210可沿弧线8225移动的范围(例如,85度的角度范围)内。因此,相比缩放级别18和19,在缩放级别20下,地图绘制应用允许虚拟相机8210沿更大的范围移动。当虚拟相机8210从缩放级别19过渡(例如,放大)时,地图绘制应用将虚拟相机8200的视角位置的范围限制为沿弧线8225的范围。

上述图82示出了可以不同缩放级别沿不同弧线移动的虚拟相机的实例,所述不同缩放级别允许虚拟相机的视角位置的不同范围。本领域的普通技术人员将认识到,不同实施例的地图绘制应用针对不同缩放级别下的虚拟相机将任意数量的不同弧线与视角位置的数值范围一起使用。

图83概念性地示出了一些实施例的用于确定虚拟相机可沿其移动的弧线的过程8300。在一些实施例中,当在3d查看模式(例如,3d导航模式、3d地图浏览模式等)中调节缩放级别(例如,放大或缩小)时,在本申请中上文和下文参考图1-108描述的地图绘制应用执行过程8300。

过程8300以确定(在8310处)是否将当前缩放级别调节为新缩放级别开始。在一些实施例中,在过程8300接收到用于调节3d地图的视图的缩放级别的输入(例如,下文参考图85所述的输入类型)时,过程8300确定将当前缩放级别调节为新缩放级别。在过程8300确定不调节当前缩放级别时,过程8300返回至8310以继续检查针对新缩放级别的调节。

当过程8300确定接收到针对新缩放级别的调节时,过程8300识别(在8320处)新缩放级别的弧线。如上所述,一些实施例的地图绘制应用在不同缩放级别下使用不同弧线。如此,过程8300识别针对新缩放级别定义的弧线。

接下来,过程8300确定(在8330处)新缩放级别的弧线是否具有与虚拟相机沿前一个缩放级别的前一条弧线的位置相对应的位置。当虚拟相机沿前一条弧线的位置在新缩放级别的弧线的角度范围内时,一些实施例的过程8300确定新缩放级别的弧线具有对应位置。参考图82作为实例,如果缩放级别是从缩放级别19过渡至缩放级别18,则当虚拟相机沿缩放级别19的弧线8220的位置在弧线8220的大约上三分之一内时,过程8300确定缩放级别18的弧线8215具有对应位置。

在确定新缩放级别的弧线具有对应位置时,过程8300将沿新缩放级别的弧线的对应位置识别(在8340处)为虚拟相机的新位置。否则,过程8300将沿新缩放级别的弧线的、最靠近虚拟相机沿前一个缩放级别的前一条弧线的位置的位置识别(在8350处)为虚拟相机的新位置。参考图82为实例,如果虚拟相机的位置在弧线8220的更低视角端,如图82所示,则在从缩放级别19过渡至缩放级别18时,过程8300将图82所示的虚拟相机沿缩放级别18的弧线8215的位置识别为虚拟相机的新位置。

最后,过程8300将虚拟相机位置(在8360处)在沿新缩放级别的弧线的所识别的新位置上。然后过程8300结束。

虽然图82和图83描述了可以不同缩放级别沿不同弧线移动的虚拟相机,但一些实施例针对一系列不同缩放级别使用特定弧线(例如,针对缩放级别10-13的弧线、针对缩放级别14-16的弧线,等等)。在一些实施例中,定义缩放级别的不同范围以包括相同或不同数量的缩放级别。

如上所讨论,在一些实施例中,地图绘制应用使用一特定弧线,在将虚拟相机位置在特定缩放级别下时,虚拟相机可沿该特定弧线在沿弧线的特定定义角度范围内移动。一些实施例的地图绘制应用使用以下技术来将虚拟相机沿弧线移动。

图84概念性地示出了由一些实施例的地图绘制应用提供的特征,该特征用于维持虚拟相机在沿弧线的定义范围内的位置。具体地,图84示出了在三个不同的阶段8405-8415的虚拟相机8400,所述三个不同的阶段示出了虚拟相机8400的维持在弧线8450的定义范围内的位置。如图84所示,3d地图8435中的位置包括两个建筑物和形成丁字路口的两条道路。

第一阶段8405示出了在沿弧线8450的特定位置处的虚拟相机8400。如图所示,弧线8450表示一定义范围(例如,角度范围),虚拟相机8400可在该定义范围内移动。第一阶段8405还示出了沿弧线8450的三个位置8455-8465(例如,视角查看角度)。在该实例中,地图绘制应用以类似于上文参考图80所述的方式沿弧线8450在弧线8450的高视角端(例如,当虚拟相机8400最大程度地向下倾斜时沿弧线8450的位置)与位置8455之间移动虚拟相机8400。在第一阶段8405中,基于虚拟相机8400的位置来渲染3d地图视图会得到3d地图视图8425。

当虚拟相机8400通过位置8455同时朝着弧线8450的低视角端移动时,地图绘制应用降低虚拟相机8400朝着弧线8450的低视角端移动的速度(例如,减速),而不管用户提供的输入。在一些实施例中,地图绘制应用以恒定速率降低虚拟相机8400的速度,而在一些实施例中,地图绘制应用以指数级速率降低虚拟相机8400的速度。在一些实施例中,使用降低虚拟相机8400的速度的附加方法和/或不同方法。

第二阶段8410示出了虚拟相机8400已移动至沿弧线8450的在弧线8450的低视角端处或附近的位置。如图所示,用户正通过使两个手指触摸屏幕并在向上的方向上拖动两个手指(例如,划动手势)来提供输入以调节3d地图8435的视图的视角。响应于输入,地图绘制应用将虚拟相机8400朝着弧线8450的低视角端移动同时向上倾斜虚拟相机8450。在虚拟相机到达沿弧线8450的位置8465时,地图绘制应用防止虚拟相机8400移动至低于位置8465,而同时用户继续提供用于降低3d地图8435的视图的视角的输入(例如,用户继续在触摸屏上向上拖动两个手指)。

在一些实施例中,在用户停止提供用于降低3d地图8435的视图的视角的输入(例如,用户将两个手指抬离触摸屏)时,地图绘制应用使虚拟相机8400的位置从位置8465向上“回弹”或“跳转”至沿弧线8450的位置8460。由于地图绘制应用正在基于虚拟相机8400在回弹或跳转运动期间的视图而生成或渲染3d地图8435的3d地图视图,因此所生成的3d地图视图提供显示快速向下回弹或跳转的3d地图视图的回弹动画,以便向用户指示该地图视图的视角不能进一步降低。使用以该角度位置的虚拟相机8400渲染3d地图视图会得到3d地图视图8430,其中较之于地图视图8425,建筑物和道路更高。

第三阶段8415示出了在地图绘制应用响应于用户终止提供输入而将虚拟相机8400的位置回弹或跳转至位置8460之后的虚拟相机8400。不同的实施例使用不同的技术来实现虚拟相机8400的回弹或跳转。例如,一些实施例的地图绘制应用针对一定义距离或者在虚拟相机8400达到一定义速度之前,开始快速地加速沿弧线8450的虚拟相机8400。然后,地图绘制应用针对沿弧线8450的至位置8460的剩余距离使虚拟相机8400减速。在一些实施例中,使用了其他方式来实现回弹或跳转效果。在第三阶段8415中,使用沿弧线8450位置在位置8460处的虚拟相机8400渲染3d地图视图会得到3d地图视图8440,其中相比地图视图8430,建筑物看起来更小点、更平点且道路看起来更小点。

如上所述,图84示出了用于防止虚拟相机移动超过弧线的低视角端的技术。另选地或者结合防止虚拟相机移动超过弧线的低视角端,一些实施例的地图绘制应用使用类似的技术来防止虚拟相机移动超过弧线的高视角端。此外,图84示出了以下位置的实例:沿弧线的于其处使虚拟相机减慢的位置、沿弧线的用于防止虚拟相机移动越过的位置以及沿弧线的虚拟相机所跳转或回弹回到的位置。不同实施例以任意数量的不同方式来定义位置。例如,在一些实施例中,沿弧线的于其处使虚拟相机减慢的位置与沿弧线的虚拟相机所跳转或回弹回到的位置相同或者在其附近。

5.缩放期间的虚拟相机移动

另选地或者结合视角调节特征,一些实施例的地图绘制应用允许用户放大和缩小3d地图的视图(例如,通过用两个手指提供手势输入)。图85示出了由一些实施例的地图绘制应用提供的缩放调节特征。具体地,图85示出了在三个不同的阶段8501-8503的虚拟相机8512,所述三个不同的阶段示出了虚拟相机8512响应于缩放调节的移动。如图所示,图85示出了3d地图8510中的位置包括两个建筑物和形成丁字路口的两条道路。

在第一阶段8501中,用在特定位置处的指向3d地图8510的虚拟相机8512来显示3d地图8510。在该位置上,相机8512指向一位置,该位置可为设备的静止位置或正探索的位置的静止位置,或者可为在将地图用于导航的情况下在设备的移动位置前方的移动位置。基于虚拟相机8512的位置来渲染3d地图视图会得到3d地图视图8514。

第二阶段8502示出了在不同的缩放级别位置处的指向3d地图8510的虚拟相机8512。阶段8502示出了用户已通过使两个手指彼此靠近地触摸设备的屏幕并在手指正触摸屏幕的同时将手指移动分开(例如,展开手势)来提供输入以增加3d地图8510的视图的缩放级别。

放大调节是通过沿线8550移动虚拟相机8512更靠近3d地图8510来实现。在一些实施例中,地图绘制应用用来移动虚拟相机8512所沿的线8550是由虚拟相机8512的前部和虚拟相机8512的聚焦点形成的线。一些实施例的地图绘制应用基于用于放大3d地图8510的视图的用户输入来沿由虚拟相机8512的前部和3d地图8510中的位置形成的线移动虚拟相机8512。

在该位置处使用虚拟相机8512渲染3d地图视图会得到3d地图视图8524,其中建筑物和道路看起来比3d地图视图8514中所示的位置更近。如由虚拟相机8512的虚线型式所指示,虚拟相机8512沿线8550移动得更靠近3d地图8510。

第三阶段8503示出了在不同的缩放级别位置处的指向3d地图8510的虚拟相机8512。在该阶段8503中,用户已通过使两个手指彼此远离地触摸设备的屏幕并在手指正触摸屏幕的同时将手指移动得更靠近在一起(例如,捏合手势)来提供输入以降低3d地图8510的缩放级别。

缩小调节是通过沿线8555移动虚拟相机8512更远离3d地图8510来实现。在一些实施例中,地图绘制应用用来移动虚拟相机8512所沿的线8555是由虚拟相机8512的前部和虚拟相机8512的聚焦点形成的线。一些实施例的地图绘制应用基于用于放大3d地图8510的视图的用户输入来沿由虚拟相机8512的前部和3d地图8510中的位置形成的线移动虚拟相机8512。

在该位置处使用虚拟相机8512渲染3d地图视图会得到3d地图视图8534,其中建筑物和道路看起来比3d地图视图8524中所示的位置更远。如由虚拟相机8512的虚线型式所示,虚拟相机8512沿线8555移动得更远离3d地图8510。

如上所述,图85示出了若干示例性缩放调节操作以及虚拟相机在3d地图中的对应移动,所述对应移动用于渲染3d地图的3d地图视图。本领域的普通技术人员将认识到,任何数量的不同缩放调节是可能的。此外,一些实施例的地图绘制应用响应于附加类型和/或不同类型的输入(例如,触击屏幕、双触击屏幕等)而执行缩放调节操作。

图86概念性地示出了一些实施例的用于调节虚拟相机的位置的过程8600,该虚拟相机用于响应于缩放级别调节而渲染地图视图。在一些实施例中,在地图绘制应用处于地图查看模式(例如,位置浏览模式、导航模式等)中并且地图绘制应用通过地图绘制应用正于其上执行的设备的触摸屏接收到手势时,上文和下文参考图1-108描述的地图绘制应用执行过程8600。

过程8600以接收(在8610处)用于调节地图视图的缩放级别的手势开始。在一些实施例中,用于调节地图视图的缩放级别的手势包括通过触摸屏接收的多点触摸手势(例如,用多个手指同时触摸触摸屏),诸如上文参考图85所述的手势。在该实例中,过程8600接收双点触摸捏合或展开手势。

接下来,过程8600基于所接收的手势来确定(在8620处)缩放位置。在一些实施例中,缩放位置是地图中朝着其调节缩放级别(例如,针对放大调节)或者远离其调节缩放级别(例如,针对缩小调节)的位置。在一些实施例中,过程8600通过以下操作来确定缩放位置:(1)识别手势的初始两个触摸点的位置,以及(2)将沿着由两个触摸点的位置形成的线的中点识别为缩放位置。一些实施例的过程8600使用附加技术和/或不同的技术来确定缩放位置。例如,在一些实施例中,过程8600将地图视图的中心用作缩放位置。

然后过程8600基于所接收的手势来确定(在8630处)缩放量。一些实施例的过程8600基于以下线之间的长度差来确定缩放量:(1)由手势的初始两个触摸点的位置(例如,用户用两个手指触摸触摸屏的位置)形成的第一线以及(2)由手势的结束两个触摸点的位置(例如,用户将两个手指抬离触摸屏的位置)形成的第二线。在一些实施例中,在第二线的长度大于第一线的长度时过程8600确定正缩放量(例如,放大调节),而在第二线的长度小于第一线的长度时过程8600确定负缩放量(例如,缩小调节)。在第二线的长度与第一线的长度之间的差相等或在阈值长度量内时,一些实施例的过程8600确定缩放量为零(例如,无缩放调节)。在一些实施例中,过程8600使用附加技术和/或不同的技术来确定缩放量。

接下来,过程8600基于所识别的缩放位置和缩放量来调节(在8640处)地图视图的缩放级别。如上文参考图3-5和图74-80所述,在一些实施例中,使用虚拟相机来渲染地图视图。一些实施例的过程8600通过将虚拟相机的位置(1)沿由虚拟相机的前部和缩放位置形成的线并且(2)以基于缩放量的量移动来调节地图视图的缩放级别。

最后,过程8600基于地图视图的所调节的缩放级别来渲染(在8650处)用于显示的地图视图。然后过程8600结束。

6.旋转期间的虚拟相机移动

图87概念性地示出了根据本发明一些实施例的3d地图视图的旋转操作。具体地,图87示出了在两个不同的阶段8705和8710的旋转操作。在一些实施例中,地图绘制应用通过参考图90来执行下文所述的过程9000以执行旋转操作。

第一阶段8705示出了两条道路的对角线交叉口以及交叉口附近的三个建筑物的3d地图视图8715。如图所示,三个建筑物位于3d地图视图8715中对角线交叉口的顶部和侧部。第一阶段8705还示出了用户正执行用于旋转3d地图视图8715的手势。如图所示,用户已使用两个手指在触摸屏上触摸在3d地图视图8715的中心附近的两个位置并且已在顺时针方向上旋转这两个位置。

第二阶段8710示出了响应于第一阶段8705中所示的旋转手势的虚拟相机8700围绕3d地图8725的对应移动,所述对应移动用于渲染3d地图视图8715。在该实例中,在两条道路的交叉口附近或处接收到旋转手势。如图所示,地图绘制应用已通过围绕位于旋转手势的中心处或附近的z轴旋转虚拟相机8700,来将虚拟相机8700从3d地图8725的左侧朝着3d地图8725的底部移动。3d地图视图8720示出了在旋转虚拟相机8700之后3d地图8725的示例性渲染。如图所示,3d地图视图现在被旋转使得三个建筑物和道路响应于在第一阶段8705中所示的顺时针旋转手势而在顺时针方向上旋转。

虽然图87示出了在3d地图视图的中心附近或处执行的旋转手势,但旋转手势可在所显示的3d地图视图中任何位置处执行。在一些实施例中,地图绘制应用完全基于或部分地基于旋转手势的位置来旋转3d地图。例如,如果在3d地图视图的右上角执行旋转手势,则一些实施例的地图绘制应用围绕位于3d地图中对应于旋转手势位置的位置处或附近的z轴旋转虚拟相机。

在一些实施例中,地图绘制应用提供位置指示符特征,该位置指示符特征在激活时将3d地图视图重新位置在用户位置(例如,设备在3d地图中的位置)处。当继位置指示符特征的激活之后执行3d地图视图的旋转时,一些此类实施例的地图绘制应用以不同的方式执行3d地图视图的旋转。

图88概念性地示出了根据本发明一些实施例的在激活此类位置指示符特征之后3d地图视图的旋转操作。具体地,图88示出了在两个不同阶段8805和8810的旋转操作。

第一阶段8805示出了两条道路的对角线交叉口以及交叉口附近的三个建筑物的3d地图视图8815。如图所示,三个建筑物位于3d地图视图8815中对角线交叉口的顶部和侧部。第一阶段8805示出了在用户已激活位置指示符特征之后的3d地图视图,该位置指示符特征使地图绘制应用将3d地图视图重新位置在用户位置上,该用户位置在该实例中由圆圈表示。此外,第一阶段8805示出了用户正执行用于在3d地图视图8815的上部旋转3d地图视图8815的手势。如图所示,用户已使用两个手指在触摸屏上触摸在3d地图视图8815的上部中的两个位置并且已在顺时针方向上旋转这两个位置。

第二阶段8810示出了响应于第一阶段8805中所示的旋转手势的虚拟相机8800围绕3d地图8825的对应移动,所述对应移动用于渲染3d地图视图8815。在该实例中,在激活了位置指示符特征之后,在中间建筑物后方在3d地图视图8815的上部中接收旋转手势。

在一些实施例中,当在激活了位置指示符特征之后地图绘制应用接收到旋转手势时,地图绘制应用围绕用户位置旋转3d地图。一些实施例的地图绘制应用仅当在已激活位置指示符特征之后地图绘制应用接收到旋转手势并且地图绘制应用尚未接收到任何干预性非旋转手势时,才执行图88所示的旋转操作。在一些实施例中,地图绘制应用在激活了位置指示符特征之后执行图88所示的旋转操作一定义时间量然后恢复回到图87所示的旋转操作。

如在第二阶段8810中所示,地图绘制应用已通过围绕位于用户位置处或附近的z轴旋转虚拟相机8800来将虚拟相机8800从3d地图8825的左侧朝着3d地图8825的底部移动,所述用户位置由黑点指示且在两条道路的交叉口处。3d地图视图8820示出了在旋转虚拟相机8800之后3d地图8825的示例性渲染。如图所示,3d地图视图现在被旋转使得三个建筑物和道路响应于在第一阶段8805中所示的顺时针旋转手势而在顺时针方向上围绕用户位置旋转。

上述图87和图88示出了在于3d视角视图中查看3d地图的同时旋转3d地图。在一些实施例中,地图绘制应用还允许用户在于2d视角视图中查看3d地图的同时旋转3d地图。图89概念性地示出了根据本发明一些实施例的从3d地图的2d视角视图起的3d地图视图的旋转操作。具体地,图89示出了在三个不同的阶段8905-8915的连同旋转操作的惯性效果一起的旋转操作。在一些实施例中,地图绘制应用通过参考图90来执行下文所述的过程9000以执行旋转操作。

第一阶段8905示出了3d地图的3d地图视图8920。如图所示,3d地图视图8920包括在平行或垂直的方向上延伸的若干街道。第一阶段8905还示出了用户正提供用于旋转3d地图视图8920的输入。具体地,用户正通过使两个手指触摸触摸屏上的两个位置并且如两个箭头所示在顺时针方向上旋转两个手指来执行用于旋转3d地图视图8920的手势。

第二阶段8910示出了紧接用户已完成用于旋转3d地图的输入之后的3d地图。对于该实例而言,用户已通过将两个手指抬离设备的触摸屏来完成输入。此外,第二阶段8910示出了由地图绘制应用渲染的3d地图的3d地图视图8925。如图所示,地图绘制应用已在顺时针方向上将3d地图从3d地图视图8920旋转至3d地图视图8925。第一阶段8905中所示的街道已在顺时针方向上旋转了大约45度。

不同实施例的地图绘制应用使用不同的方法来实现旋转操作的惯性效果。例如,在一些实施例中,地图绘制应用基于其中一个手指或两个手指的平均值来确定在用户将手指抬离触摸屏的时间实例或在靠近该时间实例时用户输入的角速度。地图绘制应用使用该角速度来确定惯性效果的角度量并确定用于查看3d地图的虚拟相机使角速度减速(例如,恒定、指数级、对数级等)以旋转所确定的角度量的方式。在一些实施例中,地图绘制应用渲染并显示惯性效果的动画(例如,3d地图的从将3d地图旋转所确定的角度量的3d地图视图8925起的减速旋转)。一些实施例的地图绘制应用不实现惯性效果。相反,由地图绘制应用所操作的操作系统的框架来实现惯性效果。

第三阶段8915示出了在地图绘制应用已渲染并显示惯性效果的动画之后的3d地图。如图所示,显示了由地图绘制应用渲染的3d地图的3d地图视图8930。在第三阶段8915中,在用户完成第二阶段8910中的输入之后,地图绘制应用已进一步顺时针旋转3d地图。如图所示,第三阶段8915中的3d地图视图8930示出了从3d地图视图8925中所示的街道起进一步顺时针旋转的街道。

图90概念性地示出了一些实施例的用于基于手势输入旋转地图视图的过程9000。在一些实施例中,在地图绘制应用处于地图查看模式(例如,位置浏览模式、导航模式、2d查看模式、3d查看模式等)中并且地图绘制应用通过地图绘制应用正于其上执行的设备的触摸屏接收到手势时,地图绘制应用执行过程9000。

过程9000以接收(在9010处)用于旋转地图视图的手势开始。在一些实施例中,用于旋转地图视图的手势包括通过触摸屏接收的多点触摸手势(例如,用多个手指同时触摸触摸屏)。在该实例中,过程9000接收双点触摸旋转手势。

接下来,过程9000识别(在9020处)所接收手势的旋转分量。一些实施例的过程9000通过识别手势的触摸点的旋转量来识别手势的旋转分量。例如,在一些此类实施例中,过程9000通过以下操作来识别手势的触摸点的旋转量:(1)确定从一个触摸点的初始位置到另一个触摸点的初始位置的第一矢量,(2)确定从所述一个触摸点的第二位置到所述另一个触摸点的第二位置的第二矢量,以及(3)基于触摸点的初始位置和触摸点的第二位置来确定旋转方向。

过程9000然后确定(在9030处)旋转量是否在阈值量内。在过程9000确定旋转量不在阈值量内时,过程9000结束。否则,过程9000基于手势确定(在9040处)旋转轴。在一些实施例中,过程9000通过以下操作来确定旋转轴:(1)沿从一个触摸点的初始位置到另一个触摸点的初始位置的矢量识别一点,以及(2)在地图视图上确定与沿该矢量的该点对应的点(例如,地图上的与沿该矢量的该点重合的点)。过程9000将地图视图上的所确定的点用作地图视图围绕其旋转的轴(例如,z轴)的位置。

接下来,过程9000随后基于旋转轴和旋转量来调节(在9050处)地图视图。在一些实施例中,过程9000通过将地图视图围绕所确定的旋转轴在所确定的旋转方向上旋转所确定的旋转量来调节地图视图。不同的实施例使用地图的不同坐标空间。例如,一些实施例的地图使用墨卡托单位坐标空间。在此类实施例中,过程9000相对于地图来调节虚拟相机的位置以调节地图视图。又如,在一些实施例中,地图将世界测地系统(例如,wgs84)用作地图的坐标空间。在此类实施例中,过程9000相对于虚拟相机的位置来调节地图以调节地图视图。

最后,过程9000渲染(在9060处)所调节的地图视图以用于在设备上显示。在一些实施例中,所渲染的地图视图是表示所调节的地图视图的图像。然后过程9000结束。

上文所述的图87-90示出了对3d地图执行的旋转操作的各种实例。在一些实施例中,可以缩放级别的定义范围和/或集合来旋转3d地图。例如,在一些实施例中,地图绘制应用允许3d地图在定义数量的最高缩放级别(例如,缩放级别10-20)下旋转并防止3d地图在其余更低的缩放级别(例如,缩放级别1-10)下旋转。在一些此类实施例中,当地图绘制应用接收到在被定义为不允许旋转操作的缩放级别下旋转3d地图的输入时,地图绘制应用不生成旋转3d地图的指令。在其他此类实施例中,当地图绘制应用接收到在被定义为不允许旋转操作的缩放级别下旋转3d地图的输入时,地图绘制应用生成旋转3d地图的指令,但是地图绘制应用只是忽略所述指令。本领域的普通技术人员将认识到,在不同实施例中,可以任意数量的不同方式来定义允许对3d地图执行旋转操作的缩放级别。

b.沉浸式和非沉浸式查看模式

上文和下文所述的许多图示出了提供逐向导航特征的地图绘制应用。在一些实施例中,地图绘制应用为此类导航特征提供若干查看模式。例如,一些实施例的地图绘制应用提供沉浸式查看模式和非沉浸式查看模式。在一些实施例中,这两种查看模式用于查看相同地理区域的不同3d地图。即,可使用沉浸式查看模式查看的一个3d地图和可使用非沉浸式查看模式查看的另一个3d地图是相同地理区域的3d地图。然而,一些实施例的沉浸式和非沉浸式查看模式不限于逐向导航特征。例如,在地图浏览模式中(即,在不使用导航时),沉浸式和非沉浸式查看模式两者均可用。此外,一些实施例针对逐向导航模式使用沉浸式查看模式并针对地图浏览模式使用非沉浸式查看模式。

在一些实施例中,非沉浸式和沉浸式查看模式是用于查看具有不同构造和/或几何结构的不同3d地图的查看模式。例如,一些实施例的非沉浸式查看模式用于查看由建筑物图块和道路图块描述的3d地图。在一些实施例中,建筑物图块针对位于建筑物图块所表示的3d地图的区域中的每个建筑物包含多边形数据(例如,建筑物的覆盖区的多边形以及建筑物的高度值)。在一些实施例中,道路图块存储与位于道路图块所表示的3d地图的区域中的各条道路和土地有关的信息。在一些实施例中,道路由表示道路中心(例如,中心线)的道路矢量定义,且土地由多边形数据定义。

一些实施例的沉浸式查看模式用于查看由建筑物图块和导航图块描述的3d地图。在一些实施例中,用于非沉浸式查看模式的相同建筑物图块被用于沉浸式查看模式,而在一些实施例中,用于沉浸式查看模式的建筑物图块是不同的(例如,沉浸式建筑物图块包括建筑物的更高分辨率多边形数据)。

在一些实施例中,导航图块包括道路的多边形数据以及土地的多边形数据。通过使用多边形数据来定义道路,可更充分地定义导航图块。例如,道路看起来是3d的和/或看起来像柏油,可沿着街道两边定义路缘,可为立交桥和桥梁指定阴影,等等。然而,在一些实施例中,较之于道路图块,导航图块需要更多信息来描述道路。

在一些实施例中,使用在下文更详细地描述的样式表数据来指定3d地图中构造(例如,建筑物、街道、公路、土地覆盖物、树叶、标签、阴影、道路路缘等)的外观。例如,样式表数据可指定应用于不同构造的纹理、应用于构造的纹理的颜色,等等。在一些实施例中,样式表数据用于指定道路的纹理以便让道路看起来像柏油。

如上所述,在一些实施例中,两个查看模式均使用相同的建筑物图块来针对查看模式渲染建筑物。在一些实施例中,样式表数据定义不同查看模式中建筑物的不同样式(例如,不同的纹理、颜色、细节水平等)。例如,在一些实施例中,非沉浸式查看模式中的建筑物的样式被设计为灰色,并且城市街区的轮廓具有尖锐的拐角。一些实施例的沉浸式查看模式中的相同建筑物的样式被设计为浅灰色或白色,并且城市街区的轮廓具有圆拐角。在一些实施例中,可针对不同的查看模式,以不同方式设计附加构造和/或不同构造的样式。例如,一些实施例为不同查看模式中的相同建筑物指定不同纹理。

此外,样式表数据可为在不同缩放级别下的3d地图中的相同或类似元件指定不同样式。例如,一些实施例为低缩放级别下的建筑物指定简单的纹理,因为这些建筑物更远并且细节可能难以注意到或可能根本就是不明显的。针对更高的缩放级别,一些实施例为建筑物指定更详细的样式,诸如建筑物屋顶的定义形状(与所有建筑物的平屋顶相反)。

此外,非沉浸式和沉浸式查看模式可被定义用于查看在缩放级别的不同范围下的3d地图。例如,一些实施例的非沉浸式查看模式被定义用于查看在缩放级别0-14下的3d地图,而一些实施例的沉浸式查看模式被定义用于查看在缩放级别15-21下的3d地图。在不同实施例中,查看模式可被定义用于查看任意数量的不同缩放级别。在一些情况下,将沉浸式查看模式的缩放级别的范围定义为比为非沉浸式查看模式定义的缩放级别更高的缩放级别、比为非沉浸式查看模式定义的缩放级别更低的缩放级别、与为非沉浸式查看模式定义的缩放级别相同的缩放级别或者与为非沉浸式查看模式定义的缩放级别重叠的缩放级别。例如,在一些实施例中,非沉浸式查看模式被定义用于在所有缩放级别(例如,缩放级别0-21)下查看,而沉浸式查看模式被定义用于高缩放级别的子集(例如,缩放级别15-21)。

在一些实施例中,缩放级别是与3d地图相距的距离的定义范围。例如,可将第一缩放级别定义为沿z轴与3d地图相距的6-10个距离单位(例如,英尺、码、米等),可将第二缩放级别定义为沿z轴与3d地图相距的11-15个距离单位,可将第三缩放级别定义为沿z轴与3d地图相距的16-20个距离单位等等。本领域普通技术人员将认识到,可使用任意数量的不同距离单位来将缩放级别定义为包括任意数量的不同距离范围。在一些实施例中,缩放级别是与2d地图(例如,3d地图的2d型式)相距的距离的定义范围。

在一些实施例中,地图服务提供方(例如,地图服务器)针对不同的缩放级别生成并提供3d地图的3d地图图块的不同集合。例如,地图服务提供方生成针对缩放级别0的3d地图图块集合、针对缩放级别1的3d地图图块集合、针对缩放级别2的3d地图图块集合等等(例如,针对非沉浸式查看模式)。在一些实施例中,地图服务提供方仅生成3d地图的一个3d地图图块集合(例如,针对沉浸式查看模式)。一些此类实施例的地图绘制应用通过修改(例如,按比例放大和/或缩小)3d地图图块中的数据(例如,顶点、多边形等)来在不同缩放级别下渲染3d地图的3d地图视图。

在一些实施例中,地图服务提供方针对不同缩放级别生成的3d地图图块的不同集合具有不同的细节水平。例如,针对最高缩放级别生成的3d地图图块集合包括高分辨率3d构造(例如,这些3d构造包括更多顶点)以更准确地表示这些构造。针对最低缩放级别生成的3d地图图块集合包括低分辨率3d构造(例如,这些3d构造图块包括更少顶点),因为将从远距离来渲染3d。在此类远距离处,包括在更高分辨率3d地图图块中的任何附加细节都是不明显的。

一些实施例的非沉浸式和沉浸式查看模式的构造和/或几何结构在3d地图图块的不同集合中单独地定义。3d地图图块的不同集合由地图服务提供方基于地图服务提供方所生成或者从3d地图数据提供方所导入的3d地图生成。一些实施例的地图绘制应用使用不同的3d地图图块来针对3d地图的不同查看模式渲染3d地图视图。在一些情况下,地图服务提供方针对相同查看模式生成多个3d地图图块集合。例如,在一些实施例中,地图服务提供方针对非沉浸式查看模式生成3d建筑物图块集合和3d道路图块集合。针对沉浸式查看模式,一些实施例的地图服务提供方生成3d建筑物图块集合(和/或用于非沉浸式查看模式的相同3d建筑物图块集合)和3d导航图块集合。

图91概念性地示出了地图绘制应用9100的实例,该地图绘制应用针对不同查看模式的不同缩放级别渲染3d地图视图。如该实例所示,非沉浸式查看模式被定义用于查看在缩放级别1到n-1下的3d地图,而沉浸式查看模式被定义用于查看在缩放级别n到n+m下的3d地图。在一些实施例中,应用9100实现上文和下文参考图1-108描述的地图绘制应用的一部分或全部。如图所示,图91包括地图绘制应用9100、地图服务提供方9110、3d地图图块集合9120以及3d地图视图集合9130。

如上所述,在一些实施例中,地图服务提供方(例如,地图服务器)针对不同的缩放级别生成并提供3d地图的3d地图图块的不同集合。如所示,地图服务提供方9110针对缩放级别1-n中的每一者生成并提供3d地图图块9120的集合。在一些实施例中,由下文参考图108更详细地描述的地图服务来实现地图服务提供方9110。地图绘制应用9100基于从地图服务提供方9110接收的3d地图图块来生成3d地图视图9130。

一些实施例的地图绘制应用9100基于针对特定缩放级别定义的3d地图图块来生成该特定缩放级别下的3d地图视图。例如,如图91所示,地图绘制应用9100使用针对缩放级别1定义的3d地图图块集合9120来为非沉浸式查看模式生成缩放级别1下的3d地图视图集合9130。类似地,地图绘制应用9100通过针对对应缩放级别定义的3d地图图块9130的集合来为非沉浸式和沉浸式查看模式生成其他缩放级别下的3d地图视图9130的集合。

在一些实施例中,地图绘制应用9100基于针对单个缩放级别定义的3d地图图块来生成针对若干缩放级别的3d地图视图。如该实例所示,地图绘制应用9100使用针对缩放级别n定义的3d地图图块集合9120来为沉浸式查看模式生成缩放级别n到n+m下的3d地图图块集合9120。一些实施例的地图绘制应用9100通过修改(例如,按比例放大和/或缩小)针对缩放级别n定义的3d地图图块的数据(例如,3d构造)来生成n+1到n+m缩放级别下的3d地图视图。

如图91所示,地图绘制应用9100基于针对特定缩放级别定义的3d地图图块来生成该特定缩放级别下的用于非沉浸式查看模式的3d地图视图,而地图绘制应用9100基于针对特定缩放级别定义的3d地图图块来生成该特定缩放级别下的用于沉浸式查看模式的3d地图视图。虽然图91示出了基于针对特定缩放级别的3d地图图块集合来为沉浸式查看模式生成多个不同缩放级别下的3d地图视图的地图绘制应用,在一些实施例中,地图绘制应用为非沉浸式查看模式生成附加缩放级别。

此外,图91示出了存储在地图服务提供方9110的单个存储装置上的3d地图图块集合9120。在一些实施例中,3d地图图块9120的不同集合存储在不同存储装置中。例如,可将非沉浸式查看模式的一些3d地图图块9120(在该实例中,来自缩放级别1到n-1中每一者的一些3d地图图块9120)存储在第一存储装置(例如,3d道路图块存储装置)中,并且将沉浸式查看模式的一些3d地图图块9120(例如,来自缩放级别n的一些3d地图图块9120)存储在第二存储装置(例如,3d导航图块存储装置)中。在一些实施例中,将一些3d地图图块(例如,来自缩放级别1到n中每一者的一些3d地图图块)存储在另一个存储装置(例如,3d建筑物图块存储装置)中。

图92示出了在三个不同的阶段9205-9215的虚拟相机9200的围绕3d地图9235的区域的移动。具体地,3d地图9235为被定义为由一些实施例的沉浸式查看模式查看的示例性3d地图。如上所指出,在一些实施例中,地图绘制应用从其检索图块的地图服务提供方仅提供特定缩放级别(例如,缩放级别15)下的3d地图9235的一个3d地图图块集合。为基于这些3d地图图块来渲染更高级别的缩放级别(例如,缩放级别16-21),一些此类实施例的地图绘制应用通过修改(例如,按比例放大和/或缩小)3d地图图块中的数据(例如,顶点、多边形等)来在不同缩放级别下渲染3d地图视图。如图所示,3d地图9235的区域包括两个建筑物以及邻接另一条道路的道路。

第一阶段9205示出了在3d地图9235中的特位置置和位置处的虚拟相机9200。在一些实施例中,虚拟相机9200在3d地图9235中正聚焦的点(即,从虚拟相机前方投射出的线与道路相交的点)被称为聚焦点。在第一阶段9205中,虚拟相机9200的聚焦点靠近由两条道路形成的交叉口。在该阶段9205中,以虚拟相机9200的视角的3d地图9235的示例性渲染图像在3d地图视图9220中示出。如图所示,3d地图9235的3d地图视图9220包括详细的构造,如树木、车道标志物、柏油(在该实例中由道路的泛灰色表示)。

第二阶段9210示出了在3d地图9235中的不同位置和位置处的虚拟相机9200。如在第二阶段9210中所示,地图绘制应用已将虚拟相机9200向下并朝着3d地图9235的左侧移动。对于该实例而言,地图绘制应用已响应于用于放大3d地图9235的输入(例如,手势输入,诸如捏合手势或双触击手势)而移动虚拟相机9200。从第一阶段9205到第二阶段9210,地图绘制应用以所描述的方式自动地移动了虚拟相机9200以便放大3d地图9235。在第二阶段9210中,以虚拟相机9200的视角的3d地图9235的示例性渲染图像在3d地图视图9225中示出。3d地图视图9225示出了,相比第一阶段9205中所示的那些,建筑物和树木更大且更高并且道路和车道标志物更宽。

第三阶段9215示出了在3d地图9235中的另一不同位置和位置处的虚拟相机9200。在该阶段9215处,地图绘制应用已从第二阶段9210中所示的虚拟相机9200的位置将虚拟相机9200进一步向下并朝着3d地图9235的左侧移动。继续上述实例,地图绘制应用已响应于用于放大3d地图9235的输入(例如,手势输入,诸如捏合手势或双触击手势)而移动虚拟相机9200。在第二阶段9210与第三阶段9215之间,地图绘制应用以所描述的方式自动地移动了虚拟相机9200以便放大3d地图9235。在该阶段9215中,以虚拟相机9200的视角的3d地图9235的示例性渲染图像在3d地图视图9230中示出。如在3d地图视图9230中所示,相比第二阶段9210中所示的那些,建筑物和树木更大且更高并且道路和车道标志物更宽。

图93示出了在三个不同的阶段9305-9315的虚拟相机9300的围绕3d地图9335和3d地图9340的区域的移动。具体地,3d地图9335类似于上文参考图92描述的3d地图9235。在该实例中,3d地图9340是与3d地图9335相同的地理区域的3d地图,但被定义为由一些实施例的非沉浸式查看模式查看。如此,3d地图9340的区域类似地包括两个建筑物以及邻接另一条道路的道路。

第一阶段9305示出了在3d地图9335中的特位置置和位置处的虚拟相机9300。在一些实施例中,虚拟相机9300在3d地图9335中正聚焦的点(即,从虚拟相机前方投射出的线与道路相交的点)被称为聚焦点。在第一阶段9305中,虚拟相机9300的聚焦点靠近由两条道路形成的交叉口。在该阶段9305中,以虚拟相机9300的视角的3d地图9335的示例性渲染图像在3d地图视图9320中示出。如图所示,3d地图9335的3d地图视图9320包括详细的构造,如树木、车道标志物、柏油(在该实例中由道路的泛灰色表示)。

第二阶段9310示出了在3d地图9335中的不同位置和位置处的虚拟相机9300。如第二阶段9310中所示,地图绘制应用已将虚拟相机9300向上并朝着3d地图9335的右侧移动。对于该实例而言,地图绘制应用已响应于用于从3d地图9335缩小的输入(例如,手势输入,诸如展开手势或双点触摸触击手势)而移动虚拟相机9300。从第一阶段9305到第二阶段9310,地图绘制应用以所描述的方式自动地移动了虚拟相机9300以便缩小3d地图9335。在第二阶段9310中,以虚拟相机9300的视角的3d地图9335的示例性渲染图像在3d地图视图9325中示出。3d地图视图9325示出了,相比第一阶段9305中所示的那些,建筑物和树木更小且更短并且道路和车道标志物更窄。

第三阶段9315示出了在3d地图9235中的另一不同位置和位置处的虚拟相机9300。在该阶段9215处,地图绘制应用已从沉浸式查看模式切换至非沉浸式查看模式。在一些实施例中,特定缩放级别被定义为沉浸式查看模式与非沉浸式查看模式之间的过渡点。例如,一些实施例的地图绘制应用使用沉浸式查看模式来查看缩放级别15-21下的3d地图的区域并使用非沉浸式查看模式来查看缩放级别0-14下的3d地图的区域。因此,在地图绘制应用接收到用于从缩放级别15缩放至缩放级别14的输入时,地图绘制应用自动地从沉浸式查看模式切换至非沉浸式查看模式。类似地,在地图绘制应用接收到用于从缩放级别14缩放至缩放级别15的输入时,地图绘制应用自动地从非沉浸式查看模式切换至沉浸式查看模式。不同实施例可以不同的方式定义在两个缩放级别之间切换的缩放级别。

此外,一些实施例不基于缩放级别来在沉浸式和非沉浸式查看模式之间切换。例如,不同实施例针对逐向导航使用沉浸式查看模式并针对地图浏览使用非沉浸式查看模式,或者包括允许用户在非沉浸式查看模式与沉浸式查看模式之间切换的ui控件。

图94概念性地示出了地图绘制应用9400的实例,该地图绘制应用针对不同查看模式的不同缩放级别渲染3d地图视图。如该实例所示,非沉浸式查看模式被定义用于查看在缩放级别1到x下的3d地图,而沉浸式查看模式被定义用于查看在缩放级别x-k到x下的3d地图。因此,应用可在沉浸式或非沉浸式模式中显示缩放级别x-k到x下的地图。如图所示,图94包括地图绘制应用9400和地图服务提供方9410,它们的功能类似于上文参考图91描述的功能(即,地图服务提供方9410生成并提供地图图块9420,并且地图绘制应用通过使用这些图块来渲染地图视图9430)。

在这种情况下,如图91所示,地图服务提供方9410针对每个非沉浸式缩放级别生成并提供3d地图图块9420的不同集合,并同时针对沉浸式查看模式仅生成并提供3d地图图块9420的单个集合。地图绘制应用9400使用缩放级别x-k地图图块来生成针对缩放级别x-k到x的地图视图。在一些实施例中,地图绘制应用当在地图浏览、路线显示、路线检查和自动步进模式中时使用非沉浸式3d地图图块来生成地图视图,并且当在逐向导航模式中时使用沉浸式3d地图图块来生成地图视图。下文参考图105a和图105b更详细地描述了这些模式。

在图93的上述实例中,地图绘制应用接收用于从针对沉浸式查看模式定义的缩放级别缩小至针对非沉浸式查看模式的另一缩放级别的输入。如此,地图绘制应用执行预加载操作以准备渲染3d地图9340的针对非沉浸式查看模式定义的3d地图视图。下文参考图97、95和102描述了预加载操作的实例。

在预加载操作之后,地图绘制应用已将虚拟相机9300进一步向上并朝着3d地图9335的右侧从第二阶段9310中所示的位置移动至一相对位置。继续上述实例,地图绘制应用已响应于用于放大3d地图9335的输入(例如,手势输入,诸如捏合手势或双触击手势)而移动虚拟相机9300。在第二阶段9310与第三阶段9315之间,地图绘制应用以所描述的方式自动地预加载3d地图9340并移动虚拟相机9300以便缩小3d地图9335。在该阶段9315中,以虚拟相机9300的视角的3d地图9335的示例性渲染图像在3d地图视图9330中示出。如图所示,3d地图视图9330包含相同的建筑物和道路,但不包含3d地图视图9320和9325中所示的任何构造和/或细节,因为地图绘制应用现在正渲染来自3d地图9340的用于更不详细的非沉浸式查看模式的3d地图视图。

如图92和93所示,沉浸式查看模式和非沉浸式查看模式基于区域查看的缩放级别来提供3d地图的区域的不同细节水平。在一些实施例中,地图绘制应用针对不同缩放级别下的建筑物渲染不同纹理。例如,一些实施例的地图绘制应用针对沉浸式查看模式中的建筑物渲染更详细的纹理(例如,颜色、图案等)并且针对非沉浸式查看模式中的相同建筑物渲染更简单的纹理(例如,纯色等)。在一些实施例中,地图绘制应用针对沉浸式查看模式中不同缩放级别下的相同建筑物渲染不同纹理。此外,或结合基于不同缩放级别为建筑物渲染不同纹理,一些实施例的地图绘制应用还基于其他因素(例如,日期时间、地理区域、一年中的季节、假日等)来为建筑物渲染不同纹理。

图95概念性地示出了一些实施例的地图绘制应用的处理流水线9500,该处理流水线用于基于不同的3d地图图块9540-9550来渲染3d地图视图9560。如图所示,处理流水线9500包括地图渲染引擎9510、虚拟相机模块9520、网格构建器9530、图块处理器9570、3d地图图块的三个不同的存储装置9540-9550以及样式表存储装置9555。在一些实施例中,导航图块存储装置9540存储用于沉浸式查看模式的3d地图图块(还称为导航图块),并且道路图块(还称为道路图块)存储装置9545存储用于非沉浸式查看模式的3d地图图块。一些实施例的建筑物图块存储装置9550存储用于沉浸式和非沉浸式查看模式两者的3d地图图块(还称为建筑物图块)。样式表存储装置9555存储用于渲染3d地图视图9560的纹理的定义以及用于渲染3d地图视图9560的其他样式设计信息。

虚拟相机9520识别从其查看3d地图的位置和取向(例如,视角位置、缩放级别等)。虚拟相机9520将3d地图的视场(还称为视图截锥)发送至图块处理器9570以供处理。

图块处理器9570从虚拟相机9520接收3d地图的视场。在一些实施例中,图块处理器9570在向网格构建器9530发送“空的”虚拟3d地图图块之前,对3d地图视图执行任何必要的剔选(例如,移除太远的表面区域、移除将完全在其他对象后方的对象,等等)。一些实施例的图块处理器9570从网格构建器9530接收“已构建的”虚拟3d地图图块并将它们发送至地图渲染引擎9510以供渲染。在一些实施例中,图块处理器9570由下文参考图98和102描述的控制器和图块提供器实现。

在一些实施例中,网格构建器9530为图块处理器9570准备虚拟3d地图图块。网格构建器9530基于将要针对3d地图的视场而渲染的查看模式来请求来自3d地图图块存储装置9540-9550的3d地图图块(例如,已解压的3d地图图块)。例如,在查看模式为沉浸式查看模式时,一些实施例的网格构建器9530请求来自存储装置9540的导航地图图块以及来自存储装置9550的建筑物图块。在一些实施例中,网格构建器9530请求来自存储装置9545的道路图块以及来自存储装置9550的建筑物图块。

一旦网格构建器9530接收到地图图块,网格构建器9530便使用这些图块中存储的矢量数据来构建多边形网格。网格构建器9530还基于从样式表存储装置9555检索的样式设计信息来提供纹理信息。在一些实施例中,网格构建器9530在逐个图块的基础上构建多边形网格并发送虚拟3d地图图块,所述虚拟3d地图图块在一些实施例中是由网格构建器9530从图块处理器9570接收的虚拟3d地图图块的多边形网格型式。

地图渲染引擎9510负责基于从虚拟相机9520接收的视场来生成绘图(例如,3d地图的3d地图视图)以输出至显示设备。下文参考图98和图102进一步详细地描述了网格构建器9530、虚拟相机9520、图块处理器9570和地图渲染引擎9510的附加细节。

现在将描述处理流水线9500的示例性操作。虚拟相机9520识别虚拟相机9520从其查看3d地图的位置和取向。虚拟相机9520基于所识别的位置和取向向图块处理器9570发送3d地图的视场。

在图块处理器9570接收到视场时,一些实施例的图块处理器9570剔选视场。图块处理器9570然后将虚拟地图图块发送至网格构建器9530以供处理。

当地图绘制应用在沉浸式查看模式中生成3d地图视图时,网格构建器9530从导航图块存储装置9540检索导航图块并从建筑物图块存储装置9550检索建筑物图块。然而,当地图绘制应用在非沉浸式查看模式中生成3d地图视图时,网格构建器9530反而从道路图块存储装置9545检索道路图块并从建筑物图块存储装置9550检索建筑物图块。即,处理流水线9500使用3d地图图块的不同集合来在这些不同查看模式中渲染3d地图视图。

在一些实施例中,将3d地图图块在存储装置9540中高速缓存一时间段。因此,在一些此类实施例中,如果在存储装置9540中3d地图图块不可用,则从地图服务检索所需的3d地图图块。

一旦网格构建器9530具有所有合适的3d地图图块,网格构建器9530便基于3d地图图块中的矢量数据来构建多边形网格。网格构建器9530然后将3d地图图块的虚拟地图图块型式发送至图块处理器9570。

在图块处理器9570从网格构建器9530接收虚拟地图图块时,图块处理器9570将它们发送至地图渲染引擎9510以供渲染。地图渲染引擎9510从图块处理器9570接收虚拟地图图块并基于虚拟地图图块来渲染3d地图视图9560。

上文和下文的对若干图(例如,图95、98和102)的描述讨论了用于渲染3d地图的3d地图视图的处理流水线。在一些实施例中,处理流水线生成并存储用于渲染地图视图的数据结构。图96概念性地示出了由一些实施例的处理流水线使用的数据结构9600。

如图所示,数据结构9600包括虚拟相机id9605、虚拟相机位置数据9610、查看模式9615、3d地图图块9620、样式表数据9625、3d地图图块高速缓存9630、虚拟地图图块9635、3d地图视图9640以及其他数据9645。

虚拟相机id9605是用于识别用于渲染3d地图视图的虚拟相机的唯一标识符。如上文和下文所述,一些实施例的处理流水线将若干虚拟相机实例化以用于识别3d地图的视图。如图96所示,虚拟相机9650的集合可供处理流水线使用。在该实例中,虚拟相机id9605正识别供处理流水线用于渲染3d地图视图的虚拟相机2。

虚拟相机位置数据9610存储与由虚拟相机id9605识别的虚拟相机的位置有关的信息。此类信息的实例包括虚拟相机的坐标(例如,x、y和z坐标)、虚拟相机的平移角度、虚拟相机的倾斜角度、虚拟相机的滚转角度、虚拟相机缩放级别等。

查看模式9615是指示渲染3d地图视图的查看模式的数据。例如,查看模式9615可能存储指示非沉浸式查看模式、沉浸式查看模式、卫星查看模式、混合查看模式等的数据。

3d地图图块9620是表示3d地图的从其渲染3d地图的部分的3d地图图块的集合。一些实施例的处理流水线使用虚拟相机位置数据9610和查看模式9615来识别该部分并检索对应的3d地图图块。

样式表数据9625包含处理流水线用于构建网格的样式设计信息。在一些实施例中,处理流水线使用样式表数据9625来确定纹理数据、阴影数据、三角测量数据等。

3d地图图块高速缓存9630用于对3d地图图块进行高速缓存。在一些实施例中,处理流水线对近期使用的3d地图图块、经常使用的3d地图图块、处理流水线确定可能在不久的将来使用的3d地图图块等等进行高速缓存。

虚拟地图图块9635存储包括已构建的地图构造的地图图块。如图所示,虚拟地图图块包括建筑物构造、道路/导航构造、标签构造、土地覆盖物构造以及其他构造。具体地,一些实施例的虚拟地图图块9635当将要在非沉浸式查看模式中渲染3d地图视图时存储包括道路构造的地图图块,并且当将要在沉浸式查看模式中渲染3d地图视图时存储包括导航构造的地图图块。

3d地图视图9640包含处理流水线基于一些实施例的地图绘制应用所显示的数据结构9600中的各种信息而渲染的3d地图视图。其他数据9645存储处理流水线在一些实施例中为渲染3d地图视图而可能需要的信息(例如,将要使用的网格构建器的数量、将要使用的图块提供器的数量等等)。

本领域的普通技术人员将认识到,数据结构9600是一些实施例的处理流水线为存储所需信息以渲染3d地图视图而使用的仅一个可能的数据结构。例如,不同实施例可能存储附加或更少的信息,以不同顺序存储信息,使用不同结构来存储数据,等等。

图97概念性地示出了一些实施例的地图绘制应用的状态图9700。如图所示,状态图9700包括当地图绘制应用在路线导航期间在第一查看模式与第二查看模式之间切换时地图绘制应用的状态9710-9770。在一些实施例中,第一和第二查看模式为非沉浸式查看模式和沉浸式查看模式。一些实施例的第一和第二查看模式用于查看相同地理区域的不同3d地图。即,使用第一查看模式查看的第一3d地图和使用第二查看模式查看的第二3d地图均用于查看相同地理区域。

在状态9710下,地图绘制应用在第一地图查看模式中渲染3d地图视图。在一些实施例中,在地图绘制应用进入导航模式(例如,通过选择用于发起路线导航的ui项)时,地图绘制应用进入状态9710。对于该实例而言,在地图绘制应用进入状态9710时,地图绘制应用使用第一虚拟相机来查看第一3d地图并针对非沉浸式查看模式中的地图查看模式来渲染3d地图视图。

在状态9710下,一些实施例的地图绘制应用接收各种命令(例如,缩放命令、平移命令、旋转命令、倾斜命令等)以围绕第一3d地图移动虚拟相机并基于虚拟相机在第一3d地图中的位置来渲染3d地图视图。在虚拟相机围绕第一3d地图移动时,当虚拟相机对着第一3d地图的区域时,地图绘制应用从地图服务检索图块,其中地图绘制应用不具有与所述区域有关的数据。

在状态9710下,如果地图绘制应用确定向第二查看模式的过渡是可能的,则地图绘制应用过渡至状态9720以针对第二查看模式执行预加载操作以便提供从第一查看模式到第二查看模式的平滑过渡(例如,以防止当在模式之间过渡时的任何停顿或延迟)。在该实例中,第二查看模式是沉浸式查看模式。一些实施例的地图绘制应用基于任意数量的不同因素来确定过渡至第二查看模式是可能的。此类因素的一个实例包括虚拟相机在查看第一3d地图时的缩放级别。例如,如果地图视图的所识别的缩放级别是道路显示为黄色标线的缩放级别(例如,非沉浸式或标准查看模式),并且该缩放级别在来自为在非沉浸式模式与沉浸式模式之间过渡而定义的缩放级别的缩放级别阈值量内,则地图绘制应用确定向第二查看模式的过渡是可能的。地图绘制应用考虑的附加和/或其他因素包括指示向第二查看模式的过渡是可能的启发的集合。

在状态9720下,地图绘制应用为地图绘制应用针对第二查看模式生成的第二加载器下载数据。在一些实施例中,数据包括第二查看模式所需的3d地图图块和样式设计信息(例如,样式表)(例如,包括用户位置周围并且沿路线导航的区域的3d地图图块)。加载器加载与第二3d地图相关的数据。此外,地图绘制应用生成第二虚拟相机以用于查看第二3d地图并生成第二3d地图的3d地图视图。在生成第二虚拟相机和加载器并且下载数据之后,地图绘制应用过渡至状态9730。

在地图绘制应用过渡至状态9730时,地图绘制应用对用于第二3d地图的3d地图图块进行解码。在一些实施例中,对数据解码还包括针对第二3d地图中的几何结构创建网格,检索样式设计信息,将样式设计信息与所生成的网格相关联以及确定网格的绘制顺序。在一些实施例中,在对所下载的数据进行解码时,地图绘制应用执行附加和/或其他操作。一旦地图绘制应用对数据解码,地图绘制应用便过渡至状态9740。

在状态9740下,地图绘制应用使用第二虚拟相机来准备渲染引擎以渲染第二3d地图的3d地图视图。为准备渲染引擎,一些实施例的地图绘制应用生成纹理预处理器,预编译渲染着色器,针对附近的几何结构构建样式设计信息,生成样式资源,基于样式设计信息生成纹理以及创建几何结构所需的任何资源。例如,如果在用户位置附近有公园,则过程9700确定与公园相关的样式设计信息然后生成对公园进行样式设计所必需的任何及所有资源。在准备渲染引擎之后,地图绘制应用过渡至状态9750。

在状态9750下,地图绘制应用使用第一虚拟相机来继续渲染第一3d地图的3d地图视图。这里,地图绘制应用还确定是否开始从第一查看模式过渡至第二查看模式。如果地图绘制应用确定不可能需要从第一查看模式到第二查看模式的过渡(例如,在已经过一定义时间量之后,第一查看模式的缩放级别已改变阈值量以指示过渡不大可能或将不会发生,等等),则地图绘制应用过渡至状态9710。如果地图绘制应用确定从第一查看模式过渡至第二查看模式(例如,地图绘制应用进入需要第二查看模式的缩放级别,应用进入导航模式,等等),则地图绘制应用过渡至状态9760。

在地图绘制应用过渡至状态9760时,地图绘制应用通过对使用第一虚拟相机渲染的第一3d地图的3d地图视图与使用第二虚拟相机渲染的第二3d地图的3d地图视图执行交叉融合,来执行融合操作。在一些实施例中,地图绘制应用首先渲染第一3d地图的3d地图视图,然后渲染第二3d地图的3d地图视图。一些实施例的地图绘制应用反复地在渲染第一3d地图的3d地图视图与渲染第二3d地图的3d地图视图之间交替,以进行融合操作。一旦完成融合操作,地图绘制应用便过渡至状态9770。

在状态9770下,地图绘制应用将第二查看模式设置为第一查看模式然后过渡回状态9710。由于地图绘制应用可以任意数量的次数在第一查看模式和第二查看模式之间切换,因此地图绘制应用返回至状态9710,以便预加载第二查看模式以继续提供两个查看模式之间的无缝过渡。

c.图像处理流水线

图98概念性地示出了处理流水线9800,该处理流水线由一些实施例的地图绘制应用执行以便渲染用于在客户端设备处(例如,在客户端设备的显示器上)显示的地图。如所示,处理流水线9800包括请求器9805、加载器/解压缩器9810、图块处理器9850、网格构建器9815的集合、图块提供器9820、虚拟相机9880以及地图渲染引擎9825。

一些实施例的图块处理器9850接收来自网格构建器9815的对地图图块的请求并在转发请求之前执行复用操作。网格构建器9815,如将在下文所述,识别为构建相应网格所需的现有地图图块(在地图绘制服务服务器上或在执行处理流水线9800的设备上的高速缓存中存储的地图图块)。在一些实施例中,地图图块被引用为四叉树的节点。在多个网格构建器请求相同的图块时,图块处理器充当复用器。在网格构建器请求图块时,在一些实施例中,图块处理器9850将这些图块存储在其队列中。在特定时间段之后或者在已请求特定数量的图块之后,图块处理器9850清除队列并将图块列表发送至加载器/解压缩器9810。

加载器/解压缩器9810从图块处理器9850接收多路复用的图块列表9835并处理解压缩图块9845至图块处理器9850的返回。在一些实施例中,加载器/解压缩器9810首先检查一个或多个高速缓存以确定所述高速缓存是否具有在地图绘制应用于其上操纵的设备上存储的所请求图块。如图所示,一些实施例包括存储在非易失性存储器(例如,磁盘、闪存存储器等)上的第一图块高速缓存9853以及存储在易失性存储器(例如,随机存取存储器)上的第二图块高速缓存9854。当加载器/解压缩器9810在高速缓存9853和9854中的一者中找到图块时,它便将这些图块发送回图块处理器9850(以用于返回至请求网格构建器9815)。

当加载器/解压缩器9810在其高速缓存中不具有图块时,它便向请求器9805发送对其余图块的请求。在以压缩格式接收到这些地图图块9840时,加载器/解压缩器对所接收的图块解压缩以生成解压缩图块9845。在一些实施例中,在生成如上所述的地图图块之后,地图绘制服务还使用编码技术来压缩图块。不同的实施例使用不同的编码技术。加载器/解压缩器9810将这些解压缩图块9845返回至图块处理器9850,并且在一些情况下还将它们存储在图块高速缓存9853和9854中的一者或两者中。

请求器9805,在一些实施例中,接收来自加载器/解压缩器9810(其继而接收来自图块处理器9850的请求)的对地图图块的请求。这些地图图块,在一些实施例中,存储在服务器(例如,用户设备所连接至的地图绘制服务的服务器)上。请求器发送从地图绘制服务中识别所需(并且在图块高速缓存9853和9854中不可用的)图块的图块列表9836(从加载器/解压缩器9810接收)。在一些实施例中,请求器利用操作设备的网络连接(例如,wi-fi连接、gsm连接等)来通过互联网联系地图绘制服务以检索所需的地图图块。在从地图绘制服务接收到图块(为压缩形式)时,请求器9805将压缩图块9840返回至加载器/解压缩器。

在一些实施例中,请求器9805(或图块处理器9850,或流水线的不同部分)识别附加缩放级别下的覆盖与初始请求的图块相同的地理区域的图块,并将这些图块添加至请求列表9836使得在不久的将来有需要时图块将是可用的。此外,一些实施例针对附近的地理区域自动地请求相同(或不同)缩放级别下的图块,以便使图块在用户平移地图的情况下是可用的。在一些实施例中,请求器9805、加载器/解压缩器9810以及图块处理器9850用作处理流水线的独立部分,而网格构建器9815用作该部分的“客户端”。

一些实施例的网格构建器9815(还称为图块源)由图块提供器9820实例化以便构建虚拟地图图块的不同层。取决于正由地图绘制应用显示的地图的类型,图块提供器9820可将不同数量和不同类型的网格构建器9815实例化。例如,针对立交桥(或卫星)视图地图,图块提供器9820可能仅对一个网格构建器9815实例化,因为一些实施例的立交桥地图图块不包括多个数据层。实际上,在一些实施例中,立交桥地图图块包含在地图绘制服务处生成的已经构建的网格,针对该地图绘制服务,立交桥图像(由卫星、飞机、直升机等拍摄)被用作纹理。然而,在一些实施例中,可对附加网格构建器实例化以用于在应用处于混合模式中时生成标签以覆盖立交桥图像。在标题为“3dstreets”的pct申请pct/ep2011/054155中描述了一些实施例的立交桥地图的生成。pct申请pct/ep2011/054155以引用的方式并入本文。针对2d或3d渲染矢量地图(即,非卫星图像地图),一些实施例对单独的网格构建器9815实例化以为土地覆盖物多边形数据(例如,公园、水体等)、道路、兴趣点标志物、点标签(例如,用于公园的标签等)、道路标签(例如,在地图浏览模式中的道路标签以及导航模式中的道路指示牌)、交通(如果显示交通的话)、建筑物、光栅数据(针对某些缩放级别下的某些对象)以及将要结合到地图中的其他数据层构建网格。

一些实施例的网格构建器9815从图块提供器9820接收“空的”虚拟地图图块9860并将“已构建的”虚拟地图图块9865返回至图块提供器9820。即,图块提供器9820向网格构建器9815中的每一者发送一个或多个虚拟地图图块9860。虚拟地图图块9860中的每一者指示世界的针对其绘制网格的区域。在接收到此类虚拟地图图块9860时,网格构建器9815从地图绘制服务中识别所需的地图图块,并将其列表发送至图块处理器9850。

在接收到从图块处理器9850返回的图块时,网格构建器使用存储在图块中的矢量数据来为虚拟地图图块所描述的区域构建多边形网格。在一些实施例中,网格构建器9815使用若干不同的功能来构建网格。这些功能包括网格生成器9816、三角测量器9817、阴影生成器9818以及纹理解码器9819。在一些实施例中,这些功能(以及附加网格构建功能)对于每个网格构建器而言都是可用的,其中不同的网格构建器9815使用不同的功能。例如,负责建筑物层的网格构建器可使用网格生成器9816和三角测量器9817。此外,若干不同类型的阴影生成器可对于网格构建器9815而言是可用的,包括用于创建动态阴影(其随着地图旋转而改变)的第一阴影生成器以及用于创建光栅图像投射阴影的第二阴影生成器。

在一些实施例中,网格生成器9816使用图块矢量数据来生成顶点的网格。三角测量器9817从网格生成三角形,以简化最终渲染。阴影生成器9818将阴影添加至网格(例如,通过用向渲染器指示绘制阴影或将要绘制的阴影的暗度的值来标记顶点和/或多边形)。纹理解码器9819对(例如,来自样式表的)纹理信息解码并将该纹理信息应用于网格。在不同的实施例中,纹理信息可指示在渲染时将要添加至多边形的颜色、图案等,所述纹理信息被编码到网格中。在构建其网格之后,每个网格构建器9815在其网格层已填充的情况下将其虚拟地图图块9865返回至图块提供器9820。

在一些实施例中,可基于样式表数据9855来确定纹理信息。此外,一些实施例还使用该样式表数据9855来确定阴影、三角测量和/或网格构造数据。使用样式表驱动的渲染能够对地图输出的许多方面进行简单修改,因为可通过对样式表的小修改来进行对纹理、颜色等的改变。因此,可快速动态地创建纹理。样式表驱动的渲染的示例性有益效果是,促进了针对某些类型的对象在不同缩放级别或地理区域处使用不同纹理。例如,当在低缩放级别(更少的细节)下查看时,一些实施例可能将公园着色为简单的浅绿色。另一方面,在用户放大至更高的缩放级别(更多的细节)时,样式表指示将图案(例如,树叶图案)应用于公园区域。类似地,可将更高缩放级别下的图案添加至建筑物、水体、柏油、城市土地覆盖物等。这种信息可被编码到样式表中,然后网格构建器基于图块的缩放级别简单地将适当的纹理信息添加至图块网格。

通过对道路(例如,如城市、郊区或乡村道路)加标签,地图绘制服务可引起客户端应用针对围绕这些道路的土地覆盖物区域使用不同纹理。此外,可由服务器基于指示由土地覆盖物区域覆盖的区域的种类的指标来更新土地覆盖物区域标签。例如,一些实施例(在地图绘制服务端上)确定区域内移动设备的密度(例如,基于访问地图绘制服务的设备的数量)并为土地覆盖物生成标签。由客户端设备存储的样式表(在一些实施例中,其可由地图绘制服务更新)然后指示如何绘制这些土地覆盖物区域。类似地,不同样式可用于渲染不同区域的方面(例如,针对土地覆盖物的沙漠、森林、岩石等;针对不同州中的标签的不同颜色;针对不同道路的不同颜色、纹理和/或框,或其他此类区别)。

图99示出了针对一些实施例将不同纹理应用于不同类型的道路。具体地,该图示出了在一些实施例的地图绘制应用中的示出了高速公路入口匝道的地图展示9900。在这种情况下,应用识别标记为高速公路的道路以及标记为入口匝道或岔道的道路,并使用样式表来为不同类型的道路提供不同纹理(在这种情况下,为柏油阴影)。

一些实施例将道路指示为主要或非主要,并相应地以不同的方式渲染道路。例如,相比于连接(例如,居住区)道路,干线道路可能被视为主要的。图100示出了包括一条干线道路和两条连接道路的地图展示10000。在这种情况下,干线道路被视为主要道路,因此应用将干线道路绘制得更大并具有不同的更明显的框。此外,在一些实施例中,应用将干线道路着色得更深使得干线道路更明显地突出。在一些实施例中,图99和100示出了使用沉浸式导航图块来渲染道路,其中道路被定义为3d多边形。在一些此类实施例中,导航图块通过道路多边形顶点的注释来指示应显示什么道路框。

一些实施例的地图图块(用于非沉浸式地图浏览视图,而不是沉浸式导航视图),另一方面,将道路数据存储为矢量(即,一维构造)。但是地图绘制应用以不同的方式来渲染所述道路中的一些,包括以不同于非主要道路的方式来渲染主要道路(例如,干线道路)。图101示出了非沉浸式地图展示10100,其示出了在地图浏览视图中以地图图块渲染道路。在这种情况下,道路中的一者被分类为主要的,并且因此为道路构建的网格不同于其他周围道路。在一些实施例中,相比其他周围道路,主要道路被显示得更深且更粗。

一些实施例动态地确定地图内的哪些道路是主要的并以不同于地图内的非主要道路的方式显示主要道路(例如,通过以不同的方式对道路着色,将主要道路绘制得比非主要道路更粗,为主要道路使用不同的框等等)。为确定地图内的哪些道路是主要的,一些实施例使用所提供的与将要为地图绘制的道路的类型有关的数据。例如,道路可被分类为公路、干线道路以及非干线道路,并在一些实施例中具有子分类。一般来说,干线道路是比非干线道路更大的道路并且承载更多的交通,并且往往在具有非干线道路的交叉口处具有通行权。因此,在地图显示具有干线道路和非干线道路两者时,一些实施例将干线道路绘制为主要的。另一方面,在地图显示不具有干线道路时,一些实施例的地图绘制应用把将要绘制的非干线道路中的一些选择作为主要道路。然而,一些实施例不是仅检查地图的将要为干线道路显示的实际部分,而是还识别位于地图周围特定距离的区域内的道路。如果在该区域内存在干线道路,则应用不将任何非干线道路绘制为主要的,以便避免在干线道路进入地图显示时必须突然改变道路的外观。

图块提供器9820从控制器9875接收特定视图(即,体积或视图截锥),该特定视图表示将要显示的地图视图(即,从虚拟相机9880可见的体积)。图块提供器执行任何剔选(例如,识别将要在虚拟地图图块中显示的表面区域),然后将这些虚拟地图图块9860发送至网格构建器9815。

图块提供器9820然后从网格构建器接收已构建的虚拟地图图块9865,并且在一些实施例中,使用来自虚拟相机9880的特定视图来对已构建的网格执行剔选(例如,移除太远的表面区域、移除将完全在其他对象后方的对象等等)。在一些实施例中,图块提供器9820在不同的时间从不同的网格构建器接收已构建的虚拟地图图块9865(例如,由于为完成更多或更少复杂网格的不同处理时间,在从图块处理器9850接收到必要地图图块之前所经过的不同时间等等)。一旦已返回虚拟地图图块的所有层,一些实施例的图块提供器9820便将这些层放在一起并将数据释放至控制器9875以用于渲染。

在一些实施例中,图块提供器9820可能在网格构建器已返回它们的数据之前,已经接收到将要针对其构建网格的新的虚拟相机体积。例如,在用户快速平移或缩放地图时,由网格构建器返回的数据可能已过期。在一些实施例中,图块提供器丢弃已构建的虚拟地图图块层,或者将它们存储在存储器中。在不同实施例中,是否丢弃已构建的虚拟地图图块取决于是否可能将很快需要已构建的图块(例如,用户已将虚拟相机移动了多少,导航是否正在运行使得应用将不可能显示更旧的数据)以及存储器的当前正使用的量。

虚拟相机9880为流水线9800生成将要渲染的体积或表面,并将这种信息发送至控制器9875。基于地图将渲染的特位置置和取向(即,3d空间中的用户从其“查看”地图的点),虚拟相机识别用于实际发送至图块提供器9820的视场。在一些实施例中,在地图绘制应用正渲染用于导航的3d视角视图时,虚拟相机的视场根据一算法来确定,该算法基于用户设备的移动来以定期的时间间隔生成新的虚拟相机位置和取向。

在一些实施例中,控制器9875负责管理图块提供器9820、虚拟相机9880和地图渲染引擎9825。在一些实施例中,可实际上对多个图块提供器实例化,并且控制器将若干虚拟地图图块(例如,地图图块和建筑物图块)放在一起以创建移交至地图渲染引擎9825的场景。

地图渲染引擎9825负责基于从虚拟相机发送的网格图块9865来生成绘图以输出至显示设备。如图所示,一些实施例的地图渲染引擎9825具有若干子过程。在一些实施例中,由不同的子过程渲染每个不同的元素,其中渲染引擎9825处理对不同层的对象的遮挡(例如,将标签放在不同建筑物上方或后方,在土地覆盖物的顶部生成道路,等等)。该图示出了道路渲染过程9826、建筑物渲染过程9827以及标签渲染过程9828。附加过程的实例包括植被渲染过程、光栅交通渲染过程、光栅道路渲染过程、卫星渲染过程、多边形渲染过程、背景光栅渲染过程等。

渲染过程中的每一者包括渲染参数集合;所示为道路参数9836、建筑物参数9837及标签参数9838。在一些实施例中,该数据包括关于如何渲染道路的信息(例如,着色器信息、将要针对不同类型的道路使用的纹理,等等)。

在一些实施例中,至少部分地由渲染引擎准备操作9870来生成这些渲染参数集合。渲染引擎准备操作9870包括着色器编译器9871以及纹理加载器9872,等等。着色器编译器9871编译渲染引擎将使用的着色器,并且纹理加载器9872加载纹理信息(例如,加载到渲染参数中)。在一些实施例中,这种纹理信息可来自样式表数据9855。

现在将描述一些实施例中的渲染流水线9800的操作。基于用于以特定缩放级别查看特定地图区域的用户输入,虚拟相机9880指定用于查看地图区域的位置和取向,并将该视图截锥或体积发送至控制器9875。控制器9875对一个或多个图块提供器实例化。虽然该图中示出一个图块提供器9820,但一些实施例允许同时对多个图块提供器实例化(例如,如下面在图102中所示)。例如,一些实施例针对建筑物图块以及针对地图图块对单独的图块提供器实例化。

图块提供器9820执行任何必要的剔选以生成对地图区域的需要构建网格的区域进行识别的空的虚拟地图图块,并将空的虚拟地图图块9860发送至网格构建器9815,所述网格构建器针对所绘制的地图的不同层(例如,道路、土地覆盖物、poi标签等)而被实例化。网格构建器9815使用从地图绘制服务接收的对地图绘制服务服务器上可用的不同图块进行识别(即,识别为四叉树的节点)的清单。网格构建器9815请求来自图块处理器9850的特定地图图块,该图块处理器移除任何重复的请求并将图块列表9835发送至加载器/解压缩器9810。

加载器/解压缩器9810确定所请求的图块是否存储在图块高速缓存(非易失性存储高速缓存9853或易失性存储高速缓存9854)中,并将任何此类图块返回至图块处理器9850以用于分配至请求网格构建器9815。针对尚未本地存储的任何图块,加载器/解压缩器9810向请求器9805发送请求,该请求器将图块列表9836(图块列表9835的精减型式)发送至远程地图绘制服务服务器。请求器9805从地图绘制服务接收压缩形式9840的所请求的地图图块,并将所述所请求的地图图块转发至加载器/解压缩器9810。加载器/解压缩器9810对这些图块解压缩(例如,解码),将它们存储在其高速缓存中,并将解压缩的图块9845发送至图块处理器9850以用于返回至网格构建器9815。

一旦特定网格构建器9815已接收到其地图图块,其便开始使用存储在地图图块中的矢量数据来为从图块提供器9820发送的虚拟地图图块构建网格。在针对其地图层构建网格之后,网格构建器9815将已构建的虚拟地图图块9865发送回图块提供器9820。图块提供器9820等待直到其从各个网格构建器9815接收到所有虚拟地图图块,然后将这些虚拟地图图块层叠在一起,并将已完成的虚拟地图图块发送至控制器9875。控制器将来自其所有图块提供器的已返回图块(例如,虚拟地图图块和虚拟建筑物图块)缝合在一起,并将该场景发送至渲染引擎9825。地图渲染引擎9825使用地图图块中的信息来绘制用于显示的场景。

上述流水线针对来自单个虚拟相机的单个场景而示出。一些实施例,实际上,同时对若干虚拟相机和若干图块提供器进行实例化,能够快速地从一个场景切换至另一个场景或者从场景的一个视图切换至另一个视图(例如,在不同缩放级别之间切换,或者从非沉浸式3d地图视图切换成沉浸式3d地图视图以便进入导航)。图102概念性地示出了对用于地图区域的两个不同视图的两个虚拟相机10205和10210实例化的控制器10200。如图所示,第一虚拟相机提供第一地图区域的非沉浸式3d视图,而第二虚拟相机提供第二地图区域的沉浸式3d视图。第一地图区域和第二地图区域可能仅是相同地图区域的不同视图,或者地图的不同区域的视图。在不同实施例中,两个虚拟相机10205和10210可能正提供地图区域的来自不同缩放级别的视图,从而指定查看地图区域的不同位置和取向。

首先,控制器10200正接收来自第一虚拟相机10205的场景,并对非沉浸式3d地图图块提供器10215和建筑物图块提供器10220进行实例化以便显示具有建筑物的非沉浸式3d地图。这些图块提供器中的每一者对其所需的网格构建器10225和10230的集合进行实例化以便为非沉浸式3d场景构建虚拟地图图块。一旦控制器已从图块提供器10215和10220接收到这些虚拟图块,控制器10200便将这些虚拟图块拼接在一起以形成场景10235。一旦控制器接收到应用可能正从非沉浸式查看模式切换至沉浸式查看模式(例如,当用户借助用于进入导航的选项进入路线时)的指示,控制器10200便对第二虚拟相机10210实例化以提供地图区域的视图。基于此,控制器对沉浸式3d图块提供器10240实例化,该沉浸式3d图块提供器继而对其网格构建器10245的集合实例化。在对沉浸式3d流水线实例化时,控制器继续将非沉浸式3d场景10235提供至渲染引擎10250。一旦控制器10200已(i)从沉浸式3d图块提供器10240接收到已构建的虚拟地图图块并且(ii)接收到进入沉浸式3d模式的命令(例如,由于用户已开始路线的导航),控制器便开始将沉浸式3d场景10255提供至渲染引擎10250。在一些实施例中,从建筑物图块提供器10220接收的虚拟建筑物图块用于沉浸式和非沉浸式3d场景两者。

图103概念性地示出了一些实施例的用于预加载导航图块以进入导航的过程10300。将参考图104描述过程10300,图104示出了经过六个阶段10405-10430在应用从针对地图浏览的非沉浸式地图视图过渡到针对导航的沉浸式地图视图显示地图绘制应用的设备10400。

如图所示,过程10300以请求(在10305处)路线指令开始。在一些实施例中,当用户选择地图上的位置然后选择“路线”按钮(例如,针对该位置显示的标签中汽车形状的按纽)以用于请求从用户当前位置到所选择位置的路线时,可能发生这种情况。用户还可能使用搜索字段来搜索从用户当前位置到所选择位置的路线。响应于用户输入,地图绘制应用向地图绘制服务发出对路线指令的请求。图104的第一阶段10405示出了用户选择位置“pizzaplace”的快速路线按钮以便生成从用户当前位置(靠近设备10400的屏幕的中心)到所选择位置的路线。

在传输请求之后,过程10310针对路线的至少一部分接收(在10310处)路线指令和导航图块。地图绘制服务器接收路线请求,生成从开始点(例如,用户位置)到结束点的最佳路线,并将路线指令下载至用户。在一些实施例中,服务器假设用户可能进入导航模式以沿路线行进,并且因此还下载导航图块(即,用于以细节缩放级别的特定高级别来渲染沿路线的区域的图块)。

一些实施例的地图绘制应用包括自适应图块加载机制。在一些实施例中,自适应图块加载机制在路线导航开始时下载针对定义距离的地图图块。一旦用户开始沿路线导航行进,地图绘制应用便基于指示用户致力于完成路线的因素来增加所下载的图块量。例如,在经过了一定义距离间隔时,一些实施例的地图绘制应用增加将要下载的图块量。例如,在沿路线导航行进每10英里之后,地图绘制应用针对前方的路线下载渐增的地图图块量(例如,前方接下来10英里的图块、前方接下来20英里的图块等)。可使用其他技术来自适应地下载图块以便提高节能(并且,如果用户未完成路线,还节省下载时间)。

返回图103,过程10300接下来对用于导航图块的渲染流水线实例化(在10315处)并同时显示路线信息。在下载路线时,地图绘制应用显示静态图(在一些实施例中,为2d或3d),其中路线被覆盖。然而,在后台中,应用准备开始使用导航地图图块来以动画方式显示。因此,过程对虚拟相机、一个或多个图块提供器以及一系列网格构建器进行实例化以用于导航渲染,并且开始基于所下载的导航图块生成虚拟图块。

此外,过程准备(在10320处)用于导航图块的渲染引擎。如上所述,这种准备可包括编译供渲染引擎使用的着色器并且加载也供渲染引擎使用的纹理。图104的第二阶段10410示出了地图绘制应用显示到达位置“pizzaplace”的路线10435。这时,地图绘制应用将已开始下载沿路线的沉浸式3d图块,并且在用户选择进入该路线的导航的情况下,开始对用于这些图块的渲染流水线进行实例化。

过程10300然后确定(在10325处)是否进入导航。一些实施例的地图绘制应用在显示路线时,显示可选用户界面项,用户可用该用户界面项来开始路线上的导航。在用户选择开始项时,应用然后进入导航(只要导航图块被下载并且渲染可开始)。在用户尚未进入导航时,过程确定(在10330处)是否已取消路线。如果用户进行另一个搜索(针对不同的位置或不同的路线),在不进入导航的情况下关闭所显示的路线,关闭地图绘制应用等等,则可能发生这种情况。在用户尚未取消路线时,过程返回10325以确定是否进入导航。这两个操作有效地用作“等待”状态,在该状态中,地图绘制应用显示路线并等待用于开始路线或取消路线的用户输入(并同时还可能响应于用于查看路线指令、沿路线移动地图等的用户输入)。

在用户选择进入导航时,过程10300开始(在10335处)在路线开始处渲染用于导航图块的动画。由于渲染流水线已生成网格并已准备渲染引擎,因此开始动画的滞后时间应是最小的。上文详细描述了用于基于用户位置确定虚拟相机的路径以便确定动画的过程。当,另一方面,用户取消路线时,过程在假设用户将不会导航路线时,对渲染流水线去实例化(在10340处)。一些实施例还将虚拟导航图块从存储器中移除,但其他实施例则在可能时将虚拟导航图块高速缓存一时间段。

在图104的第二阶段10410处,用户选择“开始”ui控件10440。因此,应用开始进入导航,使用预加载的沉浸式3d图块以及预实例化的渲染流水线来开始以最小的延迟渲染场景。如在第三到第六阶段10415-10430中所示,一些实施例使用从2d(或3d)的非沉浸式地图视图到3d沉浸式地图视图的影片过渡。应用显示从其当前状态(在10410中所示的状态)开始并从第一虚拟相机视图平滑地过渡至新的虚拟相机视图,该新的虚拟相机视图更为放大并且指向路线开始的方向。在这种情况下,虚拟相机可执行平动、缩放和旋转操作的组合以便到达用于导航的路线的起点。此外,一些实施例在第一虚拟相机(渲染用于地图浏览的非沉浸式地图图块)与第二虚拟相机(渲染用于导航的更沉浸式的导航图块)之间使用淡入淡出操作。如图所示,在第三阶段10415处,第一虚拟相机已朝着第二虚拟相机的最终位置移动,其中地图现在已稍微旋转和缩放。仍渲染非沉浸式地图图块以用于在此时显示。在第四阶段10420和第五阶段10425中,地图绘制应用现在正从第二虚拟相机的视角进行渲染,其中沉浸式图块被渲染(如由柏油多边形道路所示)。经过这些阶段,第二虚拟相机旋转到其在导航位置指示符(即,位置器)后方的最终位置中,如第六阶段10430中所示。

一些实施例的地图绘制和导航应用在单个集成应用中执行这种过渡,而不离开该单个应用。即,地图和路线浏览模式(在阶段10405和10410中示出)以及导航模式(在阶段10415-10430中示出)是相同集成地图绘制、搜索和导航应用的不同模式。如果用户在导航模式期间选择“结束”按钮,则一些实施例用平滑的影片过渡或通过在不移动虚拟相机的情况下进行的屏幕刷新,来过渡回到地图浏览模式。

d.集成地图绘制和导航应用

图105a和图105b概念性地示出了状态图10500,其描述了一些实施例的集成地图绘制、搜索和导航应用(例如,上述章节中所描述的客户端侧应用)的不同状态以及这些状态之间的过渡。本领域的普通技术人员将认识到,一些实施例的应用将具有与所有不同类型的输入事件相关的许多不同状态,并且状态图10500具体关注这些事件的子集。状态图10500描述并涉及用于改变应用的状态的各种手势交互(例如,多点触摸手势)。本领域的普通技术人员将认识到,还可针对类似的选择操作使用各种其他交互,诸如光标控制器手势及按钮点击、键盘输入、触摸板/触控板输入等。

在用户最初打开地图绘制应用时,应用处于状态10505(地图浏览状态)中。在该状态10505中,应用将已生成并显示地图视图。为生成并显示该地图视图,一些实施例的应用针对区域识别所需的地图图块集合,请求所述地图图块(例如,从地图绘制服务服务器),从虚拟相机的特位置置、取向和视角生成地图图块的视图,并将该地图视图渲染至设备显示器。当在状态10505中时,地图视图是静态的。当应用处于状态10505中时,用户可执行多个操作以修改地图视图、搜索实体(例如,兴趣点、地址等)、检索用于导航的路线等等。

在一些实施例中,集成应用在具有集成触敏显示器的设备上显示。地图上的各种手势交互可使应用执行对地图视图的不同修改(例如,平移、旋转、缩放、修改地图视角等)。当集成应用在地图显示上接收到手势交互(与覆盖在地图显示上的各种浮动或非浮动控件上的触摸输入相反)时,应用过渡至状态10510以执行手势输入辨认。

手势输入辨认状态10510区分不同类型的手势输入并将这些类型的输入转译成不同的地图视图修改操作。在一些实施例中,地图绘制应用接收如由具有集成触敏显示器的设备的操作系统所转译的手势输入。操作系统将触摸输入转译成手势类型和位置(例如,在坐标(x,y)处的“触击”、用在两个不同位置处的单独触摸输入进行的“捏合”操作,等等)。在状态10510下,一些实施例的集成的地图绘制应用将这些转译成不同的地图视图修改操作。

在应用接收到第一类型的手势输入(例如,在地图视图上以旋转运动一起移动的两个单独的触摸输入)时,应用过渡至状态10515以旋转地图。为旋转地图视图,一些实施例修改虚拟相机的决定渲染地图的哪个部分以创建地图视图的位置和/或取向。当在3d模式中时,例如,地图绘制应用围绕特定位置(例如,触摸输入的中心、显示器的中心、识别用户位置的位置指示符等)旋转虚拟相机。在第一类型的手势输入继续时,地图绘制应用保留在状态10515中以继续旋转地图。

在用户释放第一类型的手势输入时,一些实施例的应用过渡至状态10530以执行惯性计算。在一些实施例中,在用户释放某些类型的触摸输入之后,应用继续执行相关联的地图视图修改一特定量的时间和/或距离。在这种情况下,在用户释放旋转输入之后,应用过渡至惯性计算状态10530以计算这种旋转应执行的附加旋转量和时间。在一些实施例中,应用使旋转从地图正在旋转的(角)速度减慢,如同向地图施加“摩擦”力一样。如此,一些实施例的惯性计算基于第一类型的手势输入的速度。应用从状态10530过渡回到应用先前所在的地图修改状态。即,在应用从状态10515(旋转状态)过渡至惯性计算状态10530时,在执行惯性计算之后,应用过渡回到状态10515。在地图的旋转完成之后,应用过渡回到状态10505。

在应用接收到第二类型的手势输入(例如,在地图视图上移动的单个触摸输入)时,应用过渡至状态10520以平移地图。为平移地图视图,一些实施例修改虚拟相机的决定渲染地图的哪个部分以创建地图视图的位置。这使地图看起来像在从源于第二类型的手势输入的方向的方向上滑动。在一些实施例中,当地图视图在3d视角模式中时,平移过程涉及执行触摸输入的位置与平面地图上的位置的关联,以便避免地图视图中的突然的不期望的跳跃。在第二类型的手势输入继续时,地图绘制应用保留在状态10520中以继续平移地图。

在用户释放第二类型的手势输入时,一些实施例的应用过渡至状态10530以执行惯性计算。在一些实施例中,在用户释放某些类型的触摸输入之后,应用继续执行相关联的地图视图修改一特定量的时间和/或距离。在这种情况下,在用户释放平移输入之后,应用过渡至惯性计算状态10530以计算移动地图视图的附加量(即,移动虚拟相机)以及这种移动应执行的时间。在一些实施例中,应用使平移移动从地图正在平移的速度减慢,如同向地图施加“摩擦”力一样。如此,一些实施例的惯性计算基于第二类型的手势输入的速度。应用从状态10530过渡回到应用先前所在的地图修改状态。即,在应用从状态10520(平移状态)过渡至惯性计算状态10530时,在执行惯性计算之后,应用过渡回到状态10520。在地图的平移完成之后,应用过渡回到状态10505。

在应用接收到第三类型的手势输入(例如,移动得更靠近在一起或进一步分开的两个单独的触摸输入)时,应用过渡至状态10525以放大或缩小地图。为改变地图视图的缩放级别,一些实施例修改虚拟相机的决定渲染地图的哪个部分以创建地图视图的位置(即,高度)。这使地图视图包括更多(如果缩小)或更少(如果放大)的地图。在一些实施例中,在用户放大或缩小时,应用检索不同的地图图块(针对不同的缩放级别)以生成并渲染新的地图视图。在第三类型的手势输入继续时,地图绘制应用保留在状态10525中以继续平移地图。

在用户释放第二类型的手势输入时,一些实施例的应用过渡至状态10530以执行惯性计算。在一些实施例中,在用户释放某些类型的触摸输入之后,应用继续执行相关联的地图视图修改一特定量的时间和/或距离(即,将虚拟相机移动得更高或更低)。在这种情况下,在用户释放缩放输入之后,应用过渡至惯性计算状态10530以计算缩放地图视图的附加量(即,移动虚拟相机)以及这种移动应执行的时间。在一些实施例中,应用使缩放移动从地图正在放大或缩小的速度(即,虚拟相机改变高度的速度)减慢,如同向相机施加“摩擦”力一样。如此,一些实施例的惯性计算基于第三类型的手势输入的速度。应用从状态10530过渡回到应用先前所在的地图修改状态。即,在应用从状态10525(缩放状态)过渡至惯性计算状态10530时,在执行惯性计算之后,应用过渡回到状态10525。在地图的缩放完成之后,应用过渡回到状态10505。

为简单起见,状态图10500示出了使用相同惯性计算过程(状态10530)的地图平移、缩放和旋转过程。然而,在一些实施例中,这些不同地图修改过程中的每一者实际上使用不同的惯性计算来针对其特定类型的移动识别减慢和停止。此外,在接收到输入时而不是在用户移除手势输入时,一些实施例计算并修改惯性变量。

在应用接收到第四类型的手势输入(例如,在触敏显示器上一致地向上或向下移动的两个单独的触摸输入)时,应用过渡至状态10535以修改地图的视角视图。为改变地图的视角视图,一些实施例在地图上沿弧线移动虚拟相机,从而修改虚拟相机的位置和取向(在相机使其视场的中心保持在地图上的特位置置处时)。在一些实施例中,不同的缩放级别使用虚拟相机移动所沿的不同弧线。这些弧线中的每一者具有一顶部点,在该顶部点处,虚拟相机正笔直地向下指,从而提供地图的2d视角视图。此外,每条弧线具有底部点,该底部点为弧线上的虚拟相机可移动至的最低点。因此,在一些实施例中,第四类型的手势输入可使应用在2d地图视图与3d视角视图之间改变。在第四类型的手势输入继续时,地图绘制应用保留在状态10535中以继续修改地图的视角视图。

在用户释放第二类型的手势输入时,一些实施例的应用过渡至状态10540以执行惯性计算。在一些实施例中,在用户释放某些类型的触摸输入之后,应用继续执行相关联的地图视图修改一特定量的时间和/或距离(即,将虚拟相机移动得更高或更低)。在这种情况下,在用户释放视角视图改变输入之后,应用过渡至惯性计算状态10540以计算修改地图视图的视角的附加量(即,沿其弧线移动虚拟相机)以及这种移动应执行的时间。在一些实施例中,应用使该移动从地图正在改变视角的速度(即,虚拟相机沿其弧线移动的速度)减慢,如同向相机施加“摩擦”力一样。如此,一些实施例的惯性计算基于执行第四类型的手势输入的速度。

此外,针对视角改变操作,一些实施例过渡至回弹计算状态10545。如所述,视角改变操作具有在一些实施例中允许的最大和最小视角偏移,该最大和最小视角偏移可取决于当前地图视图的缩放级别。因此,除惯性计算之外,应用还在状态10545下执行回弹计算。回弹计算使用惯性计算来确定是否将达到沿虚拟相机弧线的最大点,并且如果是,则确定虚拟相机在该点处的速度。一些实施例允许虚拟相机稍微移动越过该最大点以抵达“回弹”点,在该回弹点处,应用使虚拟相机在其弧线上掉转,从而将虚拟相机朝着该最大点移回。一些实施例仅在虚拟相机弧线的一端(例如,弧线的底部)包括此类反弹功能,而其他实施例在弧线的两端均包括该功能。应用从回弹计算状态10545过渡回到惯性计算状态10540,然后过渡回到视角改变状态10535以显示地图视图移动。此外,在用户将第四类型的触摸输入执行得足够久并且视角达到其最大点时,应用直接从状态10535过渡至状态10545以计算回弹信息然后过渡回到状态10535。在对地图的视角视图的修改完成之后,应用过渡回到状态10505。

上述状态涉及地图展示上的各种多点触摸手势,集成地图绘制、搜索和导航应用将这些手势转译成对地图展示的不同修改。各种其他触摸输入也可使应用改变状态并执行各种功能。例如,一些实施例将3d可选项覆盖在地图视图上(例如,作为浮动控件),并且选择(例如,用触击输入)该3d项使应用过渡至10535以修改地图视图的视角。在地图视图在3d视角视图中开始时,应用将视角修改为2d视图;在地图视图在2d视图中开始时,应用将视角修改为3d视图。在修改之后,应用返回至状态10505。

在应用为紧密集成的地图绘制、搜索、路线规划和导航应用时,用户可轻松地从地图浏览状态中访问路线规划功能。在选择特定ui控件(例如,路线进入按钮)时,应用过渡至路线进入状态10570。在路线进入状态下,一些实施例显示触摸屏键盘,用户可用该触摸屏键盘来将位置(例如,地址、地点名称、地点类型等)输入到“至”和“从”字段两者中以便请求路线。在用户输入字符的同时,应用保留在状态10570中并基于最新路线、最新搜索、与针对搜索条目所描述的自动完成类似的自动完成等来提供建议。如果在该阶段中用户选择取消ui控件,则应用转回状态10505而不检索路线。

在用户选择路线(例如,通过输入“至”位置和“从”位置)时,应用过渡至路线显示状态10575。在该状态下,应用在地图视图上显示从第一所选择位置到第二所选择位置的一条或多条路线(例如,通过将路线线条覆盖在地图视图上)。一些实施例自动选择路线中的第一者。在应用保留在状态10575中时,用户可选择任意其他路线(例如,通过在未选择的路线上触击)(但修改路线线条的显示以指示其他路线的选择)。此外,当在状态10575中时,一些实施例的应用显示与路线规划和导航相关的不同ui控件,包括方向列表控件、导航开始控件等等。在一些实施例中,也可从其他状态中访问路线显示状态10575。例如,如果用户在位置旗帜上选择快速路线ui控件,则应用检索从设备的当前位置到与旗帜相关联的位置的一条或多条路线。

另外,在路线于其上显示的地图上的各种手势交互可使应用执行对地图视图的不同修改(例如,平移、旋转、缩放、修改地图视角等)。当集成应用在处于路线显示状态10575中的同时在地图显示上接收手势交互时,应用过渡至状态10510以执行手势输入辨认,其中所有手势地图修改操作(例如,对状态10515-10545的推定)均是可用的。即,应用将手势输入转译成类似于上文针对状态10515-10545所描述的那些的平移、旋转、缩放和/或视角改变操作,所述操作具有针对虚拟相机移动的类似的惯性特征和回弹特征。虽然操作10515-10545返回至地图浏览状态10505,但从路线显示状态10575中访问的推定操作返回至路线显示状态10575。

根据用户所选择的不同控件,应用可从路线显示状态10575过渡到各种不同的模式中。在用户选择用于清理路线的ui控件时,应用过渡回到状态10505以显示不具有任何路线的地图。此外,集成应用可从路线显示状态10575进入一个或多个导航模态。

当在状态10575下显示的所选择的路线在设备的当前位置处开始并且用户选择导航开始控件时,应用过渡至导航状态10580。在一些实施例中,应用显示从地图视图到用于导航的更具沉浸式的3d视图的影片过渡。在一些实施例的导航状态10580内,虚拟相机沿循用户沿所选择路线的位置以便呈现路线的即将到来的部分。在路线完成(设备到达目的地位置)或者用户选择用于结束导航的控件时,应用过渡至状态10505以呈现地图浏览视图10505。

在一些实施例中,在路线于其上显示的地图上的各种手势交互可使应用在处于导航模式10580中的同时执行对地图视图的不同修改(例如,平移、旋转、缩放、修改地图视角等)。在一些实施例中,所述地图修改操作中只有一些在导航模式中是可用的。例如,一些实施例允许用户放大或缩小,但不允许对地图的任何其他修改。因此,在用户提供手势输入时,手势输入辨认状态10510滤除不与缩放操作相关联的手势输入的类型(并且随后应用返回至状态10580)。在接收到与缩放操作相关联的手势输入的类型时,手势输入辨认状态识别该输入,并且应用过渡至类似于状态10525的状态,以改变地图的缩放级别(在一些实施例中,借助惯性计算)。

其他实施例可实现不同的地图修改操作。例如,在一些实施例中,在处于导航模式中时,所有手势地图修改操作(例如,对状态10515-10545的推定)均是可用的。一些实施例允许手势地图修改操作的子集,诸如缩放操作以及有限的平移操作。一些实施例的平移操作,在接收到与平移相关联的手势输入的类型时,将虚拟相机(在处于导航模式中的同时)向所述侧移动,然后使虚拟相机返回至沿路线指向。虽然操作10515-10545返回至地图浏览状态10505,但从导航状态10580中访问的推定操作返回至导航状态10580。

当在状态10575下显示的所选择的路线在除设备的当前位置之外的位置处开始(或者路线为步行路线)并且用户选择导航开始控件时,应用过渡至步进模式,或路线检查模式,状态10585。在一些实施例中,应用以一次一个的方式显示沿路线执行的操纵(例如,作为导航标志)。通过对操纵提供手势输入(例如,划动手势),用户可在处于路线检查模式中的同时查看不同的操纵。将操纵覆盖在地图上,并且在地图中显示路线的至少一部分。

如在路线显示模式中,地图上的各种手势交互可使应用执行对地图视图的不同修改(例如,平移、旋转、缩放、修改地图视角等)。当集成应用在处于步进模式10585中的同时在地图显示上接收到手势交互时,应用过渡至状态10510以执行手势输入辨认,其中所有手势地图修改操作(例如,对状态10515-10545的推定)均是可用的。即,应用将手势输入转译成类似于上文针对状态10515-10545所描述的那些的平移、旋转、缩放和/或视角改变操作,所述操作具有针对虚拟相机移动的类似的惯性特征和回弹特征。虽然操作10515-10545返回至地图浏览状态10505,但从步进模式10585中访问的推定操作返回至步进模式10585。

此外,在一些实施例中,手势输入辨认对所显示的操纵上的至少一个类型的手势输入进行辨认以便在操纵之间切换。当在所显示的操纵上接收到特定类型的手势输入(例如,划动手势)时(与在地图视图上相反),应用过渡至用于改变所显示的操纵的状态(未示出),然后返回至状态10585。

当集成应用在处于步进状态10575时在所显示的地图上接收到手势交互时,应用过渡至状态10510以执行手势输入辨认,其中所有手势地图修改操作(例如,对状态10510-10545的推定)均是可用的。在修改操作完成时,应用返回至状态10585。在用户选择用于结束步进通过操纵的控件时,应用过渡回到状态10505以呈现地图浏览视图。

此外,在一些实施例中,应用可从步进模式10585过渡至自动步进状态10590。当应用处于状态10585中的同时用户选择位置追踪控件时,应用过渡至自动步进模式10590,该自动步进模式是不同的导航模态。当在一些实施例的自动步进模式中时,集成地图绘制、搜索和导航应用显示设备位置最靠近(例如,如由执行操纵的接合点所测量)的操纵。在设备移动(例如,沿路线)至更靠近不同操纵的位置时,自动步进模式自动显示该不同操纵。在用户取消选择位置追踪控件时,应用过渡回到步进模式10585。当用户在处于自动步进状态10590中的同时选择用于结束导航的控件时,应用过渡到状态10505以呈现地图浏览视图。

在步进模式10585中时,地图上的各种手势交互可使应用执行对地图视图的不同修改(例如,平移、旋转、缩放、修改地图视角等)。当集成应用在处于自动步进模式10590中的同时在地图显示上接收到手势交互时,应用过渡至状态10510以执行手势输入辨认,其中所有手势地图修改操作(例如,对状态10515-10545的推定)均是可用的。即,应用将手势输入转译成类似于上文针对状态10515-10545所描述的那些的平移、旋转、缩放和/或视角改变操作,所述操作具有针对虚拟相机移动的类似的惯性特征和回弹特征。虽然操作10515-10545返回至地图浏览状态10505,但从步进模式10585中访问的推定操作返回至自动步进模式10590。此外,在用户将地图平移特定距离时,一些实施例自动关闭位置追踪控件,在这种情况下,应用返回至步进模式状态10585而不是自动步进状态10590。

iv.电子系统

上文所述的特征和应用中的许多可被实现为被指定为在计算机可读存储介质(还称为计算机可读介质)上记录的指令集的软件过程。在这些指令由一个或多个计算或处理单元(例如,一个或多个处理器、处理器的内核或者其他处理单元)执行时,这些指令使得一个或多个处理单元能够执行指令中所指示的动作。计算机可读介质的实例包括但不限于cd-rom、闪存驱动器、随机存取存储器(ram)芯片、硬盘驱动器、可擦可编程只读存储器(eprom)、电可擦可编程只读存储器(eeprom)等。计算机可读介质不包括无线地传送或通过有线连接的载波和电信号。

在本说明书中,术语“软件”意在包括驻留在只读存储器中的固件或者存储在磁性存储设备中的应用,所述固件或应用可被读取到存储器中以用于由处理器进行处理。另外,在一些实施例中,可在保留不同的软件发明的同时,将多个软件发明实现为更大程序的子部分。在一些实施例中,还可将多个软件发明实现为单独程序。最后,共同实施这里所述的软件发明的单独程序的任何组合均在本发明的范围之内。在一些实施例中,当被安装以在一个或多个电子系统上运行时,软件程序定义执行和施行软件程序的操作的一个或多个特定机器具体实施。

a.移动设备

一些实施例的地图绘制应用和导航应用在移动设备诸如智能电话(例如,)和平板电脑(例如,)上操作。图106是此类移动计算设备的架构10600的实例。移动计算设备的例子包括智能电话、平板电脑、膝上型电脑等。如图所示,移动计算设备10600包括一个或多个处理单元10605、存储器接口10610和外围设备接口10615。

外围设备接口10615耦接到各种传感器和子系统,所述子系统包括相机子系统10620、一个或多个无线通信子系统10625、音频子系统10630、输入/输出(i/o)子系统10635等。外围设备接口10615能够实现处理单元10605与各种外围设备之间的通信。例如,取向传感器10645(例如,陀螺仪)和加速度传感器10650(例如,加速度计)耦接到外围设备接口10615,以便促进取向和加速功能。

相机子系统10620耦接到一个或多个光学传感器10640(例如,电荷耦合设备(ccd)光学传感器、互补金属氧化物半导体(cmos)光学传感器等)。与光学传感器10640耦接的相机子系统10620促进相机功能,诸如图像和/或视频数据捕获。无线通信子系统10625用于促进通信功能。在一些实施例中,无线通信子系统10625包括射频接收器和发射器以及光学接收器和发射器(图106中未示出)。一些实施例的这些接收器和发射器被实现为在一个或多个通信网络之上运行,所述一个或多个通信网络诸如gsm网络、wi-fi网络、蓝牙网络等。音频子系统10630耦接至扬声器以输出音频(例如,以输出语音导航指令)。另外,音频子系统10630还耦接至麦克风以促进支持语音的功能,诸如语音识别(例如,用于搜索)、数字记录等。

i/o子系统10635涉及输入/输出外围设备(诸如显示器、触摸屏等)与处理单元10605的数据总线之间通过外围设备接口10615的传输。i/o子系统10635包括触摸屏控制器10655和其他输入控制器10660以促进输入/输出外围设备与处理单元10605的数据总线之间的传输。如图所示,触摸屏控制器10655耦接到触摸屏10665。触摸屏控制器10655使用任何多点触感技术来检测触摸屏10665上的接触和移动。其他输入控制器10660耦接到其他输入/控制设备,诸如一个或多个按钮。一些实施例包括近触感屏和对应控制器,该控制器代替触摸交互或除了触摸交互之外可检测近触摸交互。

存储器接口10610耦接到存储器10670。在一些实施例中,存储器10670包括易失性存储器(例如,高速随机存取存储器)、非易失性存储器(例如,闪存存储器)、易失性存储器和非易失性存储器的组合和/或任何其他类型的存储器。如图106所示,存储器10670存储操作系统(os)10672。os10672包括用于处理基本系统服务和用于执行依赖于硬件的任务的指令。

存储器10670还包括:促进与一个或多个另外设备进行通信的通信指令10674;促进图形用户界面处理的图形用户界面指令10676;促进图像相关的处理和功能的图像处理指令10678;促进输入相关(例如,触摸输入)的过程和功能的输入处理指令10680;促进音频相关的过程和功能的音频处理指令10682;以及促进相机相关的过程和功能的相机指令10684。上述指令仅是示例性的,并且在一些实施例中,存储器10670包括额外的和/或其他指令。例如,用于智能电话的存储器可包括促进电话相关的过程和功能的电话指令。另外,存储器可包括用于地图绘制应用和导航应用以及其他应用的指令。以上所识别的指令无需实现为独立的软件程序或模块。可在硬件和/或软件中,包括在一个或多个信号处理和/或专用集成电路中,实现移动计算设备的各种功能。

虽然图106中所示的组件显示为单独的组件,但本领域的普通技术人员将认识到,可将两个或更多个组件集成到一个或多个集成电路中。另外,两个或更多个组件可由一条或多条通信总线或信号线来耦接在一起。另外,虽然已将许多功能描述为由一个组件执行,但本领域的普通技术人员将认识到,可将相对于图106描述的功能拆分到两个或更多个集成电路中。

b.计算机系统

图107概念性地示出了实现本发明的一些实施例所利用的电子系统10700的另一个例子。电子系统10700可以为计算机(例如,台式计算机、个人计算机、平板电脑等)、电话、pda或任何其他种类的电子或计算设备。此类电子系统包括各种类型的计算机可读介质以及用于各种其他类型的计算机可读介质的接口。电子系统10700包括总线10705、一个或多个处理单元10710、图形处理单元(gpu)10715、系统存储器10720、网络10725、只读存储器10730、永久性存储设备10735、输入设备10740以及输出设备10745。

总线10705总体表示在通信上连接电子系统10700的许多内部设备的所有系统、外围设备以及芯片组总线。例如,总线10705可通信地将一个或多个处理单元10710与只读存储器10730、gpu10715、系统存储器10720以及永久性存储设备10735连接。

一个或多个处理单元10710从这些各种存储器单元中检索将要执行的指令以及将要处理的数据以执行本发明的过程。在不同实施例中,一个或多个处理单元可以为单个处理器或者多核处理器。一些指令被传送至gpu10715并且由该gpu执行。gpu10715可卸载各种计算指令或者补偿由一个或多个处理单元10710提供的图像处理。在一些实施例中,可使用coreimage的内核着色语言来提供此类功能性。

只读存储器(rom)10730存储一个或多个处理单元10710以及电子系统的其他模块所需的静态数据和指令。另一方面,永久性存储设备10735是读写存储器设备。该设备是即使在电子系统10700关闭时也存储指令和数据的非易失性存储器单元。本发明的一些实施例将海量存储设备(诸如磁盘或光盘及其相应硬盘驱动器、集成式闪存存储器)用作永久性存储设备10735。

其他实施例将可移动的存储设备(诸如软盘、闪存存储器设备等,及其对应的驱动器)用作永久性存储设备。与永久性存储设备10735一样,系统存储器10720是读写存储器设备。但是,与存储设备10735不同,系统存储器10720为易失性读写存储器,诸如随机存取存储器。系统存储器10720存储处理器在运行时所需的指令和数据中的一些。在一些实施例中,本发明的过程存储在系统存储器10720、永久性存储设备10735和/或只读存储器10730中。一个或多个处理单元10710从这些各种存储器单元检索将要执行的指令以及将要处理的数据,以便执行一些实施例的过程。

总线10705还连接至输入设备10740和输出设备10745。输入设备10740使得用户能够将信息发送至电子系统并且选择至电子系统的命令。输入设备10740包括字母数字键盘和指示设备(也称为“光标控制设备”)、相机(例如,网络相机)、麦克风或用于接收语音命令的类似设备等。输出设备10745显示由电子系统生成的图像或者其他输出数据。输出设备10745包括打印机以及诸如阴极射线管(crt)或液晶显示器(lcd)的显示设备,以及扬声器或类似的音频输出设备。一些实施例包括充当输入设备和输出设备两者的设备,诸如触摸屏。

最后,如图107所示,总线10705还通过网络适配器(未示出)将电子系统10700耦接到网络10725。以此方式,计算机可以是计算机的网络(诸如局域网(“lan”)、广域网(“wan”)或内联网)的一部分,或者可以是网络的网络(诸如互联网)的一部分。电子系统10700的任何或所有组件均可与本发明结合使用。

一些实施例包括将计算机程序指令存储在机器可读或计算机可读介质(或者称为计算机可读存储介质、机器可读介质或机器可读存储介质)中的电子组件,诸如微处理器、存储装置以及存储器。此类计算机可读介质的一些实例包括ram、rom、只读光盘(cd-rom)、可刻录光盘(cd-r)、可重写光盘(cd-rw)、只读数字通用光盘(例如,dvd-rom、双层dvd-rom)、各种可刻录/可重写dvd(例如,dvd-ram、dvd-rw、dvd+rw等)、闪存存储器(例如,sd卡,mini-sd卡、micro-sd卡等)、磁性和/或固态硬盘驱动器、只读和可刻录盘、超密度光盘、任何其他光学或磁性介质以及软盘。计算机可读介质可存储计算机程序,该计算机程序可由至少一个处理单元来执行并且包括用于执行各种操作的指令集。计算机程序或者计算机代码的实例包括机器代码,诸如由编译器所产生的机器代码,以及包括可由计算机、电子部件或微处理器使用解译器来执行的更高级别代码的文件。

虽然上述讨论主要涉及执行软件的微处理器或多核处理器,但一些实施例由一个或多个集成电路来执行,该一个或多个集成电路诸如专用集成电路(asic)或现场可编程门阵列(fpga)。在一些实施例中,此类集成电路执行存储在电路自身上的指令。此外,一些实施例执行存储在可编程逻辑设备(pld)、rom或ram设备中的软件。

如本说明书以及本专利申请的任何权利要求所用,术语“计算机”、“服务器”、“处理器”及“存储器”均是指电子或其他技术设备。这些术语不包括人或者人的群组。出于本说明书的目的,术语显示或正在显示意指在电子设备上显示。如本说明书以及本专利申请的任何权利要求所用,术语“计算机可读介质”以及“机器可读介质”完全限于以可由计算机读取的形式存储信息的可触摸的有形物体。这些术语不包括任何无线信号、有线下载信号以及任何其他短暂信号。

v.地图服务环境

各种实施例可在地图服务操作环境内操作。图108示出了根据一些实施例的地图服务操作环境。地图服务10830(还称为地图绘制服务)可为通过各种通信方法和协议与地图服务10830通信的一个或多个客户端设备10802a-10802c提供地图服务。在一些实施例中,地图服务10830提供地图信息及其他地图相关数据,诸如二维地图图像数据(例如,使用卫星影像的道路的航测图)、三维地图图像数据(例如,具有三维特征的可横穿地图,诸如建筑物)、路线和方向计算(例如,针对行人的轮渡路线计算或两点之间的方向)、实时导航数据(例如,二维或三维形式的可视逐向导航数据)、位置数据(例如,客户端设备当前位于哪里)以及其他地理数据(例如,无线网络覆盖、天气、交通信息或附近的兴趣点)。在各种实施例中,地图服务数据可包括用于不同国家或地区的位置标签;位置标签可用于在客户端设备上以不同语言呈现地图标签(例如,街道名称、城市名称、兴趣点)。客户端设备10802a-10802c可通过获得地图服务数据来使用这些地图服务。客户端设备10802a-10802c可实施各种技术来处理地图服务数据。客户端设备10802a-10802c然后可将地图服务提供至各种实体,包括但不限于用户、内部软件或硬件模块和/或客户端设备10802a-10802c外部的其他系统或设备。

在一些实施例中,由分布式计算系统中的一个或多个节点来实施地图服务。可为每个节点分配一个或多个服务或地图服务的组件。可为一些节点分配相同的地图服务或地图服务的相同组件。在一些实施例中,加载平衡节点将访问或请求分配至地图服务内的其他节点。在一些实施例中,地图服务被实施为单个系统,诸如单个服务器。服务器内的不同模块或硬件设备可实施由地图服务提供的各种服务中的一者或多者。

在一些实施例中,地图服务通过生成各种格式的地图服务数据来提供地图服务。在一些实施例中,地图服务数据的一种格式是地图图像数据。地图图像数据将图像数据提供至客户端设备使得客户端设备可处理该图像数据(例如,将该图像数据渲染和/或显示为二维或三维地图)。地图图像数据,无论是二维还是三维形式,可指定一个或多个地图图块。地图图块可为较大地图图像的一部分。将地图的地图图块组装在一起产生原始地图。可通过地图图像数据、路由数据或导航数据或任何其他地图服务数据来生成图块。在一些实施例中,地图图块为基于光栅的地图图块,其中图块大小的范围为大于和小于常用的256像素乘256像素图块的任何大小。基于光栅的地图图块可以任何数量的标准数字图像表示来编码,所述标准数字图像表示包括但不限于位图(.bmp)、图形交换格式(.gif)、联合图像专家小组(.jpg、.jpeg等)、便携式网络图形(.png)或标记图像文件格式(.giff)。在一些实施例中,地图图块为使用矢量图形来编码的基于矢量的地图图块,所述矢量图形包括但不限于可缩放矢量图形(.svg)或绘图文件(.drw)。一些实施例还包括具有矢量数据和光栅数据的组合的图块。关于地图图块的元数据或其他信息还可包括在地图图块内或连同地图图块一起被包括,从而将另外地图服务数据提供至客户端设备。在各种实施例中,使用各种标准和/或协议来对地图图块编码以用于传输。

在各种实施例中,根据缩放级别,地图图块可由不同分辨率的图像数据构造而成。例如,对于低缩放级别(例如,世界或地球视图)而言,地图或图像数据的分辨率不需要像相对于高缩放级别(例如,城市或街道级别)下的分辨率那样高。例如,当在地球视图中时,可能不需要渲染街道级别的物像,因为此类对象将是如此小以至于在许多情况下都是可以忽略的。

在一些实施例中,地图服务在对图块进行编码以用于传输之前执行各种技术来分析地图图块。这种分析可优化针对客户端设备和地图服务两者的地图服务性能。在一些实施例中,根据基于矢量的图形技术来对地图图块进行复杂度分析,并使用复杂和非复杂层来构造地图图块。也可针对可被渲染为图像纹理并依赖于图像掩码来构造的常用图像数据或模式来对地图图块进行分析。在一些实施例中,地图图块中基于光栅的图像数据包含与一个或多个纹理相关联的某些掩码值。一些实施例还针对可与包含样式标识符的某些地图样式相关联的指定特征来对地图图块进行分析。

在一些实施例中,其他地图服务依赖于与地图图块分离的各种数据格式生成地图服务数据。例如,提供位置数据的地图服务可使用符合位置服务协议的数据格式,所述位置服务协议包括但不限于无线电资源位置服务协议(rrlp)、用于码分多址(cdma)的tia801、无线电资源控制(rrc)位置协议或lte位置协议(lpp)。实施例还可从客户端设备接收或请求识别设备能力或属性(例如,硬件规格或操作系统版本)或通信能力(例如,由无线信号强度或有线或无线网络类型确定的设备通信带宽)的数据。

地图服务可从内部或外部源获得地图服务数据。例如,可从外部服务或内部系统、存储设备或节点获得地图图像数据中所用的卫星影像。其他例子可包括但不限于gps助理服务器、无线网络覆盖数据库、企业或个人目录、天气数据、政府信息(例如,建筑物更新或道路名称改变)或交通报告。地图服务的一些实施例可更新地图服务数据(例如,无线网络覆盖)以用于分析来自客户端设备的未来请求。

地图服务的各种实施例可响应于地图服务的客户端设备请求。这些请求可以是针对特定地图或地图的特定部分的请求。一些实施例将对地图的请求格式化为对某些地图图块的请求。在一些实施例中,请求还为地图服务提供用于路线计算的开始位置(或当前位置)和目的地位置。客户端设备还可请求地图服务渲染信息,诸如地图纹理或样式表。在至少一些实施例中,请求还为实施逐向导航的一系列请求中的一者。对其他地理数据的请求可包括但不限于当前位置、无线网络覆盖、天气、交通信息或附近兴趣点。

在一些实施例中,地图服务分析客户端设备请求以优化设备或地图服务操作。例如,地图服务可辨认出客户端设备的位置在通信较差(例如,弱无线信号)的区域中并发送更多的地图服务数据以在通信丢失的情况下提供客户端设备或者发送指令以使用不同的客户端硬件(例如,取向传感器)或软件(例如,使用无线位置服务或wi-fi位置服务而不是基于gps的服务)。在另一个例子中,地图服务可针对基于矢量的地图图像数据来分析客户端设备请求并且根据图像的复杂度来确定基于光栅的地图图像数据更好地优化地图图像数据。其他地图服务的实施例可对客户端设备请求执行类似分析,并且因此,上述例子并非旨在进行限制。

客户端设备(例如,客户端设备10802a-10802c)的各种实施例在不同的便携式多功能设备类型上实施。客户端设备10802a-10802c通过各种通信方法和协议来使用地图服务10830。在一些实施例中,客户端设备10802a-10802c从地图服务10830获得地图服务数据。客户端设备10802a-10802c请求或接收地图服务数据。客户端设备10802a-10802c然后处理地图服务数据(例如,渲染和/或显示该数据)并且可将该数据发送至设备上的另一软件或硬件模块或者发送至外部设备或系统。

根据一些实施例的客户端设备实施用于渲染和/或显示地图的技术。可以各种格式,诸如上文所述的地图图块,来请求或接收这些地图。客户端设备可在二维或三维视图中渲染地图。客户端设备的一些实施例显示所渲染的地图,并允许提供输入的用户、系统或设备操纵地图中的虚拟相机,从而根据虚拟相机的位置、取向和视场来改变地图显示。实施各种形式和输入设备以操纵虚拟相机。在一些实施例中,触摸输入通过某些单个或组合手势(例如,触摸并保持或划动)来操纵虚拟相机。其他实施例允许操纵设备的物理位置从而操纵虚拟相机。例如,可将客户端设备从其当前位置向上倾斜以操纵虚拟相机向上旋转。在另一个例子中,可将客户端设备从其当前位置向前倾斜以向前移动虚拟相机。可实施客户端设备的其他输入设备,包括但不限于听觉输入(例如,所讲出的字)、物理键盘、鼠标和/或控制杆。

一些实施例提供对虚拟相机操纵的各种视觉反馈,诸如在从二维地图视图过渡至三维地图视图时显示可能的虚拟相机操纵的动画。一些实施例还允许用于选择地图特征或对象(例如,建筑物)以及将对象突出显示的输入,从而生成维持虚拟相机对三维空间的感知的模糊效果。

在一些实施例中,客户端设备实施导航系统(例如,逐向导航)。导航系统提供可向用户显示的方向或路线信息。客户端设备的一些实施例请求来自地图服务的方向或路线计算。客户端设备可从地图服务接收地图图像数据和路线数据。在一些实施例中,客户端设备实施逐向导航系统,该逐向导航系统基于从地图服务和/或其他位置系统诸如全球位置系统(gps)接收的位置信息和路线信息,来提供实时路线和方向信息。客户端设备可显示反映客户端设备的当前位置的地图图像数据,并实时更新该地图图像数据。导航系统可提供听觉或视觉方向以沿循某条路线。

虚拟相机被实施为根据一些实施例操纵导航地图数据。客户端设备的一些实施例允许设备调节虚拟相机显示取向以朝着路线目的地偏置。一些实施例还允许虚拟相机通过模拟虚拟相机的惯性运动来对转弯进行导航。

客户端设备实施各种技术以使用来自地图服务的地图服务数据。一些实施例实施一些技术以优化对二维和三维地图图像数据的渲染。在一些实施例中,客户端设备本地存储渲染信息。例如,客户端存储针对包含样式标识符的图像数据提供渲染方向的样式表。在另一个例子中,可存储常用的图像纹理以减少从地图服务传输的地图图像数据的量。不同实施例中的客户端设备实施各种建模技术以渲染二维和三维地图图像数据,所述建模技术的例子包括但不限于:用二维建筑物足迹数据生成三维建筑物;对二维和三维地图对象建模以确定客户端设备通信环境;生成模型以确定从某个虚拟相机位置是否看到地图标签;以及生成模型以在地图图像数据之间平滑过渡。客户端设备的一些实施例还以某些技术来对地图服务数据排序或确定优先次序。例如,客户端设备检测虚拟相机的运动或速度,如果该运动或速度超过某些阈值,则加载并渲染某些区域的较低详细度的图像数据。其他例子包括:将基于矢量的曲线渲染为一系列点,针对与地图服务通信不良的区域预加载地图图像数据,基于显示缩放级别调整纹理,或根据复杂度渲染地图图像数据。

在一些实施例中,客户端设备使用与地图图块分离的各种数据格式来通信。例如,一些客户端设备实施辅助全球位置卫星(a-gps)并与位置服务通信,该位置服务使用符合位置服务协议的数据格式,所述位置服务协议诸如但不限于无线电资源位置服务协议(rrlp)、用于码分多址(cdma)的tia801、无线电资源控制(rrc)位置协议或lte位置协议(lpp)。客户端设备还可直接接收gps信号。实施例还可在或不在来自地图服务的恳求下发送识别客户端设备的能力或属性(例如,硬件规格或操作系统版本)或通信能力(例如,由无线信号强度或有线或无线网络类型确定的设备通信带宽)的数据。

图108示出了用于地图服务10830和客户端设备10802a-10802c的操作环境10800的一个可能实施例。在一些实施例中,设备10802a、10802b和10802c通过一个或多个有线或无线网络10810通信。例如,无线网络10810,诸如蜂窝网络,可通过利用网关10814与广域网(wan)10820诸如互联网通信。在一些实施例中,网关10814提供面向分组的移动数据服务,诸如通用分组无线业务(gprs),或允许无线网络将数据传输至其他网络诸如广域网10820的其他移动数据服务。同样,接入设备10812(例如,ieee802.11g无线接入设备)提供对wan10820的通信访问。设备10802a和10802b可为能够与地图服务通信的任何便携式电子或计算设备。设备10802c可为能够与地图服务通信的任何非便携式电子或计算设备。

在一些实施例中,语音通信和数据通信均可通过无线网络10810和接入设备10812来建立。例如,设备10802a可通过无线网络10810、网关10814以及wan10820来拨打及接收电话呼叫(例如,使用互联网协议电话(voip)协议)、发送及接收电子邮件消息(例如,使用简单邮件传输协议(smtp)或邮局协议第三版(pop3))以及检索电子文档和/或数据流,诸如网页、照片和视频(例如,使用传输控制协议/互联网协议(tcp/ip)或用户数据报协议(udp))。同样,在一些具体实施中,设备10802b和10802c可通过接入设备10812及wan10820来拨打及接收电话呼叫、发送及接收电子邮件消息以及检索电子文档。在各种实施例中,所示客户端设备中的任一者可使用根据一个或多个安全协议建立的永久性连接来与地图服务10830和/或其他一种或多种服务10850通信,所述安全协议诸如安全套接层(ssl)协议或传输层安全(tls)协议。

设备10802a和10802b还可以其他方式建立通信。例如,无线设备10802a可通过无线网络10810与其他无线设备(例如,其他移动设备10802b、手机等等)通信。同样,设备10802a和10802b可借助一个或多个通信子系统,诸如来自bluetoothspecialinterestgroup,inc.,kirkland,washington的通信,建立对等通信10840(例如,个人局域网)。设备10802还可与设备10802a或10802b建立对等通信(未示出)。也可实现其他通信协议和拓扑结构。设备10802a和10802b还可从gps卫星10860接收全球位置系统(gps)信号。

设备10802a、10802b和10802c可通过一个或多个有线和/或无线网络10810或10812与地图服务10830通信。例如,地图服务10830可将地图服务数据提供至渲染设备10802a、10802b和10802c。地图服务10830还可与其他服务10850通信以获得用于实施地图服务的数据。地图服务10830及其他服务10850还可从gps卫星10860接收gps信号。

在各种实施例中,地图服务10830和/或其他一种或多种服务10850被配置为处理来自任何客户端设备的搜索请求。搜索请求可包括但不限于对企业、地址、居住位置、兴趣点或它们的某个组合的查询,地图服务10830和/或其他一种或多种服务10850可被配置为返回与各种参数相关的结果,包括但不限于输入到地址栏中或其他文本输入字段中的位置(包括缩写和/或其他速记符号)、当前地图视图(例如,用户可在驻留于另一位置的同时查看多功能设备上的一个位置)、用户的当前位置(例如,在当前地图视图不包括搜索结果的情况下)以及当前路线(如果有的话)。在各种实施例中,基于不同的优先级权重,这些参数可影响搜索结果的组成(和/或搜索结果的排序)。在各种实施例中,返回的搜索结果可为基于特定标准选择的结果的子集,所述特定标准包括但不限于已对搜索结果(例如,特定兴趣点)请求的次数、与搜索结果相关联的质量的量度(例如,最高用户或编辑评论等级)和/或搜索结果的评论量(例如,已对搜索结果进行评论或评级的次数)。

在各种实施例中,地图服务10830和/或其他一种或多种服务10850被配置为提供自动完成的搜索结果,所述自动完成的搜索结果显示在客户端设备上,诸如在地图绘制应用内。例如,在用户在多功能设备上输入一个或多个搜索关键字时,自动完成的搜索结果可填充屏幕的一部分。在一些情况下,该特征可节省用户时间,因为可在用户输入完整的搜索查询之前显示所需的搜索结果。在各种实施例中,自动完成的搜索结果可为由客户端在客户端设备上找到的搜索结果(例如,书签或联系人)、由地图服务10830和/或其他一种或多种服务10850在其他地方(例如,从互联网)找到的搜索结果,和/或它们的一些组合。与命令的情形一样,可由用户经由语音或通过键入来输入任何搜索查询。多功能设备可被配置为在本文所述的任何地图显示内以图形方式显示搜索结果。例如,针状或其他图形指示符可将搜索结果的位置指示为兴趣点。在各种实施例中,响应于用户对这些兴趣点中一者的选择(例如,触摸选择,诸如触击),多功能设备被配置为显示与所选择的兴趣点有关的额外信息,该额外信息包括但不限于等级、评论或评论片段、操作时长、存储状态(例如,开始营业、永久性关闭等)和/或兴趣点的店面的图像。在各种实施例中,可在响应于用户对兴趣点的选择而显示的图形信息卡上显示任何这种信息。

在各种实施例中,地图服务10830和/或其他一种或多种服务10850提供一个或多个反馈机制以接收来自客户端设备10802a-10802c的反馈。例如,客户端设备可将关于搜索结果的反馈提供至地图服务10830和/或其他一种或多种服务10850(例如,指定等级、评论、临时或永久企业关闭、错误等的反馈);该反馈可用于更新与兴趣点有关的信息以便在将来提供更准确或更新的搜索结果。在一些实施例中,地图服务10830和/或其他一种或多种服务10850可将测试信息(例如,a/b测试)提供至客户端设备以确定哪个搜索结果是最佳的。例如,客户端设备可以随机的时间间隔接收并向用户呈现两个搜索结果并且允许用户指示最佳结果。客户端设备可基于所选择的测试技术向地图服务10830和/或其他一种或多种服务10850报告测试结果以改进未来的搜索结果,所述测试技术诸如a/b测试技术,在该a/b测试技术中,将基线控制样本与各种单变量测试样本进行比较以便改进结果。

虽然已参考许多特定细节描述了本发明,但本领域的普通技术人员将认识到,可在不脱离本发明的实质的情况下以其他特定形式来体现本发明。例如,许多图示出了各种触摸手势(例如,轻按、双击、横扫手势、按下并保持手势等)。然而,所示出的操作中的许多操作可经由不同触摸手势(例如,横扫而非轻按等)或由非触摸输入(例如,使用光标控制器、键盘、触摸板/触控板、近触感屏等)来执行。此外,多个图概念性地示出了过程。这些过程的特定操作可不以所示出和描述的确切顺序被执行。可不在操作的一个连续系列中执行该特定操作,并且可在不同实施例中执行不同的特定操作。此外,该过程可使用若干子过程来实施,或者作为更大宏过程而实施。因此,本领域的普通技术人员将理解,本发明不受前述示例性细节限制,而是将由所附的权利要求所限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1