回答:
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 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が内部的に行う方法です。
はい、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で、特にスペースを含むパスや、「\」文字の1つが別の偶発的なエスケープ文字を作成するパスで問題が発生したためです。したがって、私はaspecの適切なパスをそのまま保持します。
Pythonユーティリティのいずれかを使用している場合は、サブプロセスコマンド文字列の先頭のexeが「C:\ python32 \ python.exe」(または使用しているバージョン)であり、2番目の要素が使用するpythonユーティリティ。
もちろん、ハードコードされた定数を使用するのではなく、ファイルシステムを反復処理することもできますが、これは単なる例です。
編集-QGISプラグインの一般化
QGISは、起動時に多くの環境変数を作成/変更します。したがって、上記の例のハードコーディングされたパスの代わりに、これらを使用して(設定->オプション->システムを参照)GDALライブラリ/ユーティリティへの一般化パス変数を構築できます。
コマンドラインからのように関数を呼び出すために使用できるos.systemを使用して、さまざまなgdalコマンドでこれを行います。
os.system("gdal_translate -of GTiff " + sourcefile + " " + destinationfile)
こちらの講義7でも説明しています:http : //www.gis.usu.edu/~chrisg/python/2009/
gdal.Warp()
数時間の間、適切にPG:
データソースを取得するためにデータソースを取得するために取り組みましcutlineDSName
たcutlineSQL
。(私は知っていますよね?数時間 実際に何かを解決しましたか?恐怖!</ kidding>)。やがて機能するようになり、os.system()
またはよりも大幅に高速になったようsubprocess.call()
です。約200万のカットラインを実行しているので、今夜のある時間まで実際に高速かどうかはわかりませんが、正確に機能しています。
PythonのGDAL Translateを使用して、複合マルチバンドTIFから個々のファイルにバンドを保存したい人のためのクイックコードを次に示します。
import gdal
in_path = 'C:/GIS/Sample.tif' #input composite raster
out_path = 'C:/GIS/Output/' #output directory for individual bands as files
#Open existing raster ds
src_ds = gdal.Open(in_path)
for i in range(1,src_ds.RasterCount +1): #Save bands as individual files
out_ds = gdal.Translate(out_path + 'band' + str(i) + '.tiff', src_ds, format='GTiff', bandList=[i])
out_ds=None
これは、(例えばのようなRasterio、使用してさらに処理するために有用である可能性があり、ここに)。