Comment gérer le versioning dans OpenStreetMap?

11

Le sujet de la gestion des données géospatiales dans un sens plus général a déjà été évoqué ici. Le sujet de la gestion des versions a également été mentionné, mais pas vraiment traité.

La collecte et la maintenance des données géospatiales traditionnelles n'ont besoin que de gérer les versions en interne, car la base de données est uniquement mise à jour depuis l'organisation. Ce n'est pas le cas dans les géodatabases crowdsourcées comme OpenStreetMap. Là, tout le monde peut venir et ajouter, modifier ou supprimer des objets. Dans OpenStreetMap, cela est traité de manière rudimentaire: chaque objet a un numéro de version entier, et seul l'objet avec la version la plus élevée est exposé dans la base de données en direct. La base de données utilise un verrouillage optimiste, les utilisateurs doivent donc résoudre tous les conflits qui se produisent lors du téléchargement manuel des contributions.

Tout cela fonctionne assez bien tant que les contributions humaines via les éditeurs ( JOSM , Potlatch ) sont le seul mode de contribution - mais elles ne le sont pas. De plus en plus, des importations de données ouvertes sur le secteur public sont effectuées. Cela rend les problèmes de version plus complexes. Considérez le scénario suivant:

  1. Un objet de construction est importé à partir d'un ensemble de données du secteur public ouvert
  2. Le bâtiment reçoit quelques modifications par des contributeurs humains (attributs, géométrie, ou les deux)
  3. Une nouvelle version des données du secteur public devient disponible et est importée.

Actuellement, à l'étape 3. les contributions humaines seraient perdues, à moins que chaque bâtiment qui a reçu des modifications de la communauté soit fusionné manuellement avec la nouvelle importation.

Comment OpenStreetMap peut-il gérer cette situation? Faut-il considérer le contrôle de version distribué dans le développement logiciel? Comment les méthodes de DVC peuvent-elles être adaptées pour gérer la maintenance des données spatiales distribuées?

mvexel
la source

Réponses:

5

J'ai rêvé de quelqu'un implémentant une édition non destructive pour les données SIG. Il est intensif en calcul mais ne devrait pas être difficile à implémenter dans un SGBDR.

Commencez par un instantané des données. Toutes les modifications sont enregistrées sous forme de modifications, les données d'origine restent inchangées. Dans votre exemple, les bâtiments proviennent initialement des données du secteur public. Lorsqu'un utilisateur effectue une modification, la modification ou la différence est enregistrée dans un tableau séparé. Lorsqu'une personne affiche la fonctionnalité, elle reçoit l'original et les modifications appliquées. Les modifications suivantes sont la différence calculée entre la nouvelle forme de fonction et l'original plus toutes les modifications précédentes.

Cela vous donne la possibilité d'annuler à un niveau à grain fin. C'est essentiellement ce que fait le contrôle de version. Un bon exemple de montage non destructif est Aperture d'Apple. Les images numériques importées dans Aperture ne sont pas modifiées directement. Les changements de niveaux, la netteté, le flou, etc. sont stockés sous forme de modifications et appliqués à la volée lorsque vous travaillez avec une image. Tout changement peut être instantanément supprimé.

Bien sûr, vous prendriez des instantanés de la base de données pour la distribution et l'utilisation dans des environnements de production. Ce ne serait que pour le développement et l'édition.

Jetez un œil à Versioning PostGIS , pgVersion et Post Facto pour des idées et des solutions possibles. Ce sont des systèmes de contrôle de version implémentés dans les bases de données PostgreSQL.

Sean
la source
3

OSM utilise Postgres et Postgis qui conserve un instantané de la base de données.

Pour l'implémenter sur votre propre serveur et base de données

http://wiki.openstreetmap.org/wiki/Databases#Choice_of_DBMS

La base de données (plantet.osm) est mise à jour chaque semaine http://wiki.openstreetmap.org/wiki/Planet_dump

L'osmose est utilisée pour"il a des composants pour lire à partir de la base de données et du fichier, des composants pour écrire dans la base de données et dans le fichier, des composants pour dériver et appliquer des ensembles de modifications aux sources de données"

http://wiki.openstreetmap.org/wiki/Osmosis

Changsets: http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage#Changeset_Derivation_and_Merging

Mapperz
la source
0

J'ai pensé à ce problème et j'ai eu une idée, mais je ne l'ai pas testée. Cela peut fonctionner:

Utilisez un système de contrôle de version comme Mercurial ou Git. Mercurial sera plus facile, car il permet de créer facilement des branches anonymes.

Maintenant, à partir de la révision initiale, démarrez une branche pour les importations d'ensemble de données publiques. Donc, il y aura 2 branches:

  1. ligne principale (OSM)
  2. ensemble de données public X

Une importation à partir de l'ensemble de données public doit être effectuée dans la branche 2, puis fusionnée dans la branche OSM.

Votre scénario pourrait fonctionner comme ceci:

  • un objet n'existait pas
  • puis il est importé et fusionné dans la branche 1
  • puis il est modifié en ligne principale, y compris la géométrie
  • il est à nouveau importé dans la branche 2
  • lorsqu'il est fusionné dans la branche 1, seules les données qui ont été mises à jour dans la branche 2 sont mises à jour dans la branche 1

Cela peut nécessiter la division des données en plusieurs fichiers, un par objet et probablement dans un format comme json, afin que VCS puisse facilement gérer les modifications apportées à des attributs distincts.

{
     id: 1357
     lat: 1,
     lon: 2,
     tags: {
          'building': 'entrance'
     }
     type: 'node',
}
{
     nodes: [
         1357,
         2468
     ],
     tags: {
         building: 'yes',
     }
     type: 'way',
}

Je sais que diviser une information en un milliard de fichiers est trop pour n'importe quel système. Au lieu de cela, le noyau de VCS doit être utilisé et les données OSM doivent être traitées et introduites dans VCS sous une forme versionnable. (Ou un système de fichiers peut être moqué).

Je ne peux pas garantir que cela fonctionnera.

culebrón
la source