Qui invece voglio spiegare come creare mappe custom usando QGIS.
Esiste il plugin apposito " GarminCustomMap" (https://plugins.qgis.org/plugins/GarminCustomMap/)
che permette di salvare la vista (map canvas) di QGIS direttamente come
un mosaico .kmz di tasselli .jpg che rispettano le ristrizioni di
Garmin. Dalla finestra di dialogo del plugin è possibile scegliere la
dimensione in pixel delle singole immagini, la qualità della
compressione jpg, il livello di zoom (che determina quanti tasselli
vengono creati) e l'ordine che la mappa avra nel dispositivo GPS.
Personalmente, però, non sono rimasto soddisfatto da tale plugin che mi
ha creato immagini molto "sgranate" anche con elevati livelli di zoom.
Proverò quindi a spiegare un metodo più laborioso (ma proprio per
questo anche più didattico) per creare mappe .kmz raster migliori con
QGIS partendo da dati raster o vettoriali.
I passaggi sono i seguenti:
- dopo aver impostato la propria mappa in QGIS generare un'immagine
raster con il compositore di stampe che abbia sistema di riferimento
"Pseudo Mercator" (EPSG:3857);
- suddividere l'immagine in tasselli con usando il plugin "gridSplitter";
- convertire il "*-tileindex.shp" generato da "gridSplitter" in
coordinate geografiche (EPSG:4326) e calcolare le coordinate dei limiti
nord, sud, est, ovest di ogni poligono;
- creare un file .kml con i riferimenti alle immagini e le relative coordinate e comprimere il tutto in un file .kmz.
Ecco in dettaglio come procedere:
Creazione dell'immagine con il compositore di stampe di QGIS
Dopo aver impostato la mappa in QGIS con i nostri dati e la simbologia
adeguata settiamo il sistema di riferimento (Progetto > Proprietà
progetto... > scheda SR) su "WGS 84 / Pseudo Mercator; EPSG:3857"
(proiezione usata da Google e da molte altre mappe on-line), quindi
apriamo il compositore di stampe (Progetto > Nuova composizione di
stampa).
Nella nuova finestra compare un foglio bianco che in genere ha
dimensione preimpostata su A4. Sulla destra, nella scheda
"Composizione" > riquadro "Page size", possiamo scegliere la
preimpostazione personalizzate per specificare Larghezza e Altezza in
millimetri oppure in pollici. Più sotto, nel riquadro "Export setting"
possiamo indicare la risoluzione di esportazione in dpi ovvero il
numero di punti (o pixel) per ogni pollice, quindi se diamo le
dimensioni del foglio in pollici basta moltiplicarle per il valore di
risoluzione al fine di conoscere la dimensione in pixel dell'immagine
finale.
Prima però, è meglio posizionare la mappa sul foglio: con il comando
"Layout > Aggiungi mappa" tracciamo un'area rettangolare dove verrà
disegnata la mappa. Nella scheda "Proprietà oggetto" impostiamo la
scala desiderata, poi con lo strumento "Layout > Sposta elemento"
ridimensioniamo il riquadro sull'area che ci interessa (purtroppo la
scala cambia quando si modifica la larghezza del riquadro e va
reipostata ogni volta, ma con un po' di tentativi ce la possiamo fare;
con lo strumento "Layout > Sposta contenuto" possiamo spostare
l'area rappresentata all'interno del riquadro). Una volta trovata la
dimensione giusta del riquadro andiamo sulla scheda "Composizione" >
riquadro "Resize page to content" e clicchiamo su "Resize page" per far
adattare la pagina al riquadro, poi nel riquadro "Export setting"
cambiamo la "Risoluzione di esportazione" per ottenere le dimensioni in
pixel desidarate.
Nel mio caso (mappa delle Grigne) per poter avere tutta l'area della
mappa in scala 1:10'000 ho ottenuto una pagina di dimensioni
67,62x87,58 pollici. Ora vorrei avere un'immagine finale di 6144x8142
pixel in modo da poterla ritagliare in 48 (6x8) tasselli da 1024x1024
pixel ciascuno. Quindi cambio le dimensioni della pagina a 61,44x81,92
pollici e imposto una risoluzione di 100 punti per pollice. Cambiando
le dimensioni della pagina devo ovviamente riadattare il riquadro della
mappa ma basta trascinare un angolo (con lo strumento "Layout >
Sposta elemento") fino ad agganciare quello della pagina; la scala
della mappa mi cambia a 1:11'006 ma è un valore che mi va ancora bene
(è importante non allontanarsi troppo dalla scala per cui è pensata la
mappa altrimenti si rischia di alterare le dimensioni di simboli ed
etichette compromettendo la leggibilità).
Quando è tutto ok andiamo ancora su scheda "Composizione" > riquadro
"Export setting" e spuntiamo l'opzione "Crea world file" in modo da
ottenere l'immagine georeferenziata. Infine creiamo l'immagine con
"Compositore > Esporta come immagine...", scegliamo cartella, nome
del file, formato e nell'ultima finestra che compare dopo aver cliccato
su salva controlliamo che l'immagine abbia le dimensioni volute
(ATTENZIONE: sebbene a questo punto sia possibile cambiare le dimensioni dell'immagine, consiglio di non farlo
poiché si potrebbe creare un file world errato).
Suddivisione dell'immagine con gridSplitter
Una volta creata l'immagine chiudiamo il compositore di stampe ed
importiamo l'immagine in QGIS (basta trascinarla nella vista di QGIS).
Dovrebbe comparire una finestra che chiede il sistema di riferimento:
selezioniamo "WGS 84 / Pseudo Mercator; EPSG:3857". (Se non compare
tale finestra dobbiamo andare su "Layer > Proprietà..." e nella
scheda "Generale" specificare il "Sistema Coordinate Riferimento".)
A questo punto facciamo partire il plugin "gridSplitter". (Se ancora
non l'abbiamo possiamo installarlo facilmente con "Plugins >
Gestisci e installa plugin...", cercando appunto gridSplitter
nell'apposito campo di ricerca. Terminata l'installazione il plugin
sarà disponibile in "Plugins > gridSplitter > Cut layer to
pieces").
Questo plugin ci permette di suddividere l'immagine in tasselli più
piccoli per rispettare le limitazioni alle custom maps di Garmin. Il
suo uso è abbastanza intuitivo. Nella scheda "Parameters" della
finestra di "Grid Splitter" dobbiamo indicare il layer da dividere
(cioè l'immagine appena creata e importata), il numero di tasselli nei
sensi orizzontale e verticale in cui suddividere l'immagine (nel mio
caso 6 e 8) e la cartella in cui saranno salvati i files risultanti
(selezioniamo o creiamo un'apposita cartella vuota).
Nella scheda "additional options" meglio dire al plugin di salvare
tutti files "all in one folder"; specifichiamo un prefisso per i nomi
dei files (ATTENZIONE: il nome NON deve contenere spazi, al loro posto usare "_") e spuntiamo l'opzione "Create Tile index" (il tileindex ci servirà per trovare le coordinate delle immagini risultanti). Ora possiamo cliccare "OK".
Il plugin crea i vari tasselli in formato .tif non compresso (quindi
possono occupare parecchio spazio) e un file vettoriale (tileindex) di
poligoni ciascuno dei quali rappresenta un tassello. Il tileindex viene
subito caricato in QGIS. I tasselli vanno convertiti in formato .jpg.
Per fare questo possiamo un qualsiasi programma di elaborazione
immagine oppure, per rimanere su QGIS, usiamo "Raster > Conversione
> Conversione formati...". In tal caso spuntiamo l'opzione "Modalità
in serie"; selezioniamo la cartella con i tasselli e usiamo la stessa
anche per i risultati; scegliamo JPEG come formato in uscita;
eventualmente possiamo selezionare il profilo "Compressione JPEG" nelle
opzioni di creazione per cambiare la qualità di compressione (di
default è 75); togliamo l'opzione "Carica sulla mappa quando finito" e
clicchiamo su "OK" per avviare la conversione.
(ATTENZIONE: nella conversione in .jpg NON va usata l'opzione PROGRESSIVE.)
Coordinate dei tasselli
Per collocare la nostra mappa nella corretta posizione geografica
abbiamo bisogno delle coordinate dei limiti nord, sud, est e ovest di
ogni tassello; queste si trovano facilmente grazie al tileindex creato
da gridSplitter. Per prima cosa dobbiamo convertire il tileindex
coordinate geografiche, quindi selezioniamo il layer e con "tasto
destro del mouse > Salva con nome" creiamo un nuovo shapefile
cambiando il sistema di riferimento in "EPSG:4326 - WGS 84".
Selezioniamo il nuovo layer e apriamo la sua tabella degli attributi
(Layer > Apri tabella attributi) a cui vanno aggiunti quattro campi
contenenti le coordinate che ci servono. Incominciamo dal primo:
apriamo il calcolatore di campi (icona con il pallottoliere o CTRL+i);
inseriamo un nome per il nuovo campo in uscita (y_max), impostiamo il
tipo di campo su "Numero decimale (real)" con lunghezza 12 e precisione
8; nel campo espressione inseriamo " y_max( $geometry )" che
determina la latitudine massima di ogni poligono (troviamo queste
funzioni nel gruppo "Geometria" della colonna centrale); alla voce
"Anteprima:" dovrebbe comparire la coordinata in gradi, se va bene
possiamo cliccare "OK" per creare il nuovo campi.
Ripetiamo la stessa operazione altre tre volte creando i campi y_min,
x_max e x_min rispettivamente con le espressioni "y_min(
$geometry )", "x_max( $geometry )" e "x_min( $geometry )".
Infine salviamo (CTRL+s) e disattiviamo l'editing (CTRL+E).
Dovremmo ottenere una tabella simile a questa:
Creazione del file .kml
Un file .kml è un semplice file di testo con struttura xml che, nel
nostro caso, deve contenere i riferimenti alle immagini e le loro
coordinate geografiche.
Ecco un esempio:
Le informazioni che ci servono sono incluse nella tabella del tileindex
e questa è contenuta nel file .dbf che compone lo shapefile. Il .dbf è
apribile e modificabile con i programmi dedicati ai fogli di calcolo
(tipo Excel); per rimanere in ambito open-source possiamo usare Calc di
LibreOffice. (I fogli di calcolo non
sarebbero pensati per la manipolazione di tabelle, per le quali
esistono applicazioni mirate ai database, ma per quello che andremo a
fare sono molto più comodi.)
Aperto il .dbf per prima cosa salviamolo in un altro formato (.osd se
stiamo usando Calc) in modo da lavorare sul nuovo file e non alterare
l'originale.
Nella colonna "location" sostituiamo con un comando di "Trova e
sostituisci" il percorso alla cartella dei files (nel mio caso
"D:\...\custommap\grigne-0-1\") con una stringa vuota in modo da
lasciare solo i nomi delle immagini più l'estensione. Duplichiamo la
colonna "location" in modo da averne due affiancate: nella prima
eliminiamo l'estensione .tif; nella seconda sostituiamo .tif con .jpg.
Le colonne "row" e "col" possono essere eliminate. Dovremmo così avere
6 colonne. A sinistra di ciascuna di esse inseriamo una colonna vuota.
Ora andiamo a riempire le colonne vuote con le seguenti stringhe:
colonna A: <GroundOverlay><name>
colonna C: </name><drawOrder>30</drawOrder><Icon><href> (drawOrder indica l'ordine con cui
verrà visualizzata la mappa nel caso ve na fossero altre; se vogliamo
vederla al di sopra possiamo aumentare il valore)
colonna E: </href></Icon><LatLonBox><north>
colonna G: </north><south>
colonna I: </south><east>
colonna K: </east><west>
colonna M: </west></LatLonBox></GroundOverlay>
Eliminiamo la prima riga con i nomi dei campi ("location" etc.) e sostituiamola con 4 righe dove dobbiamo scrivere:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>grigne-0-1</name> (ovviamente sostituimo grigne-0-1 con il nome che vogliamo dare alla mappa)
In fondo, invece, aggiungiamo le seguenti due righe:
</Document>
</kml>
La tabella ora dovrebbe apparire più o meno così:
Infine salviamo in formato Testo CSV (.csv), senza separatori di campo
né separatori di testo, chiamando il file "doc.kml"; questo file deve
essere messo nella stessa cartella dei tasselli .jpg. Se tutto è
corretto possiamo caricare "doc.kml" in GoogleEarth per visualizzare il
mosaico.
Creazione del file .kmz
Un file .kmz è semplicemente un archivio di files compressi tra cui è
presente un file "doc.kml" e altri files accessori (nel nostro caso i
tasselli .jpg). Quindi ci basta selezionare il file "doc.kml" insieme
alle immagini .jpg e comprimere tutto in un file "nome.zip". Rinominiamolo in "nome.kmz" e lo potremo caricare sui dispositivi GPS Garmin che accettano CustomMaps.
Vedi esempio di mappa .kmz per dispositivi Garmin nella pagina di DOWNLOAD