User:Le sanglier/FR:osmmakemap
Jump to navigation
Jump to search
osmmakemap
fabriquer une carte à partir des données d'openstreetmap c'est quand même assez long et compliqué!
- je télécharge régulièrement une des cartes régionales disponible le site de GEOFABRIK (en général le fichier bretagne.osm.bz2)
- j'utilise les logiciels osmosis et Groundtruth (donc cgpsmapper) sur une machine windows pour créer une carte pour GPS garmin (le fichier *.img et quelques autres)
- les scripts sont écrit en bash cet interpréteur étant disponible sous windows si vous utilisez cygwin par exemple.
utilisation
osmmakemap.sh -options [fichier] [dest]
- les différentes options sont concaténées en une seule chaîne de caractère
- le paramètre fichier désigne le fichier avec les données osm de la forme région[.osm.[.bz2]] (les extensions sont facultatives)
- le paramètre dest désigne le fichier de sortie, n'est nécessaire que s'il y a un redécoupage du fichier osm via osmosis)
un exemple simple :
osmmakemap.sh -dbcsl bretagne.osm.bz2 tregor.osm
les options :
- d= décompression le fichier va être décompressé avec bzcat
bzcat bretagne.osm.bz2>bretagne.osm
- b=boundingbox le fichier va être découpé par osmosis en un nouveau fichier (nommé dest.osm=tregor.osm ici), les coordonnées de la boundingbox vont être demandé dans le shell comme ci-dessous
entrer les bornes de la bbox:
left=
-4
right=
-2.5
top=
49
bottom=
48
le découpage du fichier osm est nécessaire dès que ce fichier fait plus de 2Go (= la RAM de mon PC)
- c=code pour changer le familycode et le productcode de la carte garmin et qui valent 1 par défaut avec GroundTruth (ça permet de faire coexister plusieurs cartes différentes dans Mapsource), les paramètres vont être demandé dans le shell comme ci-dessous
entrer le productcode=
1
entrer le familycode=
1
- s=statistiques fait un fichier de statistiques de dest.osm(=fichier.osm si osmosis n'a pas été appelé avant) en utilisant le script perl de Gilles LAMIRAL ici ça donne
osm_stat_user.pl tregor.osm>stat_tregor.txt
- l=log écrit un fichier de dest.log avec les durées des principales étapes (décompression, déoupage, statistiques, génération carte) ici ça donne tregor.log
décompression : 2 minutes 20 secondes
découpage : 3 minutes 15 secondes
statistiques : 1 minutes 50 secondes
génération carte : 8 minutes 12 secondes
durée totale : 15 minutes 38 secondes
code source
ce code n'a pas encore détruit ma machine mais bon vous êtes seul responsable de son utilisation sur votre PC :-)
deux remarques plus sérieuses:
- j'utilise en général des noms de chemins comme si j'étais sous linux ... sauf pour lancer GroundTruth qui ne comprend que le langage Windows (utiliser cygpath pour convertir de l'un à l'autre avec cygwin)
- si la carte est mal installée dans Mapsource j'utilise MapsetToolkit pour remettre ça dans l'ordre
#!/bin/sh/
### préparation de fichier osm
### licence CC-BY-NC-SA
### 19/08/11 rouxph.22@gmail.com
##### paramètres d'entrée##########
if [ "$1" != "" ]
then
option=${1}
else
option="-h"
fi
## fichier (source)
if [ "$2" != "" ]
then
fichier=${2%%.*}
else
fichier=""
fi
## fichier destination
if [ "$3" != "" ]
then
dest=${3%%.*}
else
dest=${fichier}
fi
##### traitement des options #####
rep=${PWD}'/' # manque un / à la fin
repw=`cygpath -w $rep` # convertion du répertoire en syntaxe windows pour groundtruth
t0=`date "+%s"` ###démarrage
## help
result=`echo $option| grep 'h'`
if [ "$result" != "" ]
then
echo 'osmmakemap.sh -options [fichier] [dest]'
echo 'l temps de calculs stockés dans $fichier.log'
echo 'd décompression du fichier *.osm.bz2 avec bzcat'
echo 'c pour changer les valeurs par défaut '
echo ' familycode=1 & productcode=1'
echo 'b boundingbox pour découpage du fichier osm'
echo ' trégor : left=-4 right=-2.5 top=49 bottom=48'
echo 's statistiques (perl script)'
echo 'r régénrer la carte (donc sans options :-))'
echo 'h help!!!!!!!!!'
echo ''
echo "1)exemple en partant d'un fichier de GEOFABRIK:"
echo 'osmmakemap.sh -dbcsl bretagne.osm.bz2 tregor.osm'
echo '2)régénérer la carte du trégor (pc=1 et fc=1):'
echo 'osmmakemap.sh -r tregor.osm'
exit 1
else
echo "traitement du fichier : "${fichier}
echo "traitement du fichier : "${fichier}>${fichier}.log
echo "osmmakemap.sh "${option} ${fichier} ${dest}>${fichier}.log
fi
## productcode+familycode
result=`echo $option| grep 'c'`
if [ "$result" != "" ]
then
echo 'entrer le productcode='
read pc
echo 'entrer le familycode='
read fc
code='--productcode='${pc}' --familycode='${fc}
else
code='--productcode=1 --familycode=1'
fi
## boundingbox
result=`echo $option| grep 'b'`
if [ "$result" != "" ]
then
if [ "$dest" != "" ]
then
echo 'entrer les bornes de la bbox:'
echo 'left='
read left
echo 'right='
read right
echo 'top='
read top
echo 'bottom='
read bottom
bbox='--bounding-box left='$left' right='$right' top='$top' bottom='$bottom
else
echo 'manque un nom de fichier destination!!!!'
exit
fi
fi
## décompression
result=`echo $option| grep 'd'`
if [ "$result" != "" ]
then
if [ "$fichier" != "" ]
then
echo '# décompression du fichier '${fichier}'.osm.bz2'
bzcat ${fichier}.osm.bz2>${fichier}.osm
echo '# décompression finie!'
else
echo 'manque un nom de fichier source!!!!'
exit
fi
fi
t1=`date "+%s"` ###fin décompression
## découpage du fichier osm
result=`echo $option| grep 'b'`
if [ "$result" != "" ]
then
echo '# lancement de osmosis :'
~/Documents/sport/rando/osm/osmosis/osmosis-latest/osmosis-0.39/bin/osmosis.bat --read-xml ${fichier}.osm ${bbox} --write-xml ${dest}.osm
echo '# fin du découpage du fichier '${fichier}'.osm'
fi
t2=`date "+%s"` ###fin découpage
## statistiques sur fichier $dest.osm(==$fichier.osm si on appelle pas osmosis)
result=`echo $option| grep 's'`
if [ "$result" != "" ]
then
echo '# statistiques pour le fichier '${dest}'.osm'
osm_stat_user.pl ${dest}.osm>stat_${dest}.txt
echo '# statistiques finies!'
fi
t3=`date "+%s"` ###fin stats
## lancement de groundtruth
cd ~/Documents/sport/rando/GroundTruth/GroundTruth-1.8.740.17/
./groundtruth makemap --upload --nosea --outputpath='C:/Garmin/TRIPWPT5/'${dest} --osmfile=${repw}${dest}.osm --productname=${dest} ${code}
cd $rep
echo '# fin de génération de la carte!'
t4=`date "+%s"` ###fin calcul carte
###############calcul des durées ####################
d1=`expr $t1 - $t0` ###durée décompression
d1m=`expr $d1 / 60`
d1s=`expr $d1 - $d1m \* 60`
d1=${d1m}' minutes '${d1s}' secondes '
d2=`expr $t2 - $t1` ###durée découpage
d2m=`expr $d2 / 60`
d2s=`expr $d2 - $d2m \* 60`
d2=${d2m}' minutes '${d2s}' secondes '
d3=`expr $t3 - $t2` ###durée statistiques
d3m=`expr $d3 / 60`
d3s=`expr $d3 - $d3m \* 60`
d3=${d3m}' minutes '${d3s}' secondes '
d4=`expr $t4 - $t3` ###durée génération carte
d4m=`expr $d4 / 60`
d4s=`expr $d4 - $d4m \* 60`
d4=${d4m}' minutes '${d4s}' secondes '
d5=`expr $t4 - $t0` ###total
d5m=`expr $d5 / 60`
d5s=`expr $d5 - $d5m \* 60`
d5=${d5m}' minutes '${d5s}' secondes '
echo '# durées des calculs '
echo 'durées :'
echo 'décompression :' ${d1}
echo 'découpage :' ${d2}
echo 'statistiques :' ${d3}
echo 'génération carte :' ${d4}
echo 'durée totale :' ${d5}
result=`echo $option| grep 'l'`
if [ "$result" != "" ]
then
echo 'décompression : '${d1}>>${fichier}.log
echo 'découpage : '${d2}>>${fichier}.log
echo 'statistiques : '${d3}>>${fichier}.log
echo 'génération carte : '${d4}>>${fichier}.log
echo 'durée totale : '${d5}>>${fichier}.log
fi
######################################