Intento fusionar 14 geotiff así :
Cada Geotiff ocupa unos 50 Mb. Necesito un geotiff en la salida
Mi flujo de trabajo :
gdalbuildvrt -input_file_list list.txt test.vrt
(donde mi lista contiene el nombre de los tifs)
Entonces..:
gdal_translate -of Gtiff test.vrt test.tif
Input file size is 79841, 59955
¡Funciona, pero el resultado es un geotiff de 13,3 Gb ! Para 14 archivos, cada uno de 50 Mb, he intentado un geotiff de 700 Mb, no 13 Gb.
Sé que gdal no comprime por defecto, así que probé este comando :
gdal_translate -of Gtiff -co COMPRESS=JPEG test.vrt test_compressed.tif
Pero la "fusión" del archivo es demasiado grande para la compresión JPEG :
Input file size is 79841, 59955
0ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: An error occured while writing a dirty block
...
Así que probé otro flujo de trabajo, y convertí todos mis tifs en jpeg (14 Mb cada uno), construí un archivo vrt y lo traduje con compresión LZW. Pero el geotiff de salida es de unos 5 Gb.
¿Podríais decirme cuál es la mejor práctica para hacer el trabajo, y si es posible obtener un geotiff de 14*50Mb?
No lo he probado, pero he pensado en fusionar estos tifs en photoshop, y luego volver a georeferenciarlos con las coordenadas superior izquierda/inferior derecha. Con este flujo de trabajo creo que tendré 14*50 Mb, pero no estoy seguro. Y quiero aprender gdal mejores prácticas por lo que no lo intente por el momento
llegando a bites: si input es tif con 8bit y export es 32bit por defecto tendras serios problemas. asi que asegurate de mantener tu byte definición de bytes. Y recuerda: el tif completo probablemente tendrá 20x 50mb como un tiff es siempre rectangular
Si lo he entendido bien, ¿el número que he señalado en verde en esta captura de pantalla tiene que ser el mismo a la izquierda y a la derecha?
La imagen de salida tendrá más píxeles que la suma de las imágenes de entrada, pero esto no explica la gran diferencia. Le sugiero que usted mira las características de sus imágenes basadas en gdalinfo en gdalinfo para ver qué compresión se utiliza y comprobar que las extensiones son correctas. correctos.
Los 14 tifs de 50 Mb eran originalmente 14 tifs de 700 Mb que procesé con gdal_translate con -co COMPRESS=JPEG. Comprimí la trama para reducir el número de Mb, ¿pero quizá no fue buena idea?
Este pantallazo representa los 2 gdal info del mismo geotiff ( 01.tif) , a la izquierda del pantallazo esta el gdalinfo del Gtiff no comprimido de 700 Mb, al final a la derecha el mismo Gtiff con COMPRESS=JPEG, o sea 50 Mb, con el diff en verde:
Según yo, las extensiones son correctas porque en qgis coincide con otra fuente de datos e imágenes de satélite.
*suponiendo que sus imágenes de entrada tienen el mismo tamaño, hace 20000 * 12000 píxeles por imágenes de entrada, que es grande para una imagen de 50 Mb, tal vez usted está cruzando la extensión de su sistema de coordenadas cuando se crea el mosaico.*
No estoy seguro de entender lo que quiere decir con "cruzar el límite". Pero he intentado abrir mi 5 Gb LZW en QGIS, y la extensión es buena, porque coincide con otra fuente de datos.
Tu respuesta me hace darme cuenta de que los Gtiff no tienen el mismo tamaño, ¿crees que puede ser la causa de que aumente el tamaño al fusionarse? Porque gdal prefiere archivos del mismo tamaño. Hice un gdalinfo en cada Gtiff para obtener su tamaño, hay una diferencia muy pequeña entre el tamaño de Gtiffs :
02.tif Size is 19956, 11981
03.tif Size is 19959, 11993
04.tif Size is 19961, 11992
05.tif Size is 19958, 11993
06.tif Size is 19958, 11990
07.tif Size is 19956, 11984
08.tif Size is 19956, 11993
09.tif Size is 19958, 11993
10.tif Size is 19958, 11989
11.tif Size is 19958, 11985
12.tif Size is 19958, 11993
13.tif Size is 19959, 11993
14.tif Size is 19960, 11994
Entonces deberías mirar la profundidad en píxeles de tus imágenes : si tu entrada estuviera en Bytes, >entonces deberías mantener los bytes. gdal_translate -of Gtiff -ot Byte -co COMPRESS=LZW prueba.vrt prueba.tif
He probado este comando pero el gdal me dice que se ha excedido el tamaño del tiff.
Input file size is 79841, 59955
0...10...20...30...40...50..ERROR 1: TIFFAppendToStrip:Maximum TIFF file size exceeded. Use BIGTIFF=YES creation option.
ERROR 1: WriteEncodedTile/Strip() failed.
Pero si tengo que crear un tiff grande, no me resuelve el problema porque supera los 4 Gb. ¿ Es importante la profundidad de pixel en mi caso ? ( Foto HD de mapas, luego georeferenciada, no DEM)
Observación 1 : Convertir las imágenes a jpeg antes de crear un vrt no ayuda y puede perder datos.
No es grave si pierdo un poco de información. Prefiero no perderla, por supuesto, pero si tengo que hacerlo no hay problema. Estaba convencido de que la salida sería más ligera si trabajaba con jpeg, pero como conclusión, no es cierto cuando la salida es Gtiff. Así que esta no es una buena solución. Renuncio a esta solución.
> Observación 2 : utilizar un vrt es útil: ¿está seguro de que necesita GTiff?
Sí, necesito un Gtiff, porque tengo que importarlo en una aplicación móvil que necesita geotiff de entrada para trabajar ( creo que la aplicación puede tomar geoespacial pdf de entrada también, pero nunca he trabajado con él, y quiero entender mi problema con gdal, porque no es la primera vez que lo tengo).
He probado -co tiled=yes -co bigtiff=yes -co compress=jpeg -co photometric=ycbcr y he probado -co TILED=yes -co BLOCKXSIZE=512 -co BLOCKYSIZE=512
Estos 2 comandos funcionan bien, tengo un tamaño de ~700 Mb. Es exactamente lo que esperaba.
Ahora tengo otro problema : no se puede abrir rápidamente por QGIS. Tengo que esperar 15 minutos ( pero salgo antes de que QGIS abra el tif con éxito). No se por que. Y en mi aplicación Android, no funciona (tal vez causa de "tiled=yes"). Tengo que leer algunos doc por mi cuenta.
0 votos
Utilice -co tiled=yes -co bigtiff=yes -co compress=jpeg -co photometric=ycbcr