User:Le sanglier/FR:osmmakemap

From OpenStreetMap Wiki
Jump to: navigation, 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
######################################