Ottenere la Longitudine e la Latitudine dell'angolo superiore sinistro dell'immagine di una mappa da un file GEOTIFF con le sole risorse di Gambas

Da Gambas-it.org - Wikipedia.

Il file GEOTIFF è un file di formato TIFF georeferenziato. Esso contiene Metadati in forma di tag che fanno riferimento ad informazioni geografiche.

Il file GEOTIFF è strutturato secondo il protocollo che sostiene ogni file immagine di formato TIFF, condividendone i previsti TAG e supportandone altri specifici per la georeferenziazione.

In particolare il TAG &h8482, denominato "ModelTiepointTag", contiene - fra l'altro - anche i valori della Longitudine e della Latitudine dell'angolo superiore sinistro (Max Lat - min long) dell'immagine georeferenziata della mappa ivi rappresentata. [nota 1]

Bisognerà, pertanto, cercare detto TAG e portarsi all'indice offset, definito da un valore di tipo Intero nel 9° byte del campo di tale TAG.
L'area di memoria del file, assegnata ai valori correlati al TAG &h8482, è solitamente formata da 48 byte (6 valori di tipo Float in Gambas).
I due valori della Longitudine e della Latitudine dell'angolo superiore sinistro (Max Lat - min long) dell'immagine georeferenziata della mappa, ivi rappresentata, sono definiti (ovviamente come il tipo Float di Gambas) rispettivamente nel 25° byte e nel 33° byte di tale gruppo di 48 byte.


Mostriamo di seguito un possibile codice per la ricerca e la lettura dei valori della Longitudine e della Latitudine dell'angolo superiore sinistro dell'immagine georeferenziata della mappa, ivi rappresentata.

Public Sub Main()

 Dim fl As File
 Dim cc As New Short[]
 Dim i As Integer
 Dim lat, lon As Float
 
 fl = Open "/percorso/del/file/geotiff.tif" For Read
 
' Per individuare il TAG "&h8482" presente nel file geotiff, carichiamo i dati in un vettore di tipo Short[ ]:
 cc = New Short[Lof(fl)]
 cc.Read(fl, 0, cc.Count / (SizeOf(gb.Short)))
 
' I valori della Longitudine e della Latitudine dell'angolo superiore sinistro dell'immagine sono contenuti nell'area indicata negli ultimi 4 byte del TAG &h8482.
' Pertanto cerca la posizione del valore del predetto TAG (definito da due Byte) usando il Metodo ".Find( )" del vettore di tipo Short[ ]. Inoltre avanza di 8 byte per individuare l'offset ove leggere i dati della Longitudine e della Latitudine.
 Seek #fl, (cc.Find(&8482) * (SizeOf(gb.Short))) + 8
 
' Restituisce l'offset ove leggere i dati della Longitudine e della Latitudine dell'angolo superiore sinistro dell'immagine:
 Read #fl, i  
 
' Individuato l'offset dell'area del TAG &h8482, i valori di Longitudine e Latitudine  dell'angolo superiore sinistro dell'immagine sono indicati da un tipo Float rispettivamente al 25° byte per la "Longitudine" e al 33° byte per la "Latitudine":
 Seek #fl, i + 24
 Read #fl, lon
 Read #fl, lat
 fl.Close
 
 Print "Angolo superiore sinistro (Max Lat - min long):\n\nLatitudine:  "; lat; "\nLongitudine: "; lon
 
End


Note

[1] Vedere assolutamente al riguardo: TIFF Tag ModelTiepointTag


Riferimenti