Я пишу скрипт реализующий алгоритм i.landsat.acca из grass, на определенном этапе пришлось разделить преобразование данных (расчет planetary spectral reflectance) и собственно алгоритм. Преобразование выполняет отдельный скрипт на python, он просто открывает исходные данные, кусками преобразует, склеивает и пишет назад в файл, который сам же и создает. Само преобразование уже отлажено и на выходе получается правильный растр в формате массива numpy. Возникла проблема с записью в файл. По невнимательности я создавал новый файл используя CreateCopy, ошибок не было, но естественно в файле были неправильные данные, тк в оригинале был GDT_Byte, а на выходе должно быть GDT_float32. Переделал создание файла (само создание, перенос метаданных) по примеру: http://gis-lab.info/qa/gdal-python.html
в принципе оно может и работает, но на втором-третьем файле (из пачки снимков landsat) валится.
ругается так:
Собственно вопрос, в чем дело?ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.TIF: Can not read TIFF directory count
ERROR 1: TIFFReadDirectory:Failed to read directory at offset 8
ERROR 1: TIFFWriteEncodedStrip:Must set "ImageWidth" before writing data
ERROR 1: TIFFWriteEncodedStrip:Must set "ImageWidth" before writing data
...
ERROR 1: TIFFWriteEncodedStrip:Must set "ImageWidth" before writing data
ERROR 1: TIFFWriteEncodedStrip:Must set "ImageWidth" before writing data
More than 1000 errors or warnings have been reported. No more will be reported from now.
Ошибка сегментирования
зы создание файла:
Код: Выделить всё
for i in range(0,5):
projection=gdalData[i].GetProjection()
transform=gdalData[i].GetGeoTransform()
xsize=gdalData[i].RasterXSize
ysize=gdalData[i].RasterYSize
drvMeta=driver.GetMetadata()
if drvMeta.has_key( gdal.DCAP_CREATE ) and drvMeta[ gdal.DCAP_CREATE ] == "YES":
gdalDataOut.append(driver.Create(metadata["PATH"]+'/'+os.path.basename(metadata["BAND"+str(i+2)+"_FILE_NAME"]), xsize, ysize, 1, gdal.GDT_Float32))
gdalDataOut[i].SetProjection(projection)
gdalDataOut[i].SetGeoTransform(transform)
else:
print "INFO: Driver %s does not support Create() method." % format
sys.exit(-1)
Код: Выделить всё
gdalDataOut[band_i].GetRasterBand(1).WriteArray(band_c[0])
gdalDataOut[band_i]=None