meta { title: "Jungle Bus – Abidjan Transport add-ons"; version: "0.12"; description: "Uncompromising validation of transit data"; author: "nlehuby"; link: "https://junglebus.io/"; baselanguage: "fr"; watch-modified: true; min-josm-version: 14481; -osmoseTags: list("tag", "public_transport"); } relation[type=route_master][route_master=~/^(bus|coach|train|subway|monorail|trolleybus|aerialway|funicular|ferry|tram|share_taxi|light_rail|school_bus|walking_bus)$/] { set pt_route_master; } relation[type=route][route=~/^(bus|coach|train|subway|monorail|trolleybus|aerialway|funicular|ferry|tram|share_taxi|light_rail|school_bus|walking_bus)$/] { set pt_route; } relation.pt_route_master[!charge] { throwError: "AbidjanTransport : Il manque le tag charge pour indiquer le prix"; } /* The charge tag must end with XOF */ relation.pt_route_master[charge$="XOF"][route_master=~/^(bus|share_taxi|ferry)$/] { set charge_ok } relation.pt_route_master[charge][route_master=~/^(bus|share_taxi|ferry)$/]!.charge_ok { throwError: "AbidjanTransport : le prix doit se terminer par XOF"; } /* we choose to map highway=bus_stop as platform and not stop_position*/ way[highway] > node[highway=bus_stop][inside("CI")] { throwError: "AbidjanTransport : Cartographier l'arrêt de bus à côté de la route plutôt que sur la route"; } relation[type=route][route=bus] >[role="platform"] way { throwError: "AbidjanTransport : Un arrêt de bus doit être un noeud et non un chemin"; } relation[type=route][route=bus] >[role="platform"] node[!highway] { throwError: "AbidjanTransport : Un arrêt de bus doit avoir le tag highway=bus_stop"; } *[public_transport=platform] < relation[type=route] { set route_with_platform } relation.pt_route!.route_with_platform { throwError: "AbidjanTransport : Il manque des arrêts (platform) dans ce parcours"; } relation.pt_route_master[network=~/^Woro*/][!vehicle:colour] { throwError: "AbidjanTransport : Il manque le tag vehicle:colour pour indiquer la couleur du woro woro"; } relation.pt_route_master[network=~/^Woro*/][vehicle:colour][vehicle:colour=~/^#/][vehicle:colour!~/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/] { throwError: "AbidjanTransport : le tag vehicle:colour pour indiquer la couleur du woro woro semble incorrect"; } relation.pt_route_master[network=~/^Woro*/][!vehicle:colour][colour] { throwError: "AbidjanTransport : la couleur du woro woro est à mettre dans le tag vehicle:colour"; } relation.pt_route_master[!opening_hours] { throwError: tr("AbidjanTransport : Il manque les horaires de service (opening_hours) de la ligne"); fixAdd: "opening_hours=Mo-Su,PH 05:00-22:00"; } relation.pt_route_master[!interval] { throwError: tr("AbidjanTransport : Il manque la fréquence de passage (interval) de la ligne"); } relation[type=route][interval] < relation[type=route_master][interval][!interval:note] { throwError: "AbidjanTransport : la fréquence de passage est définie sur la ligne et sur le parcours. Si c'est la même, il suffit de la définir sur la ligne (route_master)"; } relation.pt_route[!opening_hours][interval] { throwError: tr("AbidjanTransport : Il faut préciser les horaires de service (opening_hours) du parcours"); fixAdd: "opening_hours=Mo-Su,PH 05:00-22:00"; } relation.pt_route[!duration] { throwError: "AbidjanTransport : Il manque la durée du trajet (duration) sur ce parcours. On peut l'obtenir à partir de la trace GPS dans Voodoo"; }