导读:每当打开一幅地图数据,比如高德、美团、滴滴或者快的打车,你头脑中一定会浮现出一个问题,这些几何数据是怎么设计的呢?要如何设计才能快速显示或者导航呢?所以本文将讲述LBS应用的数据设计方法。
与LBS有关的数据多种多样,大致可以分为:用户数据、地图数据和显示文字数据。其中,用户数据由不同的应用来定义,如用户的聊天记录或对战记录;文字数据往往是和兴趣点相关的,如商铺信息或用户的微博。用户数据和文字数据架构的构建不是LBS数据构建的难点,LBS数据的难点在于对地图数据的理解。
一幅地图数据的大致样子如图1所示。
可以看出,地图数据去除附加的一些属性(如属性、名称等),从几何的设计构成上说,主要由点、线、面组成,比如:
- BMD(基本显示模块):主要是线、面;
- 3D(三维建筑物):主要依赖于点;
- POI(兴趣点):主要是点和文字;
- ROUTE(道路):主要是线(道路)、点(道路的拓扑点)、线点线(交规);
- JV(路口指示):主要是线点线(路口指示);
- ADMIN(行政区划):主要是面;
- VOICE(语音):属于附加属性;
- ORTHO(卫星正交影像):属于面;
- DTM(数字高程图):属于面;
- TMC(实时交通信息):主要是点、线、面三种类型的TMC。
点的设计,本质上属于一种索引或者排序,我们已经在“兴趣点和名称搜索”一文中详细描述过。面的设计,就是要保证形状的最简,没有什么可说的。LBS中三维物体的设计,与其他应用中的三维设计相同,都是一种通用设计,也没有必要详述。本期主要介绍线的设计分为道路的设计、路口的设计两大类。在路口的设计中,将讲述简单路口的设计、复杂路口的设计、交规的设计、和路口附属设施的设计。
道路的设计
道路是由一连串形状点组成的,如P1,P2,P3,P4,…,Pn。这从P1→Pn所定义的顺序实际上就是导航引擎在渲染形状点时的顺序,即画线方向。
行驶方向是用画线方向来定义的。如果行驶方向为正,意味着行驶方向与画线方向相同,即行驶方向是从画线方向的第一个点到最后一个点。如果行驶方向为负,意味着行驶方向与画线方向相反,即行驶方向是从画线方向的最后一个点到第一个点。
道路的基本特性如下。
- 道路的名称;
- 道路的等级;
- 道路的通行能力等级等。
在这些属性中,最常见的属性是道路的等级和道路的通行能力等级。
道路的等级一般有:高速公路、国道、省道、县道、乡道、县乡村内部道路(村道)、城市快速路、主要道路、次要道路、普通道路、小路。
道路的通行能力等级是一个数字(范围为0~10),与道路等级有一定的相关性。其最重要的作用有两个:路径计算时用以设置启发式搜索的权重;保证道路的拓扑连通性。
在进行线的设计时,主要考虑其几何形状特性。由于上面的这些属性往往是附属在道路的几何形状上的,所以,在道路的几何建模上,没有特殊之处。
在进行道路的几何建模时,是通过道路的构成来构建几何道路的。道路的构成具体分为:上下线分离、交叉点内、JCT(高速连接路)、环岛、服务区的道路、引路(高速与一般道路、一般道路之间的道路)、辅路、引路+JCT、出口、入口、右转车道A/B、左转车道A/B、左右转车道、普通道路、服务区+引路、服务区+JCT、服务区+引路+JCT。
一般来说,每种道路的构成是以其在交通中的实际用途而定的。但是,在设计中大致分为以两种类型的路。
- 一般路口的道路;
- 复杂路口的道路,是指具备上下线分离特点的道路。
一般路口的道路设计没有什么特别,每条道路用一条几何线来表示。在一般路口中,以最复杂的环岛为例,设计如图2所示。
复杂路口的道路设计往往是和上下线分离的道路相关联的。上下线分离的道路如图3所示,是指由中央隔离带分隔为上行及下行的两条道路。
上下线分离的道路在路口的地方一般会用交叉点来表示。这种上下线分离的道路的建模过程如图4所示。
路口设计
路口的设计,本质上就是线、点、线的关系。我们上文已经介绍,在LBS地图中,线、点、线的关系根据路口的类型来分,主要可以分为两种关系