Résoudre les conflits
Introduction
Parfois lorsque vous travaillez sur JOSM et que vous voulez envoyer sur le serveur (upload) les modifications de la base liées à vos éditions, vous obtenez ce message inquiétant :
Il vous indique que l'envoi n'a pas fonctionné parce qu'un autre utilisateur a envoyé ses éditions qui concernent certains des objets que vous avez également édités. Le message précise que vous avez téléchargé la zone en premier donc vous possédez la version 1, mais le serveur a une version 2 plus récente. Plus spécifiquement, le nœud 2 549 547 834 est la source du problème. C'est cet objet qui a été modifié par quelqu'un d'autre entre le moment où vous l'avez téléchargé et le moment où vous avez voulu envoyer vos modifications.
Cette boîte de dialogue est spécifique aux conflits dans JOSM. Dans ce logiciel, un conflit correspond à une incapacité du serveur OSM à déterminer quelles éditions envoyées doivent être considérées pour mettre à jour la base de données. Fondamentalement, le serveur OSM a reçu des éditions qui ont modifié des objets identiques ou similaires et JOSM ne sait lesquelles doivent être choisies.
Les sujets abordés dans ce chapitre:
- Notion de conflits dans OSM
- Résolution des conflits
- Bonnes pratiques pour éviter les conflits
1. Notion de conflits dans OSM
Lorsque vous éditez dans JOSM, vous êtes en train d'éditer une copie, ou un clone, de la carte principale. JOSM charge des objets OSM depuis le serveur principal et les garde en mémoire sur votre ordinateur. Vous rencontrez des conflits lorsque vous envoyez sur le serveur principal des éléments modifiés, ajoutés ou supprimés sur votre carte que quelqu'un d'autre a également édités dans l'intervalle entre votre téléchargement et l'envoi de vos modifications.
En effet, dans la mesure où vous travaillez sur une copie locale d'OSM sur votre ordinateur, d'autres utilisateurs peuvent aussi récupérer, éditer et remonter des donnés vers le serveur OSM (upload) concernant les mêmes objets OSM que vous. Vous n'avez pas la possession des objets sur lesquels vous êtes en train de travailler : vous les partagez. Ainsi, lorsque des objets que l'autre utilisateur et vous même avez envoyés sur le serveur principal à des moments différents, celui-ci ne sait pas quel envoi doit être conservé et utilisé et vous informe donc sur ce conflit. JOSM est capable de résoudre seul certains conflits, et parfois vous pourrez rencontrer un message d'erreur tel que celui-ci :
Ce message indique que JOSM a supprimé certains des objets de l'extrait téléchargé dans JOSM car ils ont depuis été supprimés sur le serveur
Cela signifie que JOSM a décidé automatiquement que des objets de votre extrait local de données ne seront pas envoyés sur le serveur principal parce qu'ils ont été supprimés par un autre utilisateur.
Cependant, pour certains conflits, il n'y a pas pour JOSM de décision simple à prendre et le logiciel laisse alors à l'utilisateur le choix de prendre la meilleure décision. Ainsi, le conflit a besoin d'être résolu :
Ce message vous informe de la nécessité de regarder les conflits du Calque de données dans la boîte de dialogue des Conflits.
Ce message vous fournit un avertissement sur le fait que vous allez probablement rencontrer des conflits avec vos éditions. Si vous cliquez sur “Vérifier sur le serveur”, vous allez être en mesure de corriger les erreurs d'édition que le serveur va avoir mis en évidence .
2. Résolution des conflits
Résoudre les conflits est nécessaire, sinon aucune de vos éditions ne pourra être envoyée sur le serveur OSM. Pour résoudre un conflit, vous devez choisir la meilleure option pour chaque édition. Lorsque vous êtes confronté à cette fenêtre de détection des conflits, il vaut mieux toujours choisir le premier bouton à gauche, intitulé “Synchroniser le nœud x xxx xxx xxx” ou “Synchroniser seulement les chemins xxx xxx xxx”. Cette option vous permet de gagner du temps et d'éviter des maux de tête dans la mesure où un seul conflit va être considéré à la fois. Si vous choisissez “Synchroniser tout le jeu de données”, JOSM communiquera avec le serveur principal à propos de toutes les éditions et tous les objets. Cette option est seulement nécessaire lorsque vous avez un grand nombre de conflits et d’éditions et a l’inconvénient d’engendrer parfois de la confusion.
Le conflit apparait alors dans la fenêtre latérale “Conflits” à droite
au sein du panneau des fenêtres latérales. Dans la barre d'outils
verticale à gauche, l’icône permet
d’afficher/désafficher cette fenêtre, de même que le raccourci clavier
SHIFT+ALT+C. Cette fenêtre liste les conflits existants, dont le nombre
total apparaît en haut dans la zone de titre de la boîte. Vous ne pouvez
pas envoyer vos modifications avant que cette liste ne soit vide.
Au passage de la souris sur la fenêtre, deux boutons s’affichent :
Avant de commencer à résoudre, il est intéressant de visualiser le nœud
pour comprendre la raison du conflit. Cliquer d’abord sur le conflit
puis sur le bouton . Faites un clic droit
sur le conflit à résoudre, et cliquer sur “Zoomer sur conflit”.
La carte dans JOSM va être centrée sur le nœud en conflit qui apparaît
sélectionné en rouge. Vous pouvez ainsi le voir et vous remémorer quand
vous l’avez créé ou modifié. Cliquez ensuite sur le bouton
qui va ouvrir une fenêtre qui détaille
votre conflit et permet d’effectuer sa résolution.
Le message d'erreur qui apparaît peut sembler compliqué, mais il est en
fait assez simple. Vous saurez à quel type de conflit vous êtes
confronté grâce au symbole dans les onglets
en haut :
- Propriétés : sur le serveur OSM, le nœud a une nouvelle version de ses coordonnées ou de son état (supprimé/non supprimé).
- Attributs : sur le serveur OSM, le nœud a une nouvelle version de ses attributs (ajoutés, modifiés ou supprimés).
- Nœuds : sur le serveur OSM, le nœud s’il y a des différences entre les deux listes de nœuds d’un même chemin (way), par exemple une route. Cette possibilité n’existe que pour ce type d’objets et seulement si vous avez préalablement cliqué sur “Synchroniser tout le jeu de données”.
- Membres : sur le serveur OSM, le nœud s’il y a des différences entre les deux listes de membres d'une relation.
A. Conflits sur les propriétés
Les propriétés concernent l'emplacement ou l'existence de l'objet. C'est pourquoi les coordonnées et l'état (non supprimé ou supprimé) de l’objet sont listés.
La fenêtre des conflits présente seulement deux différentes éditions à
la fois. Votre version, nommée “Ma version”, apparaît à gauche. La
“Version du serveur” apparait à droite. Au centre la “Version fusionnée”
sera le résultat de la résolution. Lorsque le conflit concerne les
propriétés, il est important d’avoir regardé auparavant l’objet concerné
afin de déterminer si ses coordonnées ou son état correspondent à la
réalité. Si votre version vous semble la meilleure, cliquez sur
. Si vous pensez qu’au contraire, c’est
celle du serveur, cliquez sur
. Lorsque vous
avez cliqué, la version choisie apparait comme la version fusionné et la
couleur de fond passe du rouge ou vert, de mêtre que devant l’onglet, il
y a désormais un
.
Lorsque les conflits sur les propriétés ont tous été résolus, cliquez
sur le bouton s’il n’est plus grisé. Les
valeurs que vous avez choisies seront appliquées et la fenêtre se
fermera. Le conflit est résolu et disparait de la liste des conflits.
Lorsque la liste est vide, il est possible d’envoyer les modifications
au serveur OSM. Si un autre onglet est marqué du symbole
, il faut d’abord le résoudre.
B. Conflits sur les attributs
Si les attributs d'une version sont différents des attributs d'une autre
version, la boite de dialogue pour Résoudre les conflits affiche un
dans l'onglet “Attributs”. Cliquez sur
l'onglet pour afficher la fenêtre de résolution des conflits spécifiques
aux attributs. Il y a trois tableaux affichés dans cette fenêtre, de
gauche à droite :
- “Ma version” : montre les attributs de la première version participant au conflit de l'objet. Il s'agit habituellement de votre calque de données.
- “Version fusionnée” : montre les attributs fusionnés. Ce tableau est vide au départ. Plus vous résolvez des conflits d’attributs, plus des attributs vont apparaître dans ce tableau.
- “Version du serveur” : montre les attributs de la deuxième version participant au conflit de l'objet. Ce sont habituellement les attributs de la version de l'objet actuellement enregistrée sur le serveur OSM.
Dans l'exemple ci-dessous, les deux versions ont un tag avec la clé “name”. Cependant, les valeurs sont différentes pour les deux versions de l'objet. La valeur de la première version est “Eglise Ste Thérèse”, et la version opposée possède la valeur “Eglise Sainte-Thérèse”.
Vous devez maintenant décider quelle est la valeur que vous voulez
conserver et celle que vous allez rejeter. Dans le cas présent, “Eglise
Sainte-Thérèse” respecte les règles des noms d’objets en cartographie,
alors que la version abrégée “Eglise Ste Thérèse” est incorrecte. La
version de droite (“Version du serveur”) va ainsi être celle qui va être
conservée en cliquant sur le bouton .
En cas d’erreur, sélectionner l’attribut à annuler dans le tableau
central “Version fusionnée” et cliquer sur le bouton
.
Le deuxième attribut en conflit est d’un type différent : “Ma version”
ajoute un attribut dont la clé n’existe pas dans la “Version du
serveur”, qui apparait ainsi comme “, sinon cliquez sur
. Dans l’exemple ci-dessous, “Ma version” a
été conservée.
Tous les attributs en conflit ont été résolus et la couleur de fond devient verte.
Lorsque les conflits sur les attributs ont tous été résolus, cliquez sur
le bouton s’il n’est plus grisé. Les valeurs
que vous avez choisies seront appliquées et la fenêtre se fermera. Le
conflit est résolu et disparait de la liste des conflits. Lorsque la
liste est vide, il est possible d’envoyer les modifications au serveur
OSM. Si un autre onglet est marqué du symbole
, il faut d’abord le résoudre.
C. Conflits sur les nœuds
Les conflits sur les nœuds ne concernent ni les objets représentés par un point, ni ceux représentés par un polygone, mais ceux représntés par un chemin, par exemple une route. Le message de détection du conflit va mentionner ceci, comme dans l’exemple ci-dessous :
Il s’agit ici de résoudre les différences dans la liste des nœuds de deux chemins : cela ne concerne ni les objets représentés par un point, ni ceux représentés par un polygone. Cliquez sur “Synchroniser seulement les chemins xxx xxx xxx”. Dans la fenêtre latérale “Conflits” à droite au sein du panneau des fenêtres latérales apparait en conflit à la fois le chemin complet et chacun des nœuds en conflit. Dans l’exemple ci-dessous, des conflits concernent trois nœuds d’un chemin qui apparait en bas de la liste.
Comme expliqué plus haut, il est conseillé de regarder les nœuds
affectés en les sélectionnant, puis en faisant un clic droit pour
pouvoir accéder à . Dans notre exemple, le
conflit concerne une section de route primaire de plusieurs dizaines de
km de long, ce qui est un cas courant de création de conflits de chemin.
En effet, compte tenu de la longueur de l’objet, il est tout à fait
possible qu’un autre utilisateur l’ait édité en dehors de la zone
téléchargée, comme montré dans l’exemple ci-dessous.
La zone téléchargée fait moins d’un km de large et comprend deux sections de routes primaires.
Ces sections de route primaire font en fait plusieurs dizaines de km de long.
Réglez d’abord tous les conflits de propriétés des nœuds comme indiqué plus haut, puis passez à l’objet chemin, généralement en bas de la liste.
Le symbole est présent devant l'onglet
“Nœuds en conflits”. Il y a trois tableaux affichés dans cette fenêtre,
de gauche à droite :
- “Ma version” : montre la liste des nœuds de la première version participant au conflit de l'objet. Il s'agit habituellement de votre calque de données.
- “Version fusionnée” : montre la liste des nœuds fusionnés. Ce tableau est vide au départ. Plus vous résolvez des conflits de nœuds, plus des nœuds vont apparaître dans ce tableau.
- “Version du serveur” : montre la liste des nœuds de la deuxième version participant au conflit de l'objet. Ce sont habituellement les attributs de la version de l'objet actuellement enregistrée sur le serveur OSM.
A la différence de la résolution des conflits de attributs (voir plus haut), l’ordre des nœuds dans le tableau de la version fusionnée est important, car il conditionne l’ordre dans lequel les nœuds se relient les uns aux autres dans l’objet chemin.
Il peut être difficile de voir la différence entre les différentes listes de nœuds des trois tableaux, en particulier pour les chemins comprenant un grand nombre de nœuds. La fenêtre des conflits permet de voir les différences en comparant deux des trois tableaux de nœuds (“Ma version”, “Version fusionnée”, “Version du serveur”) et montre les différences avec des fonds de couleur différents. Les couleurs ont la signification suivante :
indique que ce nœud du chemin n’engendre pas de conflit.
indique que ce nœud du chemin existe dans les deux listes, mais à une position différente dans l’ordre des nœuds.
indique que ce nœud du chemin n’existe que dans une seule version.
A partir de la liste déroulante, vous pouvez sélectionner quelles listes de nœud vont être comparées :
Procédure standard
Pour résoudre les conflits de chemin, la procédure standard comprend trois étapes :
- Choisissez les nœuds à conserver parmi les entre “Ma version” et “Version du serveur” et changez l’ordre des nœuds si nécessaire. Des explications sont fournies plus bas.
- Figer la liste fusionnée qui en résulte en cliquant sur le bouton
. Vous indiquez ainsi à JOSM que la liste des conflits pour cet objet a été résolue.
- Appliquer la résolution.
Procédure simple : conserver l’intégralité de la liste des nœuds d’une version
La procédure la plus simple est celle où vous décidez de conserver tous les nœuds d’une des deux versions, la vôtre ou celle du serveur. Elle a l’inconvénient de ne rien conserver des ajouts ou améliorations faites dans l’autre version.
Cliquez sur (ou
si vous avez sélectionné tous les nœuds de
la version du serveur) ou sélectionnez d’abord tous les nœuds (avec la
souris ou Ctrl-A) d’une des deux tables, à droite ou à gauche (à gauche
dans l’exemple).
Cliquez ensuite sur (ou
si vous avez sélectionné tous les nœuds de
la version du serveur) pour que tous ces nœuds apparaissent dans la
table de la version fusionnée au centre :
Enfin, cliquez sur pour figer la version
fusionnée de la liste de nœuds.
Le symbole devant l’onglet est désormais et
vous pouvez cliquer sur le bouton
s’il n’est
plus grisé. Les valeurs que vous avez choisies seront appliquées et la
fenêtre sera fermée. Le conflit est résolu et disparait de la liste des
conflits. Lorsque la liste est vide, il est possible d’envoyer les
modifications au serveur OSM.
Procédure avancée : sélectionner la meilleure version de chaque nœud
Cette procédure vise à ne pas supprimer l’ensemble des éditions d’une des deux versions, mais de conserver le meilleur des deux. Elle nécessite de traiter tous les nœuds en faisant attention à leur ordre dans la version fusionnée. L’exemple ci-dessous va montrer pas à pas comment procéder.
La liste des conflits des nœuds parait complexe mais est en fait
relativement simple. Tout d’abord, les 8 premiers nœuds, en vert, ne
pose pas de problème. Le 9ème nœud de “Ma version” est un nouveau nœud
créé dans la sessions d’édition en cours, comme le montre le fait que ce
nœud n’a pas encore d'identifiant. Ce nouveau nœud, qui s’insère entre
les noeuds et
,
crée de fait un décalage par rapport à la “Version du serveur” qui ne le
comprend pas. De fait, l’ordre des nœuds n’est plus le même et tous les
nœuds qui suivent sont de couleur orange, à l’exception des nouveaux
nœuds : le nœud de la ligne 15 à gauche et de la ligne 14 à droite. Nous
allons conserver tous les nœuds communs aux deux versions, ainsi que les
nouveaux créés dans chacune des deux versions. Nous allons d’abord
sélectionner les huit premiers nœuds, communs aux deux versions, par
exemple à gauche, et les placer dans le tableau de la “Version
fusionnée” en cliquant sur
.
Puis dans l’exemple, il convient de sélectionner le nouveau nœud de la
ligne 9 à gauche et cliquez sur pour le
placer à la suite des autres dans la “Version fusionnée”.
“Il convient ensuite de continuer de la même manière pour les nœuds
suivants : 9 à 14 à droite, 15 à 22 à gauche, etc. de sorte que tous les
nœuds soient placés dans la "Version fusionnée” en prenant garde à bien
respecter leur ordre (par exemple ne pas mettre le nœud 12 avant le nœud
11 dans l’exemple ci-dessus). En cas d'erreur, il est possible de
sélectionner un nœud dans la “Version fusionnée” et de le déplacer avec
ou
, ou bien le
supprimer de cette liste avec
.
Une fois cela fait, cliquez sur puis sur
. Les valeurs que vous avez choisies seront
appliquées et la fenêtre sera fermée. Le conflit est résolu et disparait
de la liste des conflits. Lorsque la liste est vide, il est possible
d’envoyer les modifications au serveur OSM.
3. Bonnes pratiques pour éviter les conflits
Les conflits apparaissent plus fréquemment pour ceux qui :
- ont tendance à sauvegarder leur zone de travail sur leur serveur local et attendent un certain temps avant de l'envoyer sur le serveur principal (upload). Il est préférable de télécharger votre zone de travail, de l'éditer et d'envoyer les modifications immédiatement.
- travaillent sur des zones traversées par des objets plus grand que la zone de téléchargement. Les routes sont un cas fréquent.
Pour minimiser les chances de rencontrer des conflits ou en limiter le nombre, il est utile :
- d’éditer uniquement sur la zone que vous avez téléchargée. Assurez-vous de ne jamais éditer en dehors de cette zone de téléchargement.
- d'envoyer les modifications régulièrement en cliquant sur
. Afin d’éviter la multiplication des groupes de modification (changesets), veuillez configurer l’onglet “Groupe de modifications” de la fenêtre d’envoi en décochant “Fermer le groupe après l’envoi”. Envoyez les données et au prochain envoi, configurez “Envoyer vers un groupe existant” comme montré ci-dessous :
- de mettre à jour les données régulièrement en allant dans le menu
“Fichier” et cliquer sur
.
Résumé
Lorsque vous éditez dans JOSM, qui télécharge des extraits de la carte OSM, vous prenez le risque de engendrer des conflits. Les conflits se produisent lorsqu'un même objet a été édité par deux personnes à des moments proches. Ces conflits doivent être résolus avant de pouvoir envoyer les modifications de vos éditions au serveur OSM. Ce chapitre a présenté une approche détaillée de la résolution des conflits dans JOSM.