FR:JOSM/Greffons/PT Assistant
Documentation pour le greffon Assistant pour les Transports Publics de JOSM (pt_assistant) : Introduction
Cartographier les transports publics avec JOSM
Le greffon valide les itinéraires (route) de transport public à partir d’un ensemble de critères et suggère, si possible, des moyens de les réparer.
Le greffon n'a pas d'interface utilisateur dédiée, il est entièrement intégré dans le noyau du Validateur de JOSM.
Cette page "est éditée" et reflète seulement l'état actuel du greffon. L'avancement du travail peut se trouver ici (en), dans l'ordre chronologique.
Une présentation du greffon à la conférence du FOSS4G (Brussels, 22.09.2016) est disponible ici (en).
Le code du greffon est dans le dépôt github de JOSM.
Voir aussi les Objectifs (en).
Champ d’application du greffon
Relations d'itinéraire (route relation) pour lesquelles il est possible de signaler des erreurs et de proposer des corrections
Il y a deux versions du schéma de transport public, et certains types d'itinéraires sont mappés différemment que d'autres.
Une relation d'itinéraire est testée par le greffon si elle :
- a l’attribut
public_transport:version=2
ET
- a un des attributs :
ET
- n’a pas l’attribut
bus=on_demand
(Les bus "on_demand" (TAD) n’ont pas d'itinéraires fixes, mais disposent généralement d'une liste de stations auxquelles ils peuvent s'arrêter (certains opérateurs de réseau peuvent ajouter des arrêts supplémentaires après une réservation spécifique et une autorisation, si la sécurité de l'arrêt et les conditions de circulation locales le permettent). Il n'est donc pas possible d'ajouter des chemins pour décrire ces itinéraires.
Membres pertinents de la relation d'itinéraire (route)
Critères pour les attributs "platforms" et "stop_positions" (PTStop) :
- Le rôle du membre de la relation est
,stop
,stop_entry_only
,stop_exit_only
,platform
ouplatform_entry_only
.platform_exit_only
- Si "OsmPrimitiveType" est un "Node", le membre de la relation devrait avoir les attributs
public_transport=stop_position
,highway=bus_stop
,public_transport=platform
,highway=platform
ourailway=platform
- Si "OsmPrimitiveType" est un "Way", les membres de la relation doivent avoir les attributs
public_transport=platform
,highway=platform
ourailway=platform
- Si "OsmPrimitiveType" est une "Relation", ce membre de la relation ne peut pas être un "PTStop".
Chaque arrêt correspond à un "plugin class PTStop". Si une relation d'itinéraire comporte deux membres consécutifs qui appartiennent au même arrêt (un "platform" et un "stop_position"), ils formeront un "PTStop".
Critères pour les chemins "ways" (PTWay) :
- Ne peut pas être un nœud "Node" de "OsmPrimitiveType"
- Si le "OsmPrimitiveType" est "Way", le membre de la relation ne peut pas avoir d’attributs
public_transport=platform
,highway=platform
ourailway=platform
- Si le "OsmPrimitiveType" est une "Relation", cette relation imbriquée est uniquement autorisée à avoir des "Ways" en tant que membres.
Si un membre de la relation d'itinéraire ne satisfait pas à ces critères, il n'est pas ajouté au modèle, mais un avertissement "PT: Relation Member roles not match tags" (PT: Les rôles des membres de la relation ne correspondent pas aux attributs) apparaît.
Tests disponibles
# | Message d’erreur | Quel est le problème ? | Que se passe-t-il si j'appuie sur le bouton "Réparer" ? | Auteur |
---|---|---|---|---|
1 | PT: Le type d’itinéraire ne correspond pas au type de route sur lequel il passe | Le type d'itinéraire (p. ex. bus/tram/train etc.) doit passer sur un chemin qui corresponde à ce type, p. ex. les trains ont besoin de rails et les bus ne doivent pas circuler dans les rues qui sont réservées aux piétons ou aux bicyclettes. | JOSM zoome sur le problème, sélectionne la(les) voie(s) problématique(s) et ouvre l’éditeur de relation pour l'itinéraire correspondant. | darya |
2 | PT: La route est en construction | C’est une route marquée comme étant en construction. | JOSM zoome sur le problème, sélectionne la(les) voie(s) problématique(s) et ouvre l’éditeur de relation pour l'itinéraire correspondant. | darya |
3 | PT: l’itinéraire passe une route à sens unique dans la mauvaise direction | Le chemin a un attribut l’indiquant en sens unique, et l’itinéraire l’emprunte dans la mauvaise direction. Ce test fonctionne uniquement pour des chemins seuls, mais ne détecte pas les séquences plus complexes avec des chemins dans le mauvais sens et des tronçons de carrefours giratoires. | JOSM zoome sur le problème, sélectionne la(les) voie(s) problématique(s) et ouvre l’éditeur de relation pour l'itinéraire correspondant. | darya |
4 | PT: Le trajet contient un trou qui peut être corrigé par un tri | Si les membres de la relation d'itinéraire sont analysés dans l'ordre actuel, il y a une rupture dans la continuité (un écart fictif). Si le tri était effectué, il n'y aurait pas de coupure. En outre, ce message indique qu'il n'y a pas d'autres problèmes détectés dans cet itinéraire car, en cas de vides réels (chemins absents), le tri ne serait pas suffisant pour éliminer les manques. | Les membres de la relation d'itinéraire sont triés. | darya |
5 | PT: Les rôles des membres de la relation ne correspondent pas aux attributs | Un membre de la relation d'itinéraire ne remplit pas les critères pour PTStop ou PTWay énumérés ci-dessus dans "Membres pertinents de la relation d'itinéraire (route)" | Pas de correction disponible. | darya |
6 | PT: l’itinéraire doit commencer et se terminer par stop_position | Il n'y a pas de stop_position au début ou à la fin de l'itinéraire. | Pas de correction disponible. | darya |
7 | PT: Le premier ou le dernier chemin doit être divisé | Le stop_position au début/fin de l'itinéraire existe mais ce n'est pas le premier ou le dernier nœud du chemin. | Pas de correction disponible. | darya |
8 | PT: La position d’arrêt ne fait pas partie d’un chemin | Le stop_position n'est référencé par aucun chemin avec un attribut de public-transport (comme platform, railway , etc.). | On demande à l'utilisateur s'ils veulent changer la valeur de l’attribut du nœud en "platform". Si l'utilisateur appuie sur "oui", l’attribut est corrigé. | darya |
9 | PT: L’arrêt (platform) ne doit pas faire partie d’un chemin | Le nœud "platform" fait partie d'un "way". | On demande à l'utilisateur s'il veut modifier la valeur de l’attribut du nœud à "stop_position". Si l'utilisateur appuie sur "oui", l’attribut est corrigé. | darya |
10 | PT: arrêt non desservi | L'arrêt (et ses éléments "platform" et/ou "stop_position") sont situés trop loin (> = 0,002 degrés) de n'importe quel chemin de l'itinéraire donné. | Pas de correction disponible. | darya |
11 | PT: problème dans le trajet avec une correction automatique | Les chemins entre deux arrêts consécutifs (comme indiqué dans la relation d'itinéraire) ne sont pas continus. Cela peut être pour diverses raisons: segments absents ou segments présents mais inutiles, mauvais classement, "ways" non découpés, etc. | Les chemins du segment d'itinéraire (c-à-d la partie de l'itinéraire entre deux arrêts consécutifs) sont remplacées par le segment correct correspondant ou par les chemins qui constituent l'itinéraire donné. JOSM zoome sur le problème. | darya |
12 | PT: Problème dans le trajet avec plusieurs corrections automatiques | Les chemins (ways) entre deux arrêts consécutifs (comme indiqué dans la relation d'itinéraire) ne sont pas continus. Cela peut être dû à diverses raisons : segments absents ou présence de segments inutiles, mal triés, chemins "ways" non découpés, etc. | Les variantes du correctif sont affichées avec des couleurs différentes et JOSM zoome sur le problème. Les 5 premières variantes peuvent être affichées et marquées avec les lettres A-E. L'utilisateur peut soit sélectionner la lettre correspondante, soit appuyer sur Echap pour aucune correction. Une fois qu'une variante du correctif est sélectionnée, l'itinéraire est modifié et la fenêtre de l’éditeur de relation s'ouvre, avec les chemins "ways" problématiques sélectionnés. | darya |
13 | PT: Problème dans le trajet sans correction automatique | Les chemins "ways" entre deux arrêts consécutifs (comme indiqué dans la relation d'itinéraire) ne sont pas continus. Cela peut être pour diverses raisons: segments absents ou segments inutiles présents, mal triés, chemins "ways" non découpés, etc. | Correction désactivée | darya |
14 | PT: La relation de zone d’arrêt n’a pas de stop position | Il y a une relation "stop area" sans "stop_position" spécifié. | Pas de correction disponible. | xamanu |
15 | PT: la relation de zone d’arrêt n’a pas de plateforme | Il y a une relation "stop area" sans "platform" spécifiée. | Pas de correction disponible. | xamanu |
16 | PT: Stop La position ou la plate-forme ne fait pas partie d’une relation de zone d’arrêt | Tous les éléments marqués comme "stop_position" et "platform" devraient faire idéalement partie d'une relation "stop area". | Pas de correction disponible. | xamanu |
17 | PT: Les relations d’itinéraire de la (des) positions d’arrêt et la (les) plateforme(s) d’éléments de zone d’arrêt divergent | Il existe un écart entre les relations d’itinéraires de "public transport" affectées aux "stop position(s)" et "platform(s)" qui font partie d'une relation "stop area". | Pas de correction disponible. | xamanu |
Recommandations
- Activez l'option "Utiliser le calque d'erreur" pour une meilleure visualisation des primitives problématiques (Préférences => Validateur de données => Tests => Utiliser le calque d'erreur).
- Si vous activez l'option "Télécharger les membres incomplets de la relation d’itinéraire" dans les "Préférences => Paramètres PTAssistantPlugin => Validateur" en travaillant sur un grand ensemble de données, sélectionnez les relations d'itinéraires souhaitées avant de valider, sinon le téléchargement de membres incomplets peut prendre trop longtemps.
- Ouvrez la fenêtre "Pile de commandes" dans JOSM, surtout si vous utilisez les correctifs automatisés pour les avertissements liés au segment d’itinéraires ("PT: problème dans le trajet..."). Cela vous aidera à voir quels changements ont été effectués et à faire un "revert" si nécessaire.
Calque pt_assistant
Le greffon ajoute un calque supplémentaire nommé "pt_assistant" à la liste des calques.
Le calque s'affichera dès que l'utilisateur sélectionnera une relation d'itinéraire. Bien qu'il soit principalement destiné aux relations de transport public, il s'activera également pour les relations à vélo ou à pied. Une fois qu’au moins une relation d'itinéraire pertinente a été sélectionnée, elle reçoit une coloration pourpre. Les arrêts sont numérotés selon leur ordre dans la relation.

Tests "stop-by-stop" et multiples variantes de correctifs

Les tests #11-13 dans le tableau utilisent l'approche "stop-by-stop". Cela signifie qu'ils regardent séparément à chaque tronçon de l'itinéraire entre deux arrêts consécutifs (appelés 'route segment' dans cette documentation). Si aucune erreur n'a été trouvée dans un 'route segment', ce segment est ajouté à la liste des segments corrects. Ces tests recherchent des variantes de correctif dans l'ordre suivant :
- Recherche, dans la liste des segments corrects, un segment dont les premiers/derniers "ways" égale les premiers/derniers "ways" du 'route segment' problématique.
- Essaye de ré-ordonner et de supprimer les chemins "ways" du segment "problématique" lui-même afin d'obtenir une séquence continue de chemins "ways" entre les deux arrêts
- Recherche dans la liste des segments "corrects" pour un segment dont les premiers/derniers arrêts sont égaux aux premiers/derniers arrêts du 'route segment' problématique (dans ce cas, la notification Avertissement: les variantes de correction affichées sont basées sur des critères moins stricts est affichée)
Les tests "stop-by-stop" (#11-13) peuvent présenter plusieurs suggestions. Si le bouton “Réparer le problème” est pressé dans de tels cas, les suggestions sont affichées à l'aide de différentes couleurs dans le calque pt_assistant. Jusqu'à 5 options de correctif peuvent être affichées. Elles sont étiquetées à l'aide des lettres A-E. L'utilisateur peut sélectionner le correctif souhaité en tapant la lettre correspondante au clavier. La touche "Echap" peut être pressée pour ne choisir aucun correctif.
Modèle de données
Le greffon classe les membres de la relation d'itinéraire dans PTStops (classe PTStop) et PTWays (classe PTWay).
Un PTStop est conçu pour modéliser un stop_position et une platform consécutifs comme un seul arrêt s'ils sont assez proches (<0,002 degrés) l'un de l'autre. Un PTStop peut stocker le stop_position et/ou la platform comme ses éléments.
Un PTWay représente les chemins membres liés à la relation d'itinéraire (way-related members of a route relation). Le membre d’une relation peut être un chemin ou une relation.
Les critères pour les deux "PTStop" et "PTWay" sont listés ci-dessus (Portée). Si un membre de la relation d'itinéraire ne correspond pas à la définition de l'une de ces classes, il en résulte un avertissement "PT: Les rôles des membres de la relations ne correspondent pas aux attributs " (#5 dans le tableau).
Bien que non utilisé (largement) dans l'ensemble actuel des tests du validateur et des correctifs, le greffon a le potentiel de gérer les membres de relation imbriqués, c'est-à-dire les cas où un membre d'une relation d'itinéraire est lui-même une relation. Les conditions préalables sont que la relation imbriquée ne peut inclure que des chemins (ways, pas de stops) et l'ordre des chemins à l'intérieur de la relation imbriquée doit être correct (car il n'est pas encore validé). Dans la base, cette fonctionnalité a été implémentée dans les classes PTWay et PTDataManager.
"Stop-to-way assigner" (Attribution de l'arrêt à la voie)
Les arrêts doivent être liés au chemin (way) pertinent de leur relation d'itinéraire. En règle générale, c'est le chemin (way) le plus proche de l'arrêt en question. La recherche du chemin (way) correspondant dans l'ordre suivant :
- Vérifie si ce stop a déjà été affectée à un chemin (way). Les stops assignés sont stockés dans une table (HashMap).
- Si l'arrêt a un "stop_position", il l’utilise pour trouver le chemin (way) duquel le "stop_position" fait partie.
- Si les éléments de l'arrêt appartiennent à une relation "stop_area", recherche si cette "stop_area" contient un "stop_position" et utilise son chemin (way) de référence.
- Recherche d'un "stop_position" à proximité du stop (seuil de distance 0,002 degrés).
- Utilise un algorithme "growing-bounding-boxes". Trouve des nœuds dans une zone de délimitation "bounding box" de la taille donnée (qui augmente après chaque boucle de recherche infructueuse), puis trouve les chemins (ways) de l'itinéraire courant auquel ces nœuds appartiennent. S'il y a plusieurs possibilités, le chemin (way) le plus proche est sélectionnée en calculant la distance d'un point à la ligne. Ce calcul est basé sur les formules pour l'aire d'un triangle (formule "Heron" 1/2 x base x hauteur).

Un menu specifique a été ajouté aux menus de JOSM par le greffon avec les éléments :
- Découper le rond-point : Les giratoires peuvent être constitués d'un seul chemin fermé, mais cela n'est pas très esthétique lorsque l'on représente visuellement l'itinéraire. Les chemins sont divisés au niveau des nœuds qui comportent des chemins, lesquels sont membres de relations d'itinéraire (sauf lorsque route=road). Ensuite, chaque relation d'itinéraire est traitée et les chemins du giratoire qui ne sont pas nécessaires sont supprimés.
- Transférer les détails de l’arrêt au nœud plateforme :
- Trier les membres de la relation route :
- Assistant PT :
- Visualiser les lignes de transport public :
- Distance entre les arrêts :
- Personnaliser l’arrêt :

Deux éléments ont été ajoutés au menu Mode de JOSM par le greffon pt_assistant :
- Ajouter la position d'arrêt : ajoute un nœud stop_position à un emplacement spécifié, y compris les attributs. S'il s'agit du premier ou du dernier segment de l'itinéraire, celui-ci est divisé et seule la partie qui appartient réellement à l'itinéraire est conservée.
- Sélection des 'bords' : sélectionne plusieurs chemins connectés qui conviennent au mode de transport pour lequel l'éditeur de relations est actif. Un 'bord' est un ensemble continu de chemins entre des « bifurcations » ou entre une bifurcation et un point d'arrêt qui est le nœud final d'une voie.
Préférences

Les paramètres utilisateur sont stockés sous "Éditer => Préférences => Paramètres PTAssistantPlugin :
- Validateur :
- L'utilisateur peut sélectionner si les membres de la relation incomplète doivent être téléchargés. Dans le cas où une relation d'itinéraire a des membres incomplets qui n'ont pas été téléchargés, cette relation est ignorée sans validation.
- L'utilisateur peut décider d'exclure les tests qui imposent l'ajout de relations "stop_area" pour chaque arrêt.
- Déplacer les détails vers les nœuds situés à proximité de highway/railway
- Assistant de routage :
- Mode de modélisation du découpage du chemin au début/fin des relations d'itinéraire :