Skip to content

バス経路順序: variant補間の再帰深さ上限が固定10でアンカー解決に失敗するケースがある #1513

@TinyKitten

Description

@TinyKitten

背景

stationapi/src/import.rsbuild_stop_route_mapping() 内、prev_chain / next_chain の再帰 CTE は再帰深さを depth < 10 で打ち切っている(commit d6562e0 で導入)。

WHERE pc.depth < 10
    AND von2.prev_stop_id IS NOT NULL
    AND NOT pc.current_stop_id::TEXT = ANY(pc.visited)
    ...

visited 配列でサイクル防止は出来ているが、上限が固定値 10 なのでメイン系統に戻るまでに 11 停留所以上ある variant 系の経路ではアンカー解決に失敗し、estimated_seq が末尾フォールバック値(mtms.max_seq + 9999)に落ちる。結果、長い出入庫便や枝線をもつ系統で停留所の順序が末尾に固まる別パターンの不具合が再発し得る。

改善案

固定値ではなく、route ごとの停留所数(またはサイクル防止用 visited の長さ)から動的に上限を設定する。例:

WHERE pc.depth < (
    SELECT COUNT(*) FROM gtfs_stop_times gst
    JOIN gtfs_trips gt ON gt.trip_id = gst.trip_id
    WHERE gt.route_id = pc.route_id
)

または、サイクル防止だけに任せて再帰深さ制限を撤廃(パフォーマンスは要計測)。

関連

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions