ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.TIF:

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
sergei-kzn
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2011, 23:31
Репутация: 0

ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.TIF:

Сообщение sergei-kzn » 29 фев 2012, 15:59

Прив всем! У меня возникла проблема, гугл пока ничего не подсказал.
Я пишу скрипт реализующий алгоритм 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
ззы было подозрение на нехватку памяти, но её достаточно, хоть и в своп используется.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение Voltron » 29 фев 2012, 16:11

А не может быть такого, что в какой-то момент у вас в xsize и ysize нули?

sergei-kzn
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2011, 23:31
Репутация: 0

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение sergei-kzn » 29 фев 2012, 16:14

сейчас проверю, но вроде как после вызова Create уже по барабану что там, главное в момент вызова нужные данные передать (тут же значение передается, а не ссылка/кортеж/массив/и тд). Да и в принципе они не меняются до следующего шага.
сейчас проверю.
-----------------------------
в момент вызова Create xsize и ysize правильные

sergei-kzn
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2011, 23:31
Репутация: 0

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение sergei-kzn » 01 мар 2012, 11:14

обнаружил интересную вещь, в репах debian крайняя версия gdal 1.6, ближе к вечеру попробую обновится и посмотреть что получится.

sergei-kzn
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2011, 23:31
Репутация: 0

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение sergei-kzn » 01 мар 2012, 23:25

обновился, все то же. в чем косяк может быть?

sergei-kzn
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2011, 23:31
Репутация: 0

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение sergei-kzn » 02 мар 2012, 15:29

хм, такое ощущение что writearray возвращает управление не завершив запись в файл. если сделать паузы, то запись нормально завершается, в следующей итерации растр уничтожается и создается новый, и видимо так получалось, что он удалялся, а запись не успевала завершится.
где можно почитать как питон с памятью работает? в частности raster=[] с точки зрения си просто убивает указатель на область памяти, которая выделена приложению - утечка памяти. а как питон обрабатывает такие операции?

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: ERROR 1: TIFFFetchDirectory:./L5171021_02120110811_B30.T

Сообщение rhot » 02 мар 2012, 15:34

___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость