Utilizzare le tessere di una mappa senza connessione a internet

Da Gambas-it.org - Wikipedia.

Come è noto la mappa, mostrata in un oggetto MapView, è formata da varie tessere (tile), solitamente di dimensioni 256x256 pixel, le quali, poste una accanto all'altra da Nord verso Sud e da Ovest verso Est, offrono un quadro unico di visualizzazione della mappa medesima.
Tali tessere sono in realtà dei file immagine, solitamente di formato PNG.
Se l'avvio del programma avviene senza collegamento a internet, ovviamente non sarà possibile caricare alcuna tessera, e nella MapView non sarà visibile alcuna mappa.


Ricomposizione e visualizzazione senza l'uso della MapView delle tessere scaricate da Gambas

Quando è richiamata una mappa da un Raster Tile Server con il Metodo ".AddTile()" della Classe ".Map", Gambas scarica in copia i file immagine delle tessere, relative alla parte di mappa visualizzata, nella cartella del seguente percorso

/tmp/gambas.1000/numero_processo/2.tmp

laddove "numero_processo " è il numero identificativo del processo del corrente programma di Gambas che sta mostrando la mappa in MapView.
I file immagine scaricati delle tessere (tile) posseggono una particolare denominazione, formata da 4 numeri separati da un trattino, ad esempio:

15-12177-17521-1.png

- il primo numero si riferisce allo Zoom, al quale la tessera appartiene;
- il secondo numero si riferisce alla Latitudine (parametro "y");
- il terzo numero si riferisce alla Longitudine (parametro "x").
Le numerazioni del nome del file di una tessera, che si riferiscono ai predetti parametri "y" e "x", ossia alle Coordinate delle tessere, procedono progressivamente secondo la disposizione delle tessere sul globo terrestre:

              x  
  ⁕------------>
  |
  |
  |
  |
y |
  V

Il programma Gambas utilizzerà, dunque, per l'intera durata del suo processo quelle tessere salvate nel percorso predetto. Cosicché, se eventualmente ci si è spostati sulla mappa in altre aree distanti, tornando alle aree precedentemente visitate, il programma riutilizzerà le tessere precedentemente salvate e non avrà quindi problemi a mostrare nuovamente la parte di mappa relativa a quelle aree.

Le tessere contenute nella predetta cartella "/2.tmp" potranno essere utilizzate in assenza di collegamento internet in altre sessioni del programma, avendo cura di copiare tale cartella nel percorso:

/tmp/gambas.1000/numero_processo/

del nuovo processo del programma medesimo.

Inoltre i file delle tessere possono essere recuperati dal succitato percorso:

/tmp/gambas.1000/numero_processo/2.tmp

anche in assenza di collegamento internet, affinché le stesse siano poi assemblate in modo coerente per ricreare, tenuto conto della numerazione di ciascun file-tessera, la parte di mappa, che insieme esse rappresentano, su un Controllo grafico, diverso da MapView, come ad esempio la "DrawingArea" oppure ricomposte in una Image successivamente richiamata da una "PictureBox" o da una "ImageView".


Utilizzare la proprietà ".DefaultCache" della Classe "Map" per usare MapView anche senza collegamento internet

Per consentire di utilizzare MapView anche senza collegamento internet, Gambas fornisce alcune risorse del Componente gb.map, ed in particolare:
* la Proprietà ".DefaultCache " della Classe "Map ";
* il quarto parametro formale del Metodo ".AddTile()" della Proprietà ".Map " di MapView.

Salvare in una cartella arbitraria, e richiamare da questa, le tessere dell'area visitata

La Proprietà ".DefaultCache" della Classe "Map" restituisce o imposta il percorso predefinito della cache per l'archiviazione dei file dello strato di tessere che compongono la mappa.
Pertanto, avendo il collegamento a internet almeno la prima volta, è possibile indirizzare lo scaricamento delle tessere dell'area geografica, visitata con MapView, in una cartella arbitrariamente scelta.
Va precisato che con alla proprietà ".DefaultCache" va assegnato il percorso "principale" senza il nome della cartella, ove si intende far scaricare i file delle tessere. Nel 4° parametro del Metodo ".AddTile()" della Proprietà ".Map" di MapView sarà impostato il nome della cartella, ove si è inteso scaricare le tessere della mappa, affinché il programma ad ogni suo avvio - anche senza connessione internet - si serva con MapView di tali tessere per comporre la visuale unica della mappa precedentemente visitata.

Il programma la prima volta (con connessione internet attivata) creerà la cartella nel percorso prescelto; successivamente (senza collegamento internet) caricherà in MapView le tessere da quella cartella.

Utilizzare senza internet le tessere caricate con collegamento internet nella corrente sessione di sistema

Per ricapitolare quanto scritto sopra, se si intende salvare i file delle tessere ad esempio nella cartella "/tmp/tessere/gruppo_1", per utilizzarle successivamente anche senza collegamento internet nella corrente sessione di sistema, si avrà il seguente codice:

MapView1.Map.DefaultCache = "/tmp/tessere"

MapView1.Map.AddTile("Esempio", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png", Null, "gruppo_1")

Ad ogni modo sarà possibile anche assegnare alla proprietà "DefaultCache" una parte dell'intero percorso della cartella, destinata a contenere le tessere; specificando, però, nel 4° parametro del Metodo ".AddTile( )" il resto del percorso della predetta cartella:

MapView1.Map.DefaultCache = "/tmp"

MapView1.Map.AddTile("Esempio", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png", Null, "tessere/gruppo_1")

In realtà l'indirizzo, passato dal 2° argomento, non sarebbe necessario in fase di caricamento senza internet dei file delle tessere; ma ovviamente lo è per il caricamento dei file delle predette tessere la prima volta con collegamento internet.

Utilizzare senza internet le tessere in altre sessioni di sistema

Se invece si intende utilizzare le tessere successivamente senza collegamento internet in altra sessione di sistema, bisognerà salvare i file delle tessere in un percorso non temporaneo (altrimenti andrebbero irrimediabilmente perdute). Il 2° parametro del Metodo ".AddTile()" potrà essere impostato a "Null ", si avrà il seguente codice:

MapView1.Map.DefaultCache = "/percorso/non/temporaneo/della/cartella/delle/tessere"

MapView1.Map.AddTile("Esempio", Null, Null, "nome_cartella")

Anche in questo caso alla proprietà ".DefaultCache" va assegnata come stringa soltanto la parte del percorso della cartella, destinata a contenere le tessere, privo del nome di detta cartella. Tale nome sarà poi specificato nel 4° parametro del Metodo ".AddTile()".


Note

[1] Vedere anche la seguente pagina: Verificare le tessere dei livelli delle Map tiles