处理分隔式道路

分隔式道路指中间设有隔离带,两侧各有若干单向车道的道路。在 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 - 分隔式道路两侧的最大角度差(例如 GHBA)。如果角度差大于此值,两侧将被视为两条不同的道路。

  • length - 分隔式道路两侧的最大距离(例如 BEHCFJ)。如果距离大于此值,两侧将被视为两条不同的道路。

  • 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,因为它只通向分隔式道路的对侧。

参数:

  • angleHJCB

  • lengthJFC

案例2: 排除在转弯时通向分隔式道路对侧的出口

行驶路径:D -> C -> B -> E -> H -> L

合理的路口表示:

当前

左侧

直行

右侧

方向

B

E

A

左转

纯逻辑表示:

当前

左侧

直行

右侧

方向

B

E

A

左转

H

J

L

直行

案例2排除了分隔式道路对侧路段 HJ

参数:

  • angleCBHJ

  • lengthBEH

案例3: 在丁字路口远侧转弯(右行交通中的左转)到分隔式道路时添加出口

行驶路径:M -> J -> F -> C -> B -> A

合理的路口表示:

当前

左侧

直行

右侧

方向

F

J

K

直行

C

B

左转

纯逻辑表示:

当前

左侧

直行

右侧

方向

F

J

K

直行

案例3为了显示左转添加了一行,尽管因为只有一个行驶方向 C 处并没有路口。

参数:

  • 角度(两者都要满足):

    • prev_angleMJJF

    • angleJKCB

  • lengthJFC

案例4: 当分隔式道路合并回双向道路时排除“路口”

行驶路径:H -> L -> N -> P

合理的路口表示:

当前

左侧

直行

右侧

方向

纯逻辑表示:

当前

左侧

直行

右侧

方向

N

M

P

直行

案例4排除了掉头回同一条道路的路段 NM

参数:

  • angleHLMJ目前未使用

  • 距离(两者都要满足):

    • distLM

    • dist2HJ