2015-10-15 2 views
1

Мой вопрос касается библиотеки GDAL (библиотека геопространственной абстракции данных) с именем gdaladdo. Этот инструмент должен создавать обзорные изображения из файла .tif. Из документации, которую я нашел на ней, я вижу, что она обычно вводится в командную строку. Я пытался найти способ запустить его через мою программу Python, потому что у меня есть несколько тысяч изображений .tif, которым нужны внешние обзоры. Моя конечная цель в этой программе - передать ей изображение .tif и создать для него пирамиду .rrd. Вот мой код до сих пор:Как правильно использовать gdaladdo в программе Python?

import gdal 
import os 
from subprocess import call 

#Define gdaladdo 
gdaladdoFile = 'C:\Program Files (x86)\GDAL\gdaladdo.exe' 

#-------------------------------------------------------- 

os.chdir("Images") 

openfile = open('imagenames.txt', 'r') 

if {openfile.closed == False}: 
    count = 0 
    while count < 5: 
     #Grab the image to work with 
     filename = openfile.readline() 

     #Strip off the newline 
     filename.rstrip('\n') 

     #Create pyramid 
     call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16']) 
     count += 1 
    openfile.close() 

else: 
    print "No file to open!" 

я получаю ошибки, относящиеся к call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16']) линии. Когда обычно вводите эту команду в командную строку, она должна выглядеть так: 'gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE erdas.img 2 4 8 16', но Python говорит, что параметры (например, --config USE_RRD YES) неверны синтаксис. Поэтому я последовал примеру передачи аргументов подпроцессу (который я нашел здесь) и помещал опции внутри одинарных кавычек и добавлял запятые после каждого из них. Синтаксические ошибки исчезают, но появляются новые, когда я запускаю программу для ее проверки. В окне командной строки он говорит «FAILURE: Неизвестное имя параметра» --config USE_RRD YES '. Как я могу изменить эту конкретную строку, чтобы заставить ее делать то, что я хочу?

Я новичок в stackoverflow и все еще изучаю программы в колледже, поэтому, пожалуйста, простите мое невежество и будьте нежны со мной. Заранее благодарю вас за помощь в решении этой проблемы.

gdaladdo reference link, в случае необходимости.

+0

Вы пытались расщепить '--config USE_RRD YES' на три отдельных элемента списка? т.е. '' --config ',' USE_RRD ',' YES''? Кроме того, я не знаю, заметили ли вы это, но вы передаете строку «имя_файла» вместо переменной 'filename' –

+0

@RNar. Я попробовал это сейчас, а приглашение командной строки теперь дает мне разные ошибки. Прежде всего, это связано с изменением моего каталога (которое я просто исправил, чтобы быть более понятным), и теперь он жалуется, что мои изображения не существуют, когда они очень много делают. Когда я пройду через все эти странные ошибки, я дам вам знать, исправляет ли ваше предложение мою реальную проблему. Спасибо за идею! – Aizenmyouou

+1

@RNar Еще раз спасибо за ваше предложение. Он решил мою проблему, и я, наконец, получил файл! Задача решена. – Aizenmyouou

ответ

1

Изменение строки кода из этого:

call([gdaladdoFile, '-ro', '--config USE_RRD YES', 'filename', '2 4 8 16']) 

Для этого:

call([gdaladdoFile, '-ro', '--config', 'USE_RRD', 'YES', filename, '2 4 8 16']) 

решаемые мой вопрос!

+0

В моем случае (Windows 7, Python 3.6, GDAL 2.2.1) работала только следующая последовательность ввода: '[gdaladdoFile, '-ro', '--config', 'USE_RRD', 'YES', filename, '2 ',' 4 ',' 8 ',' 16 '] ' – Vladimir

Смежные вопросы