back

nel file ~/opt/navit/navit/navit.xml aggiungiamo il seguente blocco di testo:

<mapset enabled="yes">
<map type="binfile" enabled="yes" data="/home/utente/opt/navit/navit/maps/italy.bin" />
</mapset>

avendo cura di sostituire a /home/utente il path della nostra home directory e di cambiare il valore "mapset enabled" a "no" in tutti gli altri blocchi per abilitare soltanto la mappa italiana.

OpenStreetMap (http://www.openstreetmap.org/) aggiorna le proprie mappe continuamente, quindi sarebbe il caso di pensare ad un sistema per poter avere disponibili sempre quelle più aggiornate.

Si potrebbe ogni volta scaricare la mappa aggiornata e rimuovere quella esistente, ma perchè sprecare banda?
Sicuramente più "economico" è, invece, tenere traccia dell'header della mappa utilizzata, confrontarlo con quello della mappa presente sul sito di OpenStreetMap, fare la sostituzione solo nel caso in cui essi differiscano.
Il tutto, poi, assegnarlo ad anacron perchè l'aggiornamento avvenga in automatico.

Creiamo lo script ~/bin/mapupdate:

#!/bin/bash

# mapupdate
# script to update navit maps
# author: pmate
# email: pmatehome@gmail.com

# set the variables
NAVPATH=$HOME/opt/navit/navit
NAVMAPPATH=$HOME/opt/navit/navit/maps
MAPLOG=$HOME/opt/navit/navit/maps/mapupdate.log
MAP=italy.osm.bz2
MAPBIN=italy.bin

# if mapudate.log doesn't exist, creates it
if [ ! -e $MAPLOG ] ; then
    touch $MAPLOG
fi

# retrieve ETag information from the map file header and put it in a temp file
curl -I  http://download.geofabrik.de/osm/europe/$MAP \
| grep ETag > $NAVMAPPATH/mapupdate.log.temp

# check if files are the same
if diff $MAPLOG $NAVMAPPATH/mapupdate.log.temp > /dev/null ; then
    wget http://download.geofabrik.de/osm/europe/$MAP
    rm $NAVMAPPATH/$MAPBIN
    #cd $HOME/opt/navit/navit
    bzcat $MAP | $NAVPATH/osm2navit $NAVMAPPATH/$MAPBIN
    rm $MAPLOG
    mv $NAVMAPPATH/mapupdate.log.temp $NAVMAPPATH/mapupdate.log
    # this is useful in the case that anacron updates the maps
    chown $USER:$USER $NAVMAPPATH/mapupdate.log
    chown $USER:$USER $NAVMAPPATH/$MAPBIN
    # echoes a message
    echo "Map updated!"
else
    echo "No updated map."
    echo "Skipping..."
fi
back