处理分隔式道路
分隔式道路指中间设有隔离带,两侧各有若干单向车道的道路。在 OpenStreetMap 中,分隔式道路以两条单向道路(way 对象)表示。这会导致识别路口时出现问题。tpov_match.py 中的 divided_process 函数与 process_divided 参数列表控制了是否在识别路口时包括或排除某些道路。
分隔式道路路口示例
下图展示了一条从双向变为分隔式的道路,与另一条分隔式道路以一个倾斜的丁字路口相交。行驶方向如下(此图默认右行交通):
路1(东西向):
G -> H -> J -> K(橙)
D -> C -> B -> A(红)
路2(南北向):
P -> N -> M -> J -> F -> C(蓝 -> 紫)
B -> E -> H -> L -> N -> P(青 -> 蓝)
所有后续文档将参考下图。
分隔式道路路口示例
process_divided 参数
process_divided 参数列表适用于所有分隔式道路处理案例。
angle- 分隔式道路两侧的最大角度差(例如GH与BA)。如果角度差大于此值,两侧将被视为两条不同的道路。length- 分隔式道路两侧的最大距离(例如BEH或CFJ)。如果距离大于此值,两侧将被视为两条不同的道路。same_name- 如True,分隔式道路两侧必须同名才能被视为同一条道路。apply_filter- 如True,将在分隔式道路处理中使用exit_filter函数(文档),例如一个一侧是辅路的十字路口被视为丁字路口。enabled_cases- 一个包含启用的案例(见下文)的列表。目前有 4 个案例。
案例1: 排除通向分隔式道路对侧的短支路
行驶路径:G -> H -> J -> K
合理的路口表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
H |
J |
L |
直行 |
纯逻辑表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
H |
J |
L |
直行 |
|
J |
F |
K |
直行 |
案例1排除了支路 JFC,因为它只通向分隔式道路的对侧。
参数:
angle:HJ与CBlength:JFC
案例2: 排除在转弯时通向分隔式道路对侧的出口
行驶路径:D -> C -> B -> E -> H -> L
合理的路口表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
B |
E |
A |
左转 |
纯逻辑表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
B |
E |
A |
左转 |
|
H |
J |
L |
直行 |
案例2排除了分隔式道路对侧路段 HJ。
参数:
angle:CB与HJlength:BEH
案例3: 在丁字路口远侧转弯(右行交通中的左转)到分隔式道路时添加出口
行驶路径:M -> J -> F -> C -> B -> A
合理的路口表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
F |
J |
K |
直行 |
|
C |
B |
左转 |
纯逻辑表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
F |
J |
K |
直行 |
案例3为了显示左转添加了一行,尽管因为只有一个行驶方向 C 处并没有路口。
参数:
角度(两者都要满足):
prev_angle:MJ与JFangle:JK与CB
length:JFC
案例4: 当分隔式道路合并回双向道路时排除“路口”
行驶路径:H -> L -> N -> P
合理的路口表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
纯逻辑表示:
当前 |
左侧 |
直行 |
右侧 |
方向 |
|---|---|---|---|---|
N |
M |
P |
直行 |
案例4排除了掉头回同一条道路的路段 NM。
参数:
angle:HL与MJ(目前未使用)距离(两者都要满足):
dist:LMdist2:HJ