constexpr auto single_node_stop_points = R"-( { "stop_points": [ { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "stop_area": { "id": "stop_area:SNCF:87713040", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } } ] } )-"; constexpr auto single_node_journey = // This is a simplified extract from /coverage/sncf/vehicle_journeys // representing the line Dijon -> Cercy -> Nevers R"-( { "vehicle_journeys": [ { "stop_times": [ { "arrival_time": "081200", "utc_arrival_time": "071200", "departure_time": "081200", "utc_departure_time": "071200", "headsign": "893009", "stop_point": { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": false, "skipped_stop": false } ] } ] } )-"; constexpr auto dijon_cercy_nevers_stop_points = // This is a simplified extract from /coverage/sncf/stop_points // representing stations Dijon, Cercy, Nevers R"-( { "stop_points": [ { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "stop_area": { "id": "stop_area:SNCF:87713040", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } }, { "id": "stop_point:SNCF:87696492:Train", "name": "Cercy-la-Tour", "label": "Cercy-la-Tour (Cercy-la-Tour)", "coord": { "lon": "3.645084", "lat": "46.85793" }, "stop_area": { "id": "stop_area:SNCF:87696492", "name": "Cercy-la-Tour", "label": "Cercy-la-Tour (Cercy-la-Tour)", "coord": { "lon": "3.645084", "lat": "46.85793" } } }, { "id": "stop_point:SNCF:87696005:Train", "name": "Nevers", "label": "Nevers (Nevers)", "coord": { "lon": "3.150743", "lat": "46.987282" }, "stop_area": { "id": "stop_area:SNCF:87696005", "name": "Nevers", "label": "Nevers (Nevers)", "coord": { "lon": "3.150743", "lat": "46.987282" } } } ] } )-"; constexpr auto dijon_cercy_nevers_journey = // This is a simplified extract from /coverage/sncf/vehicle_journeys // representing the line Dijon -> Cercy -> Nevers R"-( { "vehicle_journeys": [ { "stop_times": [ { "arrival_time": "081200", "utc_arrival_time": "071200", "departure_time": "081200", "utc_departure_time": "071200", "headsign": "893009", "stop_point": { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } }, { "arrival_time": "095300", "utc_arrival_time": "085300", "departure_time": "095400", "utc_departure_time": "085400", "headsign": "893009", "stop_point": { "id": "stop_point:SNCF:87696492:Train", "name": "Cercy-la-Tour", "label": "Cercy-la-Tour (Cercy-la-Tour)", "coord": { "lon": "3.645084", "lat": "46.85793" } } }, { "arrival_time": "102900", "utc_arrival_time": "092900", "departure_time": "102900", "utc_departure_time": "092900", "headsign": "893009", "stop_point": { "id": "stop_point:SNCF:87696005:Train", "name": "Nevers", "label": "Nevers (Nevers)", "coord": { "lon": "3.150743", "lat": "46.987282" } } } ] } ] } )-"; constexpr auto besancon_dijon_lons_train_only_stop_points = R"-( { "stop_points": [ { "id": "stop_point:SNCF:87718007:Train", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" }, "stop_area": { "id": "stop_area:SNCF:87718007", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" } } }, { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" }, "stop_area": { "id": "stop_area:SNCF:87713412", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" } } }, { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "stop_area": { "id": "stop_area:SNCF:87713040", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } }, { "id": "stop_point:SNCF:87718841:Train", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" }, "stop_area": { "id": "stop_area:SNCF:87718841", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" } } }, { "id": "stop_point:SNCF:87718833:Train", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" }, "stop_area": { "id": "stop_area:SNCF:87718833", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" } } }, { "id": "stop_point:SNCF:87715003:Train", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" }, "stop_area": { "id": "stop_area:SNCF:87715003", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" } } }, { "id": "stop_point:SNCF:87718239:Train", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" }, "stop_area": { "id": "stop_area:SNCF:87718239", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" } } } ] } )-"; constexpr auto besancon_dijon_lons_train_only_journeys = R"-( { "vehicle_journeys": [ { "id": "vehicle_journey:SNCF:2026-01-05:894210:1187:Train", "name": "894210", "journey_pattern": { "id": "journey_pattern:1817", "name": "journey_pattern:1817" }, "stop_times": [ { "arrival_time": "105600", "utc_arrival_time": "095600", "departure_time": "105600", "utc_departure_time": "095600", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87718007:Train", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" } } }, { "arrival_time": "112000", "utc_arrival_time": "102000", "departure_time": "112200", "utc_departure_time": "102200", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" } } }, { "arrival_time": "115200", "utc_arrival_time": "105200", "departure_time": "115200", "utc_departure_time": "105200", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } } ] }, { "id": "vehicle_journey:SNCF:2025-12-25:895705:1187:Train", "name": "895705", "journey_pattern": { "id": "journey_pattern:1982", "name": "journey_pattern:1982" }, "stop_times": [ { "arrival_time": "111400", "utc_arrival_time": "101400", "departure_time": "111400", "utc_departure_time": "101400", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" } } }, { "arrival_time": "113200", "utc_arrival_time": "103200", "departure_time": "113300", "utc_departure_time": "103300", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87718841:Train", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" } } }, { "arrival_time": "113900", "utc_arrival_time": "103900", "departure_time": "114200", "utc_departure_time": "104200", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87718833:Train", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" } } }, { "arrival_time": "123700", "utc_arrival_time": "113700", "departure_time": "123700", "utc_departure_time": "113700", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87715003:Train", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" } } } ] }, { "id": "vehicle_journey:SNCF:2025-12-30:895857:1187:Train", "name": "895857", "journey_pattern": { "id": "journey_pattern:1899", "name": "journey_pattern:1899" }, "stop_times": [ { "arrival_time": "164700", "utc_arrival_time": "154700", "departure_time": "165200", "utc_departure_time": "155200", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718007:Train", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" } } }, { "arrival_time": "171500", "utc_arrival_time": "161500", "departure_time": "171600", "utc_departure_time": "161600", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718841:Train", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" } } }, { "arrival_time": "172100", "utc_arrival_time": "162100", "departure_time": "172200", "utc_departure_time": "162200", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718833:Train", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" } } }, { "arrival_time": "175900", "utc_arrival_time": "165900", "departure_time": "180100", "utc_departure_time": "170100", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718239:Train", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" } } } ] } ] } )-"; constexpr auto besancon_dijon_lons_stop_points = R"-( { "stop_points": [ { "id": "stop_point:SNCF:87718007:Train", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" }, "stop_area": { "id": "stop_area:SNCF:87718007", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" } } }, { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" }, "stop_area": { "id": "stop_area:SNCF:87713412", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" } } }, { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "stop_area": { "id": "stop_area:SNCF:87713040", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" } } }, { "id": "stop_point:SNCF:87718841:Train", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" }, "stop_area": { "id": "stop_area:SNCF:87718841", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" } } }, { "id": "stop_point:SNCF:87718833:Train", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" }, "stop_area": { "id": "stop_area:SNCF:87718833", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" } } }, { "id": "stop_point:SNCF:87715003:Train", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" }, "stop_area": { "id": "stop_area:SNCF:87715003", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" } } }, { "id": "stop_point:SNCF:87718007:LongDistanceTrain", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" }, "stop_area": { "id": "stop_area:SNCF:87718007", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" } } }, { "id": "stop_point:SNCF:87718841:LongDistanceTrain", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" }, "stop_area": { "id": "stop_area:SNCF:87718841", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" } } }, { "id": "stop_point:SNCF:87718833:LongDistanceTrain", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" }, "stop_area": { "id": "stop_area:SNCF:87718833", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" } } }, { "id": "stop_point:SNCF:87718239:LongDistanceTrain", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" }, "stop_area": { "id": "stop_area:SNCF:87718239", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" } } } ] } )-"; constexpr auto besancon_dijon_lons_journeys = R"-( { "vehicle_journeys": [ { "id": "vehicle_journey:SNCF:2026-01-05:894210:1187:Train", "name": "894210", "journey_pattern": { "id": "journey_pattern:1817", "name": "journey_pattern:1817" }, "stop_times": [ { "arrival_time": "105600", "utc_arrival_time": "095600", "departure_time": "105600", "utc_departure_time": "095600", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87718007:Train", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": false, "skipped_stop": false }, { "arrival_time": "112000", "utc_arrival_time": "102000", "departure_time": "112200", "utc_departure_time": "102200", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "115200", "utc_arrival_time": "105200", "departure_time": "115200", "utc_departure_time": "105200", "headsign": "894210", "stop_point": { "id": "stop_point:SNCF:87713040:Train", "name": "Dijon", "label": "Dijon (Dijon)", "coord": { "lon": "5.027256", "lat": "47.323411" }, "links": [], "equipments": [] }, "pickup_allowed": false, "drop_off_allowed": true, "skipped_stop": false } ] }, { "id": "vehicle_journey:SNCF:2025-12-25:895705:1187:Train", "name": "895705", "journey_pattern": { "id": "journey_pattern:1982", "name": "journey_pattern:1982" }, "stop_times": [ { "arrival_time": "111400", "utc_arrival_time": "101400", "departure_time": "111400", "utc_departure_time": "101400", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87713412:Train", "name": "Dole-Ville", "label": "Dole-Ville (Dole)", "coord": { "lon": "5.48806", "lat": "47.09615" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": false, "skipped_stop": false }, { "arrival_time": "113200", "utc_arrival_time": "103200", "departure_time": "113300", "utc_departure_time": "103300", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87718841:Train", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "113900", "utc_arrival_time": "103900", "departure_time": "114200", "utc_departure_time": "104200", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87718833:Train", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "123700", "utc_arrival_time": "113700", "departure_time": "123700", "utc_departure_time": "113700", "headsign": "895705", "stop_point": { "id": "stop_point:SNCF:87715003:Train", "name": "Pontarlier", "label": "Pontarlier (Pontarlier)", "coord": { "lon": "6.353418", "lat": "46.900988" }, "links": [], "equipments": [] }, "pickup_allowed": false, "drop_off_allowed": true, "skipped_stop": false } ] }, { "id": "vehicle_journey:SNCF:2025-12-30:895857:1187:LongDistanceTrain", "name": "895857", "journey_pattern": { "id": "journey_pattern:1899", "name": "journey_pattern:1899" }, "stop_times": [ { "arrival_time": "164700", "utc_arrival_time": "154700", "departure_time": "165200", "utc_departure_time": "155200", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718007:LongDistanceTrain", "name": "Besançon Viotte", "label": "Besançon Viotte (Besançon)", "coord": { "lon": "6.021943", "lat": "47.247049" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "171500", "utc_arrival_time": "161500", "departure_time": "171600", "utc_departure_time": "161600", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718841:LongDistanceTrain", "name": "Arc-et-Senans", "label": "Arc-et-Senans (Arc-et-Senans)", "coord": { "lon": "5.77683", "lat": "47.030473" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "172100", "utc_arrival_time": "162100", "departure_time": "172200", "utc_departure_time": "162200", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718833:LongDistanceTrain", "name": "Mouchard", "label": "Mouchard (Mouchard)", "coord": { "lon": "5.799698", "lat": "46.976865" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false }, { "arrival_time": "175900", "utc_arrival_time": "165900", "departure_time": "180100", "utc_departure_time": "170100", "headsign": "895857", "stop_point": { "id": "stop_point:SNCF:87718239:LongDistanceTrain", "name": "Lons-le-Saunier", "label": "Lons-le-Saunier (Lons-le-Saunier)", "coord": { "lon": "5.551108", "lat": "46.66858" }, "links": [], "equipments": [] }, "pickup_allowed": true, "drop_off_allowed": true, "skipped_stop": false } ] } ] } )-";