Skip to content
sebastien-bugzilla edited this page Aug 12, 2015 · 4 revisions

Wiki BatiOsm

Qu'est-ce que c'est ?

BatiOsm est un petit script python qui a pour but d'aider les contributeurs d'OSM pour mettre à jour les bâtiments de n'importe quelle commune de France. Il est spécifique à la France car il utilise les données issues du Cadastre Français. Il a été développé et utilisé sous Linux mais doit pouvoir s'utiliser sous d'autres systèmes d'exploitation.

Le but est de comparer les batiments qui existent dans OSM et ceux qui sont référencés par le cadastre. Il permet de mettre en valeur les batiments qui n'ont pas changés, ceux qui ont été légèrement modifiés et ceux qui ont été supprimés et ceux qui ont été créés. Ces quatre types de bâtiments sont enregistrés dans différents fichiers.

Ce qu'il n'est pas

Ce n'est pas un outil qui fait des miracles. Il permet juste de faire un tri systématique de tous les bâtiments. Il utilise les données du cadastre qui ne sont pas forcément publiable sans une validation préalable. Il est nécessaire (voire obligatoire) d'étudier les résultats et de décider si la modification doit être publiée sur OSM. L'implémentation des résultats dans josm ne doit pas être fait sans une validation complète (détection des noeuds confondus, des batiments superposés, etc...).

Comment l'utiliser ?

Obtenir les données d'entrées

Il y a deux fichiers à obtenir. Le premier contient les batiments existant (et les noeuds associés) d'une commune en l'état actuel d'OSM (ce qu'on cherche à mettre à jour). Le second contient les batiments existant (et les noeuds associés) d'une commune telle que le référence le cadastre. Ces deux fichiers sont au format xml et enregistré avec l'extensions osm.

obtenir les bâtiments existants d'une commune

Ce fichier peut être obtenu via une requête overpass-turbo. Par exemple, pour obtenir tous les Bâtiments de la commune de Buzy il faut utiliser cette requête : {{geocodeArea:Buzy}}->.searchArea; // gather results ( // query part for: “building=yes” node["building"="yes"](area.searchArea); way["building"="yes"](area.searchArea); relation["building"="yes"](area.searchArea); ); // print results out meta; >; out meta; Le nom de la commune doit être placé dans la première ligne de la requête et doit être celui qu'on trouve dans OSM. Il peut être judicieux de faire d'abord des recherches dans OSM pour être certain de l'orthographe (espaces, majuscules, traits d'union,etc...). Le fichier s'obtient en allant dans l'onglet 'Données' en haut à droite de la page. Il suffit de le copier dans un éditeur de texte et de l'enregistrer. Dans la suite ce fichier sera appelé "Buzy_as_is.osm".

obtenir les bâtiments d'une commune issus du cadastre

Pour obtenir ce fichier, cela se passe sur cette page. Il faut choisir le département et la commune puis cliquer sur "Générer". Les fichiers sont disponibles une fois que le l'encart "Import ok. Accès aux fichiers - à l'archive" apparait en haut de la page. C'est le fichier "nomCommune-houses.osm" qui nous intéresse. Dans la suite on ce fichier sera appelé "Buzy_to_be.osm".

Executer le script

Il est nécessaire d'avoir les 2 fichiers osm + le fichier python au même endroits. Le script s'execute en tapant dans un terminal : python BatiOsm.py Busy_as_is.osm Buzy_to_be.osm busy On retiendra que :

  • le premier fichier doit être celui qui correspond à l'état actuel de la carte (qui vient d'overpass-turbo)
  • le second fichier doit être celui qui correspond à celui qui vient du cadastre.
  • le troisième paramètre correspond à un préfixe qui est ajouté aux fichiers créés.

Fichiers obtenus

Lors de l'execution du script des indications doivent apparaitre dans le terminal. Il y a notamment le nombre de noeuds et de batiment dans chaque fichier ainsi qu'un bref compte rendu des résultats (nombre de batiment modifiés, identiques, nouveaux et supprimés). Normalement, de nouveaux fichier ".osm" sont apparus :

  • buzy_unModified.osm : tous les bâtiments qui ont été détectés comme identiques. Normalement c'est la grande majorité des batiments. Pas grand chose à faire avec ce fichier.
  • buzy_sup_1_a_13.osm : tous les bâtiments qu'il faudrait a priori supprimer. A vérifier au cas par cas.
  • buzy_new_1_a_47.osm : tous les bâtiments nouveaux a priori. Ils peuvent être ajoutés sur OSM (là encore il est nécessaire de contrôler les résultats, de merger les noeuds trop proches, etc...).
  • buzy_mod_1_a_139.osm : tous les bâtiments modifiés. C'est la catégorie la plus difficile à mettre à jour. Il faut regarder un par un chaque bâtiment et décider si la modification est suceptible d'apparaitre sur OSM. Il peut s'agir aussi de nouveaux batiments qui ont été arbitrairement classifiés comme modifiés alors qu'ils sont nouveaux. Même remarque que précédemment : il faut bien regarder ce qui existe, ce qu'on rajouter et ne pas faire n'importe quoi.
  • buzy_log.txt : là il s'agit d'un fichier qui recense les résultats du calcul. Il contient notamment le status attribué à chaque batiment (nouveau, identique, etc...).

Comment il marche ?

Le choix qui a été fait est de résumé un batiment à un point situé au centre de gravité du batiment. Cela permet de simplifier le problème et de pouvoir comparer facilement un batiment par rapport à un autre (puisque si un des noeuds change, le centre de gravité changera). Ensuite chaque batiment du fichier to_be on recherche le batiment du fichier as_is qui est le plus proche. Et suivant la distance entre ces deux point :

  • soit la distance est nulle où très faible. Le batiment identifié dans le fichier as_is n'est pas modifié. Les deux batiments sont identiques.
  • soit la distance est faible. Le batiment est considéré comme modifié.
  • soit la distance est importante. Le batiment est considéré comme nouveau. En comparant cette fois un batiment du fichier as_is à tous les batiments du fichier to_be, on détermine la distance la plus petite possible. Ceux dont la distance excède une certaine limite peuvent être considérés comme supprimables.

Le script peut se décomposer en 3 principales parties :

  • Lecture des fichiers et construction des Batiments
  • Détermination de la plus petite distance entre un batiment anciens et tous les batiments nouveaux. Classification du batiment en fonction de la plus petite distance.
  • Transcription des batiments dans des fichiers.