FR:User:Petrovsk/Osmosis basic use
Introduction
Osmosis est un programme java capable de :
- traiter des données OSM qu'elles soient dans une base de donnée (OSM, MySQL ou PostGIS) ou un fichier XML (.osm)
- réaliser des extraits géographiques selon une bounding-box ou un polygone défini dans un fichier
- comparer deux jeux de données et de créer le différentiel (changeset) et, à l'opposé, d'appliquer un changeset à un jeu de données pour le mettre à jour
- trier les données à l'intérieur d'un fichier et en fusionner plusieurs
- extraire des éléments selon les tags qu'ils possèdent
- transformer des données organisées selon l'ancien schéma de l'Api 0.5 vers l'Api 0.6, en service depuis avril 2009
- utiliser des fonctions de réplication pour maintenir à jour une base locale
Il possède aussi des fonctions de gestion des processus de traitement. Ces fonctionnalités sont très riches et nous ne les passerons pas toutes en revue, bien évidemment.
Pour commencer, nous allons nous intéresser à l'installation et aux subtilités de compatibilité avec le systéme.
Comme d'habitude, ce que je détaille est valable pour Mac OS, celui que j'ai sous la main.
Installation
Les versions 0.2x pouvaient s'utiliser à l'aide d'une ligne de commande du genre :
java -Xmx512M -jar osmosis.jar ...
Les versions 0.3x, en plus de supporter pleinement l'Api 0.6 actuelle, s'invoquent par l'intermédiaire d'un script de lancement rendu exécutable, contenant les paramètres optionnels comme la quantité de mémoire à allouer. L'invocation devient :
osmosis …
Osmosis a besoin de java 1.6 pour fonctionner. Toutefois, des versions compatibles avec java5 sont disponibles ici. Pour en savoir davantage sur java 1.6 et Mac OS, référez-vous à cet article. Installons la dernière version d'osmosis.
Nous commençons par choisir où la déposer :
cd ~/OSM/
~ étant le dossier utilisateur (s'obtient avec alt+n)
Téléchargeons et décompressons l'archive :
curl -O "http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-bin-latest.tgz" tar -xvf osmosis-latest-bin.tar.gz rm osmosis-latest-bin.tar.gz
Nous rendons ensuite osmosis exécutable (le mot de passe administrateur est requis) :
sudo ln -s ~/OSM/osmosis-*/bin/osmosis /bin/osmosis chmod +x /bin/osmosis
Lors de la mise à jour d'osmosis, il faudra supprimer le lien précédemment créé par ln avant d'exécuter les deux commandes :
sudo rm /bin/osmosis ln -s ~/OSM/osmosis-*/bin/osmosis /bin/osmosis chmod +x /bin/osmosis
Il reste une dernière étape, pour définir la quantité de mémoire maximale qu'osmosis peut utiliser. Il faut ouvrir avec un éditeur de texte le script de lancement qui se trouve chez moi là : ~/OSM/osmosis-0.3X/bin/osmosis.bat
Je souhaite donner 1 Go de mémoire à osmosis, il faut pour cela ajouter la ligne :
set JAVACMD_OPTIONS=-Xmx1G
Exemples d'usage
Il ne s'agira pas de survoler toutes les fonctions mais d'apprendre la syntaxe de base à travers des exemples concrets.
La plupart des fonctions ont deux notations, complète et abrégée. Par exemple, pour lire le contenu d'un fichier data.osm on peut utiliser indifféremment --read-xml file=data.osm et --rx data.osm. La liste complète se trouve ici.
Extraction d'une bounding-box depuis un fichier OSM
Par exemple, pour extraire une zone correspondant au Sud-Aveyron depuis l'extrait français. Suite aux manipulations de l'installation, osmosis peut s'invoquer de n'importe où directement. En supposant que le fichier france.osm soit dans ~/OSM/Datasets, les commandes sont les suivantes :
cd ~/OSM/Datasets osmosis --read-xml france.osm --bounding-box left=2.503 right=3.333 top=44.28 bottom=43.731 --write-xml sud-aveyron.osm
Extraction dans un polygone
Par exemple, pour extraire une zone correspondant au département de l'Aveyron depuis l'extrait français. Le découpage se fera selon un polygone défini dans un fichier texte, ici aveyron.poly. Les commandes sont les suivantes :
osmosis --rx france.osm --bounding-polygon file=aveyron.poly --wx aveyron.osm
Un moyen simple pour obtenir un fichier polygone d'une région administrative est de récupérer la relation correspondante avec JOSM, de retirer tous les tags des chemins et de la transformer avec le script osm2poly.pl disponible sur le SVN OpenStreetMap.
Il s'utilise comme ceci :
perl osm2poly.pl relation-aveyron.osm > aveyron.poly
Fusion de fichiers OSM
Pour obtenir une carte du Bénélux, nous pouvons extraire la zone depuis le fichier européen ou bien fusionner les trois fichiers nationaux. Avant d'être fusionnés, les fichiers doivent être triés grâce à l'option --sort-0.6. La fusion se fait par l'option --merge, --m en abrégé. Pour la fusion de n fichiers elle doit être présente (n-1) fois. Ici il y aura donc deux --merge.
cd ~/OSM/Datasets osmosis --rx belgium.osm --sort-0.6 --rx luxembourg.osm --sort-0.6 --rx netherlands.osm --sort-0.6 --m --m --wx benelux.osm
Extraction de points d'intérêt
Pour extraire des points d'intérêt il faut indiquer leur type à osmosis. C'est le rôle de --node-key-value suivi de la liste des types sous cette forme : keyValueList="key1.value,key2.value".
Pour extraire les bornes frontières à partir d'un fichier centré sur les Pyrénées :
osmosis --rx pyrenees.osm. --node-key-value keyValueList="historic.boundary_stone" --wx bornes_pyrenees.osm
Opérations multiples
Lorsqu'il s'agit de réaliser plusieurs opérations à partir du même jeu de données, il est intéressant de les regrouper pour gagner du temps. C'est le rôle de l'argument --tee, suivi du nombre d'opérations puis des opérations elles-mêmes.
Par exemple, pour extraire l'Aveyron et le Cantal depuis l'extrait français :
osmosis --rx france.osm --tee 2 --bp file=aveyron.poly --wx aveyron.osm --bp file=cantal.poly --wx cantal.osm
Pour quantifier le gain, j'ai extrait cinq types de waypoints dans cinq fichiers OSM différents, à partir de ma base locale. La première fois, j'ai fait cinq lignes de commandes indépendantes, la seconde j'ai inclus les cinq opérations dans la même.
- Cinq commandes uniques : 4m 59s
- Une commande quintuple : 1m 12s
Conclusion : osmosis prend, dans ce cas précis, plus de temps à charger les données en mémoire qu'à les traiter, plus le nombre d'opérations est important, plus le gain est grand.