Lanelet2 OSM数据格式详解
Lanelet2 OSM数据格式详解
概述
Lanelet2使用基于OSM(OpenStreetMap)的XML格式来表示高精度地图。该格式采用分层结构,由三个基本元素构成:Node(节点)、Way(路径)和Relation(关系)。
基本结构
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'><node ... /><way ... /><relation ... />
</osm>
一、基础元素
1.1 Node(节点)
Node是最基本的元素,表示地图中的一个三维坐标点。
结构示例
<node id='39000' visible='true' version='1' lat='49.00325488963' lon='8.42401062334' />
关键属性
id: 唯一标识符lat: 纬度坐标(WGS84)lon: 经度坐标(WGS84)visible: 可见性标志version: 版本号
高度信息
- 节点的高度信息可以通过z坐标表示(假设在x-y平面上布局)
- 高度通常相对于WGS84椭球体
- 可以采用"2.5D"方式,默认高度为0,仅在桥梁或隧道处设置不同高度
特殊标记
某些节点可以添加type标签来标记特殊含义:
<node id='12345' lat='...' lon='...'><tag k='type' v='begin' /> <!-- 虚线起点 -->
</node>
<node id='12346' lat='...' lon='...'><tag k='type' v='end' /> <!-- 虚线终点 -->
</node>
可用的type值:
begin: 虚线的起点end: 虚线的终点pole: 护栏或围栏上单个柱子的位置dot: 组成线条标记的点
1.2 Way(路径)
Way由有序的节点列表组成,节点之间进行线性插值,用于表示物理可观测的地图部分。
结构示例
<way id='43138' visible='true' version='1'><nd ref='4509780735138931930' /><nd ref='39004' /><nd ref='39006' /><tag k='type' v='road_border' />
</way>
关键要素
<nd ref='...' />: 引用构成路径的节点<tag k='...' v='...' />: 定义路径的属性和类型- Way必须至少包含一个节点
- Way不能自相交
- Way不能重复包含相同节点
1.3 Relation(关系)
Relation是Lanelet2的核心结构,用于组合多个元素形成更复杂的地图对象。
结构示例
<relation id='42440' visible='true' version='1'><member type='way' ref='44574' role='left' /><member type='way' ref='44584' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' /><tag k='one_way' v='yes' /><tag k='region' v='de' />
</relation>
成员角色
type: 成员类型(way或relation)ref: 引用的元素IDrole: 成员在关系中的角色(如left、right、regulatory_element等)
二、直线道路
直线道路在Lanelet2中通过Lanelet relation表示。Lanelet是一个原子性的车道段,表示交通规则不变的单一车道部分。
2.1 基本结构
<relation id='42440' visible='true' version='1'><!-- 左边界 --><member type='way' ref='44574' role='left' /><!-- 右边界 --><member type='way' ref='44584' role='right' /><!-- 标签定义 --><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' /><tag k='one_way' v='yes' /><tag k='region' v='de' />
</relation>
2.2 边界Way定义
左右边界是Way类型,定义了道路的物理边界:
<!-- 实线边界 -->
<way id='44574' visible='true' version='1'><nd ref='39000' /><nd ref='39002' /><nd ref='39004' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' />
</way><!-- 虚线边界 -->
<way id='44584' visible='true' version='1'><nd ref='39010' /><nd ref='39012' /><nd ref='39014' /><tag k='type' v='line_thin' /><tag k='subtype' v='dashed' />
</way>
2.3 关键标签说明
type和subtype
type=lanelet: 标识为车道元素subtype: 定义车道类型road: 普通道路highway: 高速公路bus_lane: 公交专用道bicycle_lane: 自行车道emergency_lane: 应急车道
location
urban: 城市区域(默认)nonurban: 非城市区域
one_way
yes: 单向通行(默认)no: 双向通行
可以针对特定参与者设置:
<tag k='one_way' v='yes' />
<tag k='one_way:bicycle' v='no' /> <!-- 自行车可双向 -->
region
- 使用ISO 3166-2国家代码,如
de(德国)、us(美国)
三、曲线道路
曲线道路的表示方法与直线道路相同,通过Lanelet的左右边界Way实现。曲线由构成Way的多个节点通过线性插值自然形成。
3.1 示例
<!-- 曲线道路的左边界 -->
<way id='43156' visible='true' version='1'><nd ref='53692168671339269' /><nd ref='39090' /><nd ref='40036' /><nd ref='40034' /><nd ref='40032' /><nd ref='40030' /><nd ref='40028' /><nd ref='39082' /><tag k='type' v='road_border' />
</way><!-- 对应的Lanelet -->
<relation id='45000' visible='true' version='1'><member type='way' ref='43156' role='left' /><member type='way' ref='43158' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' />
</relation>
3.2 曲线平滑度控制
通过增加节点密度可以提高曲线的平滑度和精度:
- 节点越多,曲线越平滑
- 节点间距取决于曲率半径和精度要求
- 通常在曲率较大的位置增加节点密度
四、交叉路口
交叉路口在Lanelet2中通过多个Lanelet的连接和RightOfWay(路权)regulatory element来表示。
4.1 交叉路口结构
交叉路口由多个进入和离开的Lanelet组成:
<!-- 进入交叉口的Lanelet -->
<relation id='45100' visible='true' version='1'><member type='way' ref='43620' role='left' /><member type='way' ref='43532' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' />
</relation><!-- 交叉口内的Lanelet -->
<relation id='45102' visible='true' version='1'><member type='way' ref='43622' role='left' /><member type='way' ref='43624' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' />
</relation>
4.2 路权定义(Right of Way)
<relation id='45236' visible='true' version='1'><!-- 参考线(停止线或让行线) --><member type='way' ref='43548' role='ref_line' /><!-- 优先通行的Lanelet --><member type='relation' ref='44968' role='right_of_way' /><member type='relation' ref='44970' role='right_of_way' /><member type='relation' ref='44972' role='right_of_way' /><!-- 需要让行的Lanelet --><member type='relation' ref='45134' role='yield' /><member type='relation' ref='45136' role='yield' /><!-- 引用的交通标志 --><member type='way' ref='81723' role='refers' /><member type='way' ref='81735' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='right_of_way' /><tag k='fallback' v='yes' />
</relation>
4.3 全停(All Way Stop)
用于表示所有方向都需要停车的交叉口:
<relation id='45300' visible='true' version='1'><!-- 参与的Lanelet --><member type='relation' ref='45301' role='yield' /><member type='relation' ref='45302' role='yield' /><member type='relation' ref='45303' role='yield' /><member type='relation' ref='45304' role='yield' /><!-- 停止线(顺序与Lanelet对应) --><member type='way' ref='51280' role='ref_line' /><member type='way' ref='51282' role='ref_line' /><member type='way' ref='51284' role='ref_line' /><member type='way' ref='51286' role='ref_line' /><!-- 停车标志 --><member type='way' ref='44950' role='refers' /><member type='way' ref='44952' role='refers' /><member type='way' ref='44954' role='refers' /><member type='way' ref='44956' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='all_way_stop' />
</relation>
4.4 虚拟线(Virtual)
在交叉口内部,通常使用虚拟线来定义车道边界:
<way id='43720' visible='true' version='1'><nd ref='40100' /><nd ref='40102' /><nd ref='40104' /><tag k='type' v='virtual' />
</way>
虚拟线的特点:
- 非物理存在的边界线
- 主要用于交叉口内部分隔不同行驶方向
- 不允许变道
五、斑马线(人行横道)
斑马线在Lanelet2中被表示为特殊的Lanelet,subtype为crosswalk。
5.1 基本结构
<relation id='44986' visible='true' version='1'><member type='way' ref='43488' role='left' /><member type='way' ref='43534' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='crosswalk' /><tag k='location' v='urban' /><tag k='one_way' v='no' />
</relation>
5.2 边界标记
斑马线的边界通常使用pedestrian_marking类型:
<way id='43488' visible='true' version='1'><nd ref='39196' /><nd ref='39046' /><tag k='type' v='pedestrian_marking' />
</way>
5.3 斑马线特征
subtype=crosswalk: 标识为人行横道one_way=no: 行人可双向通行participant:pedestrian=yes: 明确指定行人可通行- 边界类型为
pedestrian_marking或zebra_marking
5.4 完整示例
<!-- 斑马线边界1 -->
<way id='43488' visible='true' version='1'><nd ref='39196' /><nd ref='39198' /><tag k='type' v='pedestrian_marking' />
</way><!-- 斑马线边界2 -->
<way id='43534' visible='true' version='1'><nd ref='39200' /><nd ref='39202' /><tag k='type' v='pedestrian_marking' />
</way><!-- 斑马线Lanelet -->
<relation id='44986' visible='true' version='1'><member type='way' ref='43488' role='left' /><member type='way' ref='43534' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='crosswalk' /><tag k='location' v='urban' /><tag k='one_way' v='false' /><tag k='participant:pedestrian' v='yes' />
</relation>
六、交通标志
交通标志通过Way元素表示,并可以被regulatory element引用。
6.1 交通标志Way
<way id='44952' visible='true' version='1'><nd ref='41394' /><nd ref='43122' /><nd ref='43120' /><tag k='type' v='traffic_sign' /><tag k='subtype' v='de206' />
</way>
6.2 交通标志类型
subtype编码规则
采用ISO 3166国家代码 + 标志编号:
de206: 德国停车标志de301: 德国优先道路标志de205: 德国让行标志usR1-1: 美国停车标志
6.3 交通标志几何表示
方式一:轮廓表示
使用多个节点定义标志的轮廓:
<way id='44960' visible='true' version='1'><nd ref='41400' /><nd ref='41402' /><nd ref='41404' /><nd ref='41406' /><tag k='type' v='traffic_sign' /><tag k='subtype' v='de267' />
</way>
方式二:线段表示
使用两个节点表示标志的左右边缘:
<way id='44954' visible='true' version='1'><nd ref='41398' /> <!-- 左边缘 --><nd ref='43124' /> <!-- 右边缘 --><tag k='type' v='traffic_sign' /><tag k='subtype' v='de301' />
</way>
6.4 可选标签
height: 标志的高度(米),表示下边缘width: 标志的宽度(米)- 节点的z坐标表示标志的离地高度
6.5 常见交通标志示例
<!-- 停车标志 -->
<way id='44970' visible='true' version='1'><nd ref='41420' /><nd ref='41422' /><tag k='type' v='traffic_sign' /><tag k='subtype' v='de206' />
</way><!-- 限速标志 -->
<way id='44972' visible='true' version='1'><nd ref='41424' /><nd ref='41426' /><tag k='type' v='traffic_sign' /><tag k='subtype' v='de274-30' /> <!-- 限速30 -->
</way><!-- 让行标志 -->
<way id='44974' visible='true' version='1'><nd ref='41428' /><nd ref='41430' /><tag k='type' v='traffic_sign' /><tag k='subtype' v='de205' />
</way>
七、车辆停止线
停止线通过Way元素表示,通常被traffic light或traffic sign regulatory element引用。
7.1 基本定义
<way id='51278' visible='true' version='1'><nd ref='42584' /><nd ref='42586' /><tag k='type' v='stop_line' />
</way>
7.2 在Regulatory Element中的应用
停止线作为ref_line角色被引用:
<!-- 红绿灯regulatory element -->
<relation id='45400' visible='true' version='1'><!-- 停止线 --><member type='way' ref='51278' role='ref_line' /><!-- 红绿灯本身 --><member type='way' ref='44960' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='traffic_light' />
</relation>
7.3 让行线(Yield Line)
让行线的表示方式类似:
<way id='51280' visible='true' version='1'><nd ref='42590' /><nd ref='42592' /><tag k='type' v='yield_line' />
</way>
7.4 停止线特点
- 由两个节点组成,表示线段
type=stop_line或type=yield_line- 通常垂直于道路方向
- 在没有明确停止线时,Lanelet的末端被视为隐式停止线
八、路缘石(Curbstone)
路缘石表示道路边缘与人行道之间的物理分隔。
8.1 基本定义
<!-- 高路缘石 -->
<way id='42397' visible='true' version='1'><nd ref='41280' /><nd ref='41282' /><tag k='type' v='curbstone' /><tag k='subtype' v='high' />
</way><!-- 低路缘石 -->
<way id='43146' visible='true' version='1'><nd ref='39048' /><nd ref='39050' /><tag k='type' v='curbstone' /><tag k='subtype' v='low' />
</way>
8.2 路缘石类型
subtype分类
high: 高路缘石,车辆无法驶过low: 低路缘石,车辆可以驶过(但通常不建议)
8.3 路缘石与道路边界的区别
<!-- 路缘石:另一侧有可通行空间(如人行道) -->
<way id='43154' visible='true' version='1'><nd ref='39040' /><nd ref='39078' /><tag k='type' v='curbstone' />
</way><!-- 道路边界:标志道路的绝对边缘 -->
<way id='43150' visible='true' version='1'><nd ref='39042' /><nd ref='39066' /><tag k='type' v='road_border' />
</way>
关键区别:
- curbstone: 表示存在可通行区域(人行道等)
- road_border: 表示可通行区域的绝对终点
8.4 可选属性
<way id='43160' visible='true' version='1'><nd ref='39100' /><nd ref='39102' /><tag k='type' v='curbstone' /><tag k='subtype' v='high' /><tag k='height' v='0.15' /> <!-- 高度15厘米 --><tag k='width' v='0.20' /> <!-- 宽度20厘米 -->
</way>
九、虚拟线(Virtual Line)
虚拟线表示非物理存在的车道边界,主要用于交叉口和复杂路段。
9.1 基本定义
<way id='43720' visible='true' version='1'><nd ref='40100' /><nd ref='40102' /><nd ref='40104' /><tag k='type' v='virtual' />
</way>
9.2 应用场景
1. 交叉口内部
在交叉口中分隔不同行驶方向:
<!-- 交叉口Lanelet使用虚拟线作为边界 -->
<relation id='44972' visible='true' version='1'><member type='way' ref='43720' role='left' /><member type='way' ref='43654' role='right' /><member type='relation' ref='45236' role='regulatory_element' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' />
</relation>
2. 车道合并/分离区域
在车道数量变化的区域使用虚拟线:
<way id='43722' visible='true' version='1'><nd ref='40110' /><nd ref='40112' /><nd ref='40114' /><tag k='type' v='virtual' />
</way>
9.3 虚拟线特性
- 不对应任何物理标记
- 不允许车辆变道穿越
- 主要用于逻辑上分隔车道
- 帮助路径规划算法理解道路拓扑
十、其他道路元素
10.1 道路边界(Road Border)
<way id='43150' visible='true' version='1'><nd ref='39042' /><nd ref='39066' /><nd ref='39068' /><nd ref='39040' /><tag k='type' v='road_border' />
</way>
表示道路可通行区域的绝对边界,通常是植被、护栏或墙壁的起点。
10.2 护栏(Guard Rail)
<way id='43800' visible='true' version='1'><nd ref='40500' /><nd ref='40502' /><nd ref='40504' /><tag k='type' v='guard_rail' /><tag k='height' v='1.0' />
</way>
10.3 墙壁和围栏
<!-- 墙壁 -->
<way id='43810' visible='true' version='1'><nd ref='40510' /><nd ref='40512' /><tag k='type' v='wall' />
</way><!-- 围栏 -->
<way id='43820' visible='true' version='1'><nd ref='40520' /><nd ref='40522' /><tag k='type' v='fence' />
</way>
10.4 交通灯
<way id='44960' visible='true' version='1'><nd ref='43136' /><nd ref='45641' /><nd ref='40906' /><tag k='type' v='traffic_light' /><tag k='subtype' v='red_yellow_green' />
</way>
交通灯子类型
red_yellow_green: 标准三色灯red_yellow: 红黄两色灯red: 仅红灯pedestrian: 行人信号灯
10.5 道路箭头标记
<way id='44970' visible='true' version='1'><nd ref='40600' /><nd ref='40602' /><tag k='type' v='arrow' /><tag k='subtype' v='straight' />
</way>
箭头类型
left: 左转箭头right: 右转箭头straight: 直行箭头straight_left: 直行或左转straight_right: 直行或右转left_right: 左转或右转
10.6 路面标记符号
<!-- 速度限制标记 -->
<way id='44980' visible='true' version='1'><nd ref='41380' /><nd ref='43134' /><nd ref='43132' /><tag k='type' v='symbol' /><tag k='subtype' v='30' />
</way><!-- 减速带 -->
<way id='44990' visible='true' version='1'><nd ref='40700' /><nd ref='40702' /><tag k='type' v='bump' />
</way><!-- 锯齿线 -->
<way id='45000' visible='true' version='1'><nd ref='40710' /><nd ref='40712' /><tag k='type' v='zig-zag' />
</way>
10.7 禁止区域(Keep Out)
<way id='45010' visible='true' version='1'><nd ref='40800' /><nd ref='40802' /><nd ref='40804' /><tag k='type' v='keepout' />
</way>
10.8 自行车道标记
<way id='45020' visible='true' version='1'><nd ref='40900' /><nd ref='40902' /><tag k='type' v='bike_marking' /><tag k='subtype' v='dashed' />
</way>
10.9 铁轨
<way id='45030' visible='true' version='1'><nd ref='41000' /><nd ref='41002' /><nd ref='41004' /><tag k='type' v='rail' />
</way>
十一、道路线条标记详解
11.1 线条类型总览
| type | subtype | 描述 | 允许变道? |
|---|---|---|---|
| line_thin | solid | 实线 | 否 |
| line_thin | solid_solid | 双实线 | 否 |
| line_thin | dashed | 虚线 | 是 |
| line_thin | dashed_solid | 左虚右实 | 左→右:是 |
| line_thin | solid_dashed | 左实右虚 | 右→左:是 |
| line_thick | (同上) | 粗线 | (同上) |
11.2 实线标记
<!-- 细实线 -->
<way id='42521' visible='true' version='1'><nd ref='40304' /><nd ref='40188' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' />
</way><!-- 粗实线 -->
<way id='42523' visible='true' version='1'><nd ref='40310' /><nd ref='40312' /><tag k='type' v='line_thick' /><tag k='subtype' v='solid' />
</way>
11.3 虚线标记
<way id='42525' visible='true' version='1'><nd ref='40320' /><nd ref='40322' /><nd ref='40324' /><tag k='type' v='line_thin' /><tag k='subtype' v='dashed' />
</way>
虚线段标记
可以在节点上标记虚线的起止点:
<node id='40320' lat='...' lon='...'><tag k='type' v='begin' /> <!-- 虚线段起点 -->
</node>
<node id='40322' lat='...' lon='...'><tag k='type' v='end' /> <!-- 虚线段终点 -->
</node>
11.4 混合线标记
<!-- 虚实线(左虚右实) -->
<way id='42530' visible='true' version='1'><nd ref='40330' /><nd ref='40332' /><tag k='type' v='line_thin' /><tag k='subtype' v='dashed_solid' />
</way><!-- 实虚线(左实右虚) -->
<way id='42532' visible='true' version='1'><nd ref='40340' /><nd ref='40342' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid_dashed' />
</way>
11.5 双实线
<way id='42535' visible='true' version='1'><nd ref='40350' /><nd ref='40352' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid_solid' />
</way>
11.6 可选标签
<way id='42540' visible='true' version='1'><nd ref='40360' /><nd ref='40362' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' /><tag k='width' v='0.10' /> <!-- 线宽10厘米 --><tag k='color' v='white' /> <!-- 白色(默认) --><tag k='temporary' v='no' /> <!-- 非临时标记 -->
</way>
11.7 覆盖变道规则
<!-- 方式1:双向允许变道 -->
<way id='42550' visible='true' version='1'><nd ref='40370' /><nd ref='40372' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' /><tag k='lane_change' v='yes' />
</way><!-- 方式2:指定方向变道 -->
<way id='42552' visible='true' version='1'><nd ref='40380' /><nd ref='40382' /><tag k='type' v='line_thin' /><tag k='subtype' v='dashed' /><tag k='lane_change:left' v='yes' /><tag k='lane_change:right' v='no' />
</way>
十二、Regulatory Elements(交通规则元素)
Regulatory Elements是表达交通规则的通用方式,被Lanelet或Area引用。
12.1 基本结构
<relation id='45390' visible='true' version='1'><member type='way' ref='44952' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='speed_limit' />
</relation>
12.2 常用角色
refers: 规则的来源(交通标志、交通灯等)cancels: 标记规则结束的元素ref_line: 规则生效的起始线cancel_line: 规则结束的线right_of_way: 有优先权的laneletyield: 需要让行的lanelet
12.3 速度限制
方式1:引用交通标志
<relation id='45390' visible='true' version='1'><member type='way' ref='44952' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='speed_limit' />
</relation>
方式2:直接指定速度
<relation id='45392' visible='true' version='1'><tag k='type' v='regulatory_element' /><tag k='subtype' v='speed_limit' /><tag k='sign_type' v='50 km/h' />
</relation>
12.4 交通标志规则
<relation id='45400' visible='true' version='1'><!-- 交通标志 --><member type='way' ref='44960' role='refers' /><!-- 规则起始线 --><member type='way' ref='51200' role='ref_line' /><!-- 规则取消标志 --><member type='way' ref='44962' role='cancels' /><!-- 规则结束线 --><member type='way' ref='51202' role='cancel_line' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='traffic_sign' />
</relation>
12.5 交通灯规则
<relation id='45410' visible='true' version='1'><!-- 停止线 --><member type='way' ref='51278' role='ref_line' /><!-- 交通灯 --><member type='way' ref='44960' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='traffic_light' />
</relation>
12.6 应用到Lanelet
Lanelet通过引用regulatory element来关联交通规则:
<relation id='44968' visible='true' version='1'><member type='way' ref='43658' role='left' /><member type='way' ref='43722' role='right' /><!-- 引用多个regulatory elements --><member type='relation' ref='45236' role='regulatory_element' /><member type='relation' ref='45230' role='regulatory_element' /><member type='relation' ref='45224' role='regulatory_element' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' />
</relation>
12.7 动态规则
<relation id='45420' visible='true' version='1'><member type='way' ref='44970' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='speed_limit' /><tag k='sign_type' v='30 km/h' /><tag k='dynamic' v='yes' /> <!-- 动态规则,如"雨天限速" -->
</relation>
12.8 备用规则
<relation id='45430' visible='true' version='1'><member type='relation' ref='45100' role='yield' /><member type='relation' ref='45102' role='right_of_way' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='right_of_way' /><tag k='fallback' v='yes' /> <!-- 备用规则,如"交通灯故障时" -->
</relation>
十三、Area(区域)
Area表示无方向的通行区域,如停车场、广场等。
13.1 基本结构
<relation id='45238' visible='true' version='1'><!-- 外边界(顺时针) --><member type='way' ref='43812' role='outer' /><member type='way' ref='43914' role='outer' /><member type='way' ref='43800' role='outer' /><member type='way' ref='43980' role='outer' /><tag k='type' v='multipolygon' /><tag k='subtype' v='parking' /><tag k='location' v='urban' />
</relation>
13.2 带孔洞的Area
<relation id='45240' visible='true' version='1'><!-- 外边界 --><member type='way' ref='43820' role='outer' /><member type='way' ref='43822' role='outer' /><!-- 内孔洞(逆时针) --><member type='way' ref='43830' role='inner' /><member type='way' ref='43832' role='inner' /><tag k='type' v='multipolygon' /><tag k='subtype' v='parking' />
</relation>
13.3 Area子类型
环境类型:
parking: 停车区freespace: 无特定用途的道路区域vegetation: 植被区keepout: 禁止进入区building: 建筑物traffic_island: 交通岛
通行类型:
walkway: 人行道shared_walkway: 自行车和行人共享道exit: 车库出口
十四、参与者和权限
14.1 参与者类型
<relation id='45500' visible='true' version='1'><member type='way' ref='43900' role='left' /><member type='way' ref='43902' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='participant:vehicle' v='yes' /><tag k='participant:bicycle' v='yes' /><tag k='participant:pedestrian' v='no' />
</relation>
14.2 车辆细分
<relation id='45510' visible='true' version='1'><member type='way' ref='43910' role='left' /><member type='way' ref='43912' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='bus_lane' /><tag k='participant:vehicle:bus' v='yes' /><tag k='participant:vehicle:emergency' v='yes' /><tag k='participant:vehicle:taxi' v='yes' /><tag k='participant:vehicle:car' v='no' />
</relation>
14.3 速度限制
<relation id='45520' visible='true' version='1'><member type='way' ref='43920' role='left' /><member type='way' ref='43922' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='play_street' /><tag k='speed_limit' v='5 km/h' /><tag k='speed_limit_mandatory' v='yes' />
</relation>
分参与者速度限制
<relation id='45530' visible='true' version='1'><member type='way' ref='43930' role='left' /><member type='way' ref='43932' role='right' /><tag k='type' v='lanelet' /><tag k='speed_limit:vehicle' v='50 km/h' /><tag k='speed_limit:bicycle' v='20 km/h' /><tag k='speed_limit_mandatory:vehicle' v='yes' />
</relation>
十五、高级特性
15.1 临时标记
<way id='45600' visible='true' version='1'><nd ref='42000' /><nd ref='42002' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' /><tag k='temporary' v='yes' /><tag k='color' v='yellow' />
</way>
15.2 道路表面
<relation id='45610' visible='true' version='1'><member type='way' ref='44000' role='left' /><member type='way' ref='44002' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='road_surface' v='asphalt' />
</relation>
道路表面类型:
asphalt: 沥青concrete: 混凝土dirt: 泥土gravel: 碎石paved: 铺装
15.3 道路名称
<relation id='45620' visible='true' version='1'><member type='way' ref='44010' role='left' /><member type='way' ref='44012' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='road_name' v='Main Street' />
</relation>
15.4 中心线
Lanelet可以有可选的中心线来引导车辆:
<relation id='45630' visible='true' version='1'><member type='way' ref='44020' role='left' /><member type='way' ref='44022' role='right' /><member type='way' ref='44024' role='centerline' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' />
</relation>
中心线要求:
- 必须在左右边界形成的区域内
- 不能接触边界
- 如果未提供,库会自动计算
十六、最佳实践
16.1 坐标系统
- 使用WGS84坐标系(lat/lon)
- 高度相对于WGS84椭球体
- 节点布局在x-y平面上
- z坐标用于区分不同高度的道路(桥梁/隧道)
16.2 精度建议
- 直线路段:节点间距可以较大(5-10米)
- 曲线路段:增加节点密度以提高平滑度
- 急转弯:节点间距应小于1米
- 交叉口:节点密度要高以准确表达几何形状
16.3 连接规则
- 相邻Lanelet必须共享端点
- 可变道的Lanelet必须共享一个边界
- 交叉的虚拟线不需要共享节点
16.4 标签规范
- 所有标签都使用小写
- 使用下划线分隔单词
- 布尔值使用"yes"/“no”
- 避免使用自定义标签,优先使用预定义类型
16.5 验证检查
使用lanelet2_validation工具检查:
- 自相交的Way
- 重复的节点
- 不合理的Lanelet方向
- 缺失的必要标签
- 几何拓扑错误
16.6 性能优化
- 合理使用节点数量(不要过多或过少)
- 重用共享的Way和Node
- 适当使用regulatory element避免重复
- 为大型地图使用分区存储
十七、完整示例
17.1 简单道路示例
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'><!-- 节点定义 --><node id='1' lat='49.00000' lon='8.40000' /><node id='2' lat='49.00010' lon='8.40000' /><node id='3' lat='49.00020' lon='8.40000' /><node id='4' lat='49.00000' lon='8.40005' /><node id='5' lat='49.00010' lon='8.40005' /><node id='6' lat='49.00020' lon='8.40005' /><!-- 左边界:实线 --><way id='100' visible='true' version='1'><nd ref='1' /><nd ref='2' /><nd ref='3' /><tag k='type' v='line_thin' /><tag k='subtype' v='solid' /></way><!-- 右边界:虚线 --><way id='101' visible='true' version='1'><nd ref='4' /><nd ref='5' /><nd ref='6' /><tag k='type' v='line_thin' /><tag k='subtype' v='dashed' /></way><!-- Lanelet定义 --><relation id='200' visible='true' version='1'><member type='way' ref='100' role='left' /><member type='way' ref='101' role='right' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' /><tag k='one_way' v='yes' /><tag k='region' v='de' /></relation>
</osm>
17.2 带交通灯的交叉口示例
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6'><!-- 节点略... --><!-- 停止线 --><way id='1000' visible='true' version='1'><nd ref='5000' /><nd ref='5001' /><tag k='type' v='stop_line' /></way><!-- 交通灯 --><way id='1001' visible='true' version='1'><nd ref='5010' /><nd ref='5011' /><tag k='type' v='traffic_light' /><tag k='subtype' v='red_yellow_green' /></way><!-- 交通灯regulatory element --><relation id='2000' visible='true' version='1'><member type='way' ref='1000' role='ref_line' /><member type='way' ref='1001' role='refers' /><tag k='type' v='regulatory_element' /><tag k='subtype' v='traffic_light' /></relation><!-- 接近交叉口的Lanelet --><relation id='2001' visible='true' version='1'><member type='way' ref='100' role='left' /><member type='way' ref='101' role='right' /><member type='relation' ref='2000' role='regulatory_element' /><tag k='type' v='lanelet' /><tag k='subtype' v='road' /><tag k='location' v='urban' /></relation>
</osm>
总结
Lanelet2的OSM格式通过Node、Way和Relation三层结构实现了高精度地图的表达:
- Node提供基础的空间坐标
- Way组合节点形成线性或面状的物理特征
- Relation组合Way和其他元素形成语义化的道路对象
这种设计使得Lanelet2能够:
- 精确表达复杂的道路几何形状
- 灵活定义交通规则和限制
- 支持多种道路使用者
- 便于拓展新的元素类型
关键优势:
- 模块化:每个元素独立定义,可重用
- 语义化:通过标签明确表达元素含义
- 可扩展:支持自定义标签和新类型
- 标准化:基于OSM格式,工具链成熟
建议使用JOSM等编辑器配合Lanelet2的验证工具来创建和编辑地图,确保数据质量和一致性。
