gdal_translate
?我不是要简单地从文件系统中执行gdal_translate.exe,而是要以某种方式在代码中调用它,所以我不需要知道gdal_translate可执行文件所在的确切目录?#1 楼
从GDAL 2.1(更多信息在此处)开始,GDAL和OGR实用程序可以用作库函数。例如:from osgeo import gdal
ds = gdal.Open('input.tif')
ds = gdal.Translate('output.tif', ds, projWin = [-75.3, 5.5, -73.5, 3.7])
ds = None
评论
gdal.Translate()需要的所有选项均在此处列出:gdal.org/python/osgeo.gdal-module.html#TranslateOptions
– MarceloVilla-Piñeros
18-10-6在17:34
我尝试使用此方法,但未收到任何错误,但未创建输出文件。有什么想法吗?
–智能
20年11月6日在16:24
#2 楼
请参阅GDAL API教程。#Import gdal
from osgeo import gdal
#Open existing dataset
src_ds = gdal.Open( src_filename )
#Open output format driver, see gdal_translate --formats for list
format = "GTiff"
driver = gdal.GetDriverByName( format )
#Output to new format
dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 )
#Properly close the datasets to flush to disk
dst_ds = None
src_ds = None
如果您想要更多的输出控制,例如调整大小,子设置等,请使用VRT作为输入,这就是gdal_translate在内部完成。
评论
不幸的是,这不包括反注射,对吗?
–里卡多
2014年7月2日,下午5:46
@butcher-不。因为问题没有提到重投影。当然,您可以使用gdal python API重新投影栅格。如果您想知道如何,请提出一个新问题。
–user2856
2014年7月2日在7:00
我已经在这里完成了:gis.stackexchange.com/questions/103874/…但是thius被标记为重复的:-(
–里卡多
2014年7月2日7:30
@butcher-已关闭,作为该问题的重复项。您的问题还询问有关gdal_translate的问题。您知道gdal_translate不会重新投影吗?如果要重新投影,请使用gdalwarp或gdal python API方法-gdal.ReprojectImage
–user2856
2014年7月2日在9:11
#3 楼
是的,您可以在Python中调用GDAL实用程序。根据实用程序本身是一个exe还是一段python代码,该方法存在非常小的差异。无论哪种方式,都需要使用子流程模块:import subprocess
# constants
gdalTranslate = r'C:\Program Files\GDAL\gdal_translate.exe'
src = r"C:\somefolder\somefile.tif"
dst = r"C:\someotherfolder\myresul.tif"
cmd = "-ot float32 -outsize 25 25" # just for example!
# see note below
def youCanQuoteMe(item):
return "\"" + item + "\""
fullCmd = ' '.join([gdalTranslate, cmd, youCanQuoteMe(src), youCanQuoteMe(dst)])
subprocess.popen(fullCmd)
您会注意到我在路径周围添加了转义引号。这是因为,在Windows上,我在使用路径时遇到了麻烦,尤其是那些带有空格或'\'字符使另一个意外转义字符的路径。因此,我只是在规范中保留了正确的路径。 “ C:\ python32 \ python.exe”(或任何版本),第二个元素是要使用的python实用程序。
显然,您也可以遍历文件系统,而不是使用硬编码常量,但这只是一个例子。
编辑-QGIS插件的一般化
QGIS在启动时会创建/修改许多环境变量。因此,您可以使用这些变量(请参阅Settings-> Options-> System)而不是上面示例中的硬编码路径来为GDAL库/实用程序构建通用路径变量。
评论
所以我不能这样做吗?导入gdal_translate,然后调用.main()?
–凯蒂E.
2012年11月29日17:06
不-那行不通。 gdal_translate不是Python包,因此python对此一无所知。您将收到一条错误消息,提示“ ImportError No Module named gdal_translate”。使用子流程模块来调用它。
– MappaGnosis
2012年11月29日17:37
好的,使用gdal_retile.py可以解决一个类似的问题。 -optfile files.txt”),但出现错误:无法识别的命令选项:-知道为什么吗?
–凯蒂E.
2012年11月29日20:01
暂时我看不到问题,除了我的猜测是它可能不喜欢'--optfile'开关。后者未记录。
– MappaGnosis
2012年11月30日9:25
@MappaGnosis Python gdal库中是否有gdal_translate的替代方法?
–multigoodverse
2013年9月23日12:43在
#4 楼
我使用os.system通过各种gdal命令执行此操作,您可以使用它们从命令行调用函数:os.system("gdal_translate -of GTiff " + sourcefile + " " + destinationfile)
第7讲中也对此进行了介绍:http ://www.gis.usu.edu/~chrisg/python/2009/
评论
GDAL命令通过RFC 59.1在GDAL 2.1中可用GDAL命令作为python函数。 subprocess.call也比os.system安全。
– Dmitri Chubarov
16-10-27在12:36
有人需要写出这些Python函数的一个很好的例子。我与gdal.Warp()搏斗了几个小时,以正确获取PG:数据源作为cutlineDSName来驱动cutlineSQL。 (我知道,对吗?几个小时实际上在解决问题?恐怖! kidding>)。最终它开始工作,它似乎比os.system()或subprocess.call()快得多。它正在执行约200万条剪切线,所以直到今晚的某个时间我才知道它实际上是否更快...但是它的工作原理完全正确。
– GT。
17-2-22在6:46
评论
是的,从gdal-2.1开始。此答案应被接受为正确答案。