Differenze tra le versioni di "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"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 11: | Riga 11: | ||
Mostriamo di seguito un possibile codice per la ricerca e la lettura dei valori della ''Longitudine'' e della ''Latitudine'' dell'<I>angolo superiore sinistro</i> dell'immagine georeferenziata della mappa, ivi rappresentata. | Mostriamo di seguito un possibile codice per la ricerca e la lettura dei valori della ''Longitudine'' e della ''Latitudine'' dell'<I>angolo superiore sinistro</i> dell'immagine georeferenziata della mappa, ivi rappresentata. | ||
− | + | Public Sub Main() | |
Dim fl As File | Dim fl As File | ||
Riga 18: | Riga 18: | ||
Dim lat, lon As Float | Dim lat, lon As Float | ||
− | fl = Open "<FONT Color= | + | fl = Open "<FONT Color=darkgreen>''/percorso/del/file/geotiff.tif''</font>" For Read |
<FONT Color=gray>' ''Per individuare il TAG "&h8482" presente nel file geotiff, carichiamo i dati in un vettore di tipo Short[ ]:''</font> | <FONT Color=gray>' ''Per individuare il TAG "&h8482" presente nel file geotiff, carichiamo i dati in un vettore di tipo Short[ ]:''</font> | ||
Riga 39: | Riga 39: | ||
Print "Angolo superiore sinistro (Max Lat - min long):\n\nLatitudine: "; lat; "\nLongitudine: "; lon | Print "Angolo superiore sinistro (Max Lat - min long):\n\nLatitudine: "; lat; "\nLongitudine: "; lon | ||
− | + | End | |
Riga 53: | Riga 53: | ||
* https://trac.osgeo.org/geotiff/ | * https://trac.osgeo.org/geotiff/ | ||
* https://web.archive.org/web/20100502061149/http://www.remotesensing.org/geotiff/spec/geotiffhome.html | * https://web.archive.org/web/20100502061149/http://www.remotesensing.org/geotiff/spec/geotiffhome.html | ||
− | * https:// | + | * https://forensicsfromthesausagefactory.blogspot.com/2013/03/location-data-within-jpgs.html |
Versione attuale delle 11:57, 18 lug 2024
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
- https://www.mariocavicchi.it/tesi2/node14.html
- https://www.loc.gov/preservation/digital/formats/fdd/fdd000279.shtml
- https://www.usna.edu/Users/oceano/pguth/md_help/html/tbme9v52.htm
- https://trac.osgeo.org/geotiff/
- https://web.archive.org/web/20100502061149/http://www.remotesensing.org/geotiff/spec/geotiffhome.html
- https://forensicsfromthesausagefactory.blogspot.com/2013/03/location-data-within-jpgs.html