[OSM-dev-fr] Script pour compléter un fichier .osc à partir d'une base osmosis
Jocelyn Jaubert
jocelyn.jaubert at gmail.com
Mar 6 Déc 19:26:16 GMT 2011
Bonjour,
Je me suis penché sur comment modifier un fichier .osc à partir d'une
base osmosis à jour, afin de ne garder que les parties à l'intérieur
d'un polygone. J'ai du coup créer un script, en utilisant les parseurs
déjà fait par Étienne, et en liant le tout.
Le script permet les choses suivantes.
- lister tous les nodes modifiés, directement, ou via un chemin ou
relation. Le but est surtout de savoir toutes les zones
potentiellement modifiées par le .osc original.
./osc_modif.py --source 873.osc.gz --dest 873.position.osc --position-only
- filtrer les nodes/ways/relations en les mettant dans une section
<delete> plutôt que <create> ou <modify> dès qu'ils sont en dehors
d'un polygone. Les chemins sont découpés sur la frontière, en
enlevant tous les nodes qui dépassent (la liste des nodes utilisés
par le chemin n'est pas modifié par contre)
./osc_modif.py --source 873.osc.gz --dest 873.france.osc --poly=france.poly
Les fichiers d'exemple générés se trouvent là (ils ne sont pas parfait,
parce que je ne suis pas parti d'une base osmosis datant du bon moment):
http://osm7.pole-aquinetic.fr/~jocelyn/osc_modif/
Le code se trouve là:
https://github.com/jocelynj/osm/tree/master/osc_modif
Le code est un peu "brut de fonderie": la fonctionnalité est là, et la
performance a l'air présente (moins de 5 minutes pour un fichier
hour-replicate). Il y a par contre un bug connu liée à la méthode.
En gros, si on créé un chemin au temps T, qui est complètement en
dehors du polygone, il ne sera pas dans le .osc correspondant. Mais si
on déplace un des noeuds du chemin un peu plus tard, de façon à ce
qu'il soit dans le polygone, on verra bien ce noeud apparaître, mais le
chemin n'a aucune chance d'être présent dans le .osc généré.
Du coup, est-ce que vous pensez que la méthode tient la route, et qu'on
peut s'en servir pour générer des hour-replicate dédié à la France ?
Et je ne sais pas trop comment vérifier que ça marche correctement: il
me faudrait une suite de tests :)
Merci,
Jocelyn
Plus d'informations sur la liste de diffusion dev-fr