如何在Python程序中正确使用gdaladdo?

时间:2015-10-15 21:05:00

标签: python python-2.7 arguments subprocess gdal

我的问题是关于名为gdaladdo的GDAL(地理空间数据抽象库)工具。该工具应该从.tif文件构建概述图像。从我在其上找到的文档中,我可以看到它通常被输入到命令提示符中。我一直试图找到一种方法让它通过我的Python程序运行,因为我有几千个需要外部概述的.tif图像。我对这个程序的最终目标是能够将.tif图像传递给它,并为它创建一个.rrd金字塔。到目前为止,这是我的代码:

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'])行有关的错误。通常在命令提示符下键入此命令时,它应如下所示:&#39; gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE erdas.img 2 4 8 16 &#39;但Python说选项(如--config USE_RRD YES)是不正确的语法。所以我跟着一个将参数传递给子进程(我在这里找到)并将选项放在单引号中并在每个引号后面添加逗号的示例。当我运行程序来测试它时,语法错误消失但新的语法错误出现。它说&#34; FAILURE:未知选项名称&#39; - config USE_RRD YES&#39; &#34;在命令提示符窗口中。 我应该如何更改此特定行以使其按照我希望的方式执行操作?

我是stackoverflow的新手,还在大学学习编程,所以请原谅我的无知并对我温柔。提前感谢您对此问题的帮助。

gdaladdo reference link,万一需要。

2 个答案:

答案 0 :(得分:5)

为避免使用Python子流程模块,您可以直接使用BuildOverviews function和Python API来构建概述。

from osgeo import gdal
InputImage = 'ImageName.tif'
Image = gdal.Open(InputImage, 0) # 0 = read-only, 1 = read-write.
gdal.SetConfigOption('COMPRESS_OVERVIEW', 'DEFLATE')
Image.BuildOverviews("NEAREST", [2,4,8,16,32,64])
del Image
print('Done.')

当您以只读模式读取.tiff图像时,它将在“ .ovr”文件中构建外部概览。相反,如果以读写模式打开图像,则会生成内部概览。

答案 1 :(得分: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'])

解决了我的问题!