Come utilizzare gdal2tiles su un'immagine tiff personalizzata ricevuta dai provider per generare riquadri


10

Ho faticato un po 'a generare tessere per un'immagine ad alta risoluzione che abbiamo. L'immagine attuale che abbiamo è un'immagine molto grande (+ 20 GB), salvata come file GeoTiff.Grande immagine GTiff

Vorrei generare i riquadri utilizzando l'utilità della riga di comando gdal2tiles e quindi aprirli e visualizzarli in Cesio, utilizzando il provider di immagini TMS per fornire i riquadri. Usando gdalinfo, ecco alcuni dei dettagli dell'immagine:

Driver: GTiff/GeoTIFF
Files: image.tif
Size is 52250, 56119
Coordinate System is:
PROJCS["WGS 84 / UTM zone 35S",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",27],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",10000000],
    UNIT["meters",1],
    AUTHORITY["EPSG","32735"]]
Origin = (606276.000000000000000,7197873.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_MAXSAMPLEVALUE=13165
  TIFFTAG_MINSAMPLEVALUE=1
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_SOFTWARE=ERDAS IMAGINE
  TIFFTAG_XRESOLUTION=1
  TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  606276.000, 7197873.000) ( 28d 3'21.59"E, 25d19'55.12"S)
Lower Left  (  606276.000, 7169813.500) ( 28d 3'29.55"E, 25d35' 7.17"S)
Upper Right (  632401.000, 7197873.000) ( 28d18'55.92"E, 25d19'47.60"S)
Lower Right (  632401.000, 7169813.500) ( 28d19' 5.85"E, 25d34'59.57"S)
Center      (  619338.500, 7183843.250) ( 28d11'13.23"E, 25d27'27.58"S)
Band 1 Block=512x512 Type=UInt16, ColorInterp=Gray
Band 2 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 3 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 4 Block=512x512 Type=UInt16, ColorInterp=Undefined

Il mio primo tentativo è stato di utilizzare gdal_translate per georeferenziare l'immagine, quindi utilizzare gdalwarp per modificare la proiezione in EPSG: 3857, come richiesto da Cesio (vedere il riferimento API)

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 606275 7197875 28.055987 -25.331974 -gcp 606275 7169814 28.058200 -25.585326 -gcp 632400.5 7197875 28.31553 -25.329876 -gcp 632400.5 7169814 28.318286 -25.583209 image.tif newImage1.vrt
gdalwarp -of VRT -t_srs EPSG:3857 newImage1.vrt newImage2.vrt

Tuttavia, ottengo molti dei seguenti errori:

ERRORE 1: latitudine o longitudine superate i limiti

Un altro metodo che ho provato è stato usare direttamente gdal2tiles e generare le tessere:

gdal2tiles.py image.tif

Questo ha creato una cartella con una sottocartella (etichettata 18) che è l'unico livello di zoom a cui sono state create le tessere. Tuttavia, le immagini che ottengo qui sono completamente "sbagliate" e "sfocate".

Un esempio di una delle tessere:

inserisci qui la descrizione dell'immagine

Qualche suggerimento per generare tessere per questa immagine grande immagine di un'area specifica usando gdal2tiles in modo che io possa caricarla e visualizzarla in Cesio?

Aggiornare

Quindi, dopo aver provato il suggerimento di @ iant, ho usato i seguenti comandi:

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif

Questo comando ha funzionato perfettamente fino alla fine in cui ho ricevuto il seguente errore:

ERRORE 1: TIFFFillTile: errore di lettura nella riga 43520, col 47104; ottenuto 35788250 byte, previsti 37421449

Non sono sicuro del significato di questo errore, per il momento l'ho lasciato e ho ancora un'immagine finale "newImage.tif", prodotta dal passaggio gdalwarp. Usando questo ho chiamato gdal2tiles.py

gdal2tiles.py newImage.tif

Questo ha prodotto una cartella con sottocartelle 10-18 (e non solo un livello di zoom 18 come ho ottenuto in precedenza). Si legge anche perfettamente in Cesio, senza errori di console, ma l'immagine sembra ancora "sbagliata":

Immagine caricata nel Cesio

Sto considerando che il mio problema potrebbe essere come ha suggerito @ user30184 "... i dati di origine non si adattano bene a gdal2tiles." Tuttavia fino a quando il nostro provider non sarà in grado di fornirci qualcosa da utilizzare con gdal, questo è tutto ciò che ho.

Stavo pensando di rimuovere forse una delle bande per evitare che Gdal interferisse sull'ultima banda come canale alfa. Eventuali suggerimenti?


Perché vuoi georeferenziare l'immagine? Ha già tutte le informazioni CRS al suo interno.
AndreJ,

Risposte:


7

Penso che tutto ciò che devi fare è riproiettarlo usando:

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -t_srs EPSG:3857 newImage.tif image.tif

e poi affiancalo:

gdal2tiles.py newImage.tif

Se il tuo file è molto grande, ci vorrà del tempo.


Puoi controllare i livelli di zoom con il parametro -z, l'hai già provato? E nota che la tua immagine ha 4 bande che possono portare a risultati inaspettati soprattutto perché hai a che fare con dati a 16 bit. Prima potrebbe essere necessario un po 'di preelaborazione
user30184

Grazie per la tua risposta @iant. Ho intenzione di provare questo e vedere cosa succede. Potresti forse spiegare un po 'di più nella tua risposta cosa significano le opzioni che hai selezionato? Secondo la documentazione, l'opzione -co "passa un'opzione di creazione al driver del formato di output". Quindi, in effetti, stai aggiungendo più proprietà al file tiff?
sforzo

@ user30184 Non l'ho ancora provato, no. Come faccio a sapere quali dovrebbero essere i livelli di zoom? O posso specificarli come voglio? Ho pensato che lasciando questa opzione fuori, avrei lasciato che lo script determinasse il livello di zoom in base all'area selezionata.
sforzo

@ user30184 hai anche detto che potrei ottenere risultati inaspettati con un'immagine a 4 bande e dati a 16 bit. Perché esattamente? Non è nel formato corretto per l'elaborazione delle piastrelle gdal? In tal caso, l'immagine è stata ottenuta direttamente dal provider, quali sarebbero i passaggi per ottenere il file nel formato corretto? Vale a dire un file tiff GDAL? (Se posso dire una cosa del genere)
sforzo del

Ho riscontrato i seguenti problemi con gdalwarp come hai suggerito @iant: >>>>>>>>>>>> ERRORE 1: TIFFFillTile: errore di lettura nella riga 43520, col 47104; ottenuto 35788250 byte, previsto 37421449 ERRORE 1: TIFFReadEncodedTile () non riuscito. ERRORE 1: pleiades_merge05m_2015-06-19.tif, banda 1: IReadBlock non riuscito all'offset X 86, offset Y 109 ERRORE 1: GetBlockRef non riuscito all'offset del blocco X 86, offset del blocco Y 109 >>>>>>>>>>> > Qualche suggerimento per risolvere questo problema?
sforzo

2

Suppongo che la tua immagine sia uno dei prodotti a 4 bande di Airbus DS:

http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose

Gdal2tiles è realizzato per dividere immagini visive comuni in tessere PNG. Tali immagini usano 8 bit per banda e hanno una banda (scala di grigi), 3 bande (rosso-verde-blu) di 4 bande (reg-verde-blu + alfa).

Direi che la tua domanda è in gran parte irrilevante perché i tuoi dati di origine non si adattano bene a gdal2tiles. Potresti aggirare i problemi immediati che hai in questo momento, ma il risultato finale non sarà ancora valido se non rielabori i tuoi dati.

Il motivo per il riquadro non bello che hai allegato alla tua domanda potrebbe essere che la quarta banda di dati viene interpretata come un canale alfa.


Grazie @ user30184, ho letto alcune risorse e ho avuto un pensiero simile. Penso che sarebbe meglio chiedere ai nostri fornitori di fornirci file tiff "compatibili GDAL", ma fino a quando non torneranno da noi, questo è tutto ciò che abbiamo. Stavo pensando di rimuovere forse una delle bande per evitare che Gdal interferisse sull'ultima banda come canale alfa. Eventuali suggerimenti?
sforzo

Usa gdal_translate per tagliare un piccolo sottoinsieme dall'immagine gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifdovrebbe farlo (grandi offset per evitare le aree nodate). Apri questa piccola immagine con QGIS e dovresti essere in grado di giocare velocemente con le impostazioni di visualizzazione. La mia ipotesi sul canale alfa è probabilmente sbagliata, altrimenti il ​​risultato dovrebbe apparire colorato, non grigio.
user30184

Grazie @ user30184, ho fatto come mi hai suggerito e l'ho aperto con successo in QGIS. Vedi questo link: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Come posso ora eseguire il "debug" del mio problema? Usando QGIS per fare gdalwarp e gdal2tiles?
sforzo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.