2 votos

gdal.Open sólo devuelve el conjunto de datos de geotiff cuando el archivo aux.xml está disponible

Con algunos archivos específicos, gdal.Open() en python sólo devuelve un conjunto de datos válido si hay un archivo *.aux.xml disponible. El archivo aux ha sido generado por QGIS al abrirlo manualmente. Si no hay archivo aux, gdal.Open devuelve un NoneType.

Todo está descrito en este repositorio de github: https://github.com/awesomemaptools/gdalissue

Aquí está el script python:

import sys
from osgeo import gdal
filename = sys.argv[1]
ds = gdal.Open(filename)
print(type(ds))
band = ds.GetRasterBand(1)
data = band.ReadAsArray()
print('value at 1,1:', data[1][1])

Cuando no se dispone de un archivo aux en casos específicos:

$ ./gdalOpen.py tmpfile1.tif
ERROR 1: _TIFFVSetField:tmpfile1.tif: Null count for "GeoDoubleParams" (type 12, writecount -1, passcount 1)
<type 'NoneType'>
Traceback (most recent call last):
  File "./gdalOpen.py", line 16, in <module>
    band = ds.GetRasterBand(1)
AttributeError: 'NoneType' object has no attribute 'GetRasterBand'

¿Alguna sugerencia?

4voto

Lucas Puntos 128

Se trata de un error en versiones anteriores de GDAL cuando libtiff emitía un error no fatal. GDAL aún podía abrir el archivo (por ejemplo, con gdalinfo ) pero los enlaces python fallaron.

Este es el billete #5616 y esto es lo relevante escriba a eso lo arregla:

GTiff: para hacer felices a los bindings de Python, evitar emitir errores CE_Failure debidos a errores de libtiff cuando aún conseguimos abrir el fichero (#5616)

Los enlaces python de GDAL 2.2 pueden abrir el archivo.

GDAL 1.11

$ gdalinfo --version
GDAL 1.11.3, released 2015/09/16

$ gdalinfo tmpfile1.tif 
ERROR 1: _TIFFVSetField:tmpfile1.tif: Null count for "GeoDoubleParams" (type 12, writecount -1, passcount 1)
Driver: GTiff/GeoTIFF
Files: tmpfile1.tif
Size is 380, 120
Coordinate System is:
<snip>
Metadata:
<snip>
Corner Coordinates:
Upper Left  (-121.9515470,  36.6054000) (121d57' 5.57"W, 36d36'19.44"N)
Lower Left  (-121.9515470,  36.5757660) (121d57' 5.57"W, 36d34'32.76"N)
Upper Right (-121.9086310,  36.6054000) (121d54'31.07"W, 36d36'19.44"N)
Lower Right (-121.9086310,  36.5757660) (121d54'31.07"W, 36d34'32.76"N)
Center      (-121.9300890,  36.5905830) (121d55'48.32"W, 36d35'26.10"N)
Band 1 Block=380x8 Type=Float32, ColorInterp=Gray

$ python gdalOpen.py tmpfile1.tif
1.11.3
Traceback (most recent call last):
  File "gdalOpen.py", line 8, in <module>
    ds = gdal.Open(filename)
  File "/usr/lib/python2.7/dist-packages/osgeo/gdal.py", line 1800, in Open
    return _gdal.Open(*args)
RuntimeError: _TIFFVSetField:tmpfile1.tif: Null count for "GeoDoubleParams" (type 12, writecount -1, passcount 1)

GDAL 2.2

$ gdalinfo --version
GDAL 2.2.0, released 2017/04/28

$ gdalinfo tmpfile1.tif 
Warning 1: _TIFFVSetField:tmpfile1.tif: Null count for "GeoDoubleParams" (type 12, writecount -1, passcount 1)
Driver: GTiff/GeoTIFF
Files: tmpfile1.tif
Size is 380, 120
Coordinate System is:
<snip>
Metadata:
<snip>
Corner Coordinates:
Upper Left  (-121.9515470,  36.6054000) (121d57' 5.57"W, 36d36'19.44"N)
Lower Left  (-121.9515470,  36.5757660) (121d57' 5.57"W, 36d34'32.76"N)
Upper Right (-121.9086310,  36.6054000) (121d54'31.07"W, 36d36'19.44"N)
Lower Right (-121.9086310,  36.5757660) (121d54'31.07"W, 36d34'32.76"N)
Center      (-121.9300890,  36.5905830) (121d55'48.32"W, 36d35'26.10"N)
Band 1 Block=380x8 Type=Float32, ColorInterp=Gray

$ python gdalOpen.py tmpfile1.tif
2.2.0
Warning 1: _TIFFVSetField:tmpfile1.tif: Null count for "GeoDoubleParams" (type 12, writecount -1, passcount 1)
value at 1,1: 0.465083

El script abreviado gdalOpen.py:

import sys
from osgeo import gdal
gdal.UseExceptions()
filename = sys.argv[1]
print(gdal.__version__)
ds = gdal.Open(filename)
data = ds.GetRasterBand(1).band.ReadAsArray(0,0,2,2)
print('value at 1,1:', data[1][1])

En GDAL 1.11, ejecutando gdalinfo -stats tmpfile1.tif recrea el .aux.xml y permite que los enlaces python abran la trama.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X