私はpythonとQGIS 2.0を使用しています。1つのポリゴンフィーチャによってフォルダー内のラスターをクリップしようとしています。私が「PyQGIS」を使用するのはこれが初めてです。以前はArcpyに慣れていました。とにかく、簡単なスクリプトが機能しないので、どんな提案でもいただければ幸いです。
import qgis.core, qgis,utils
QgsApplication.setPrefixPath("C:/OSGeo4W64/apps/qgis", True)
QgsApplication.initQgis()
CLIP= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp"
INPUT_FOLDER="C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00"
OUTPUT= "C:/Users/unim/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/foscagno_pyqgis/"
for RASTER in INPUT_FOLDER.tif
do
echo "Processing $RASTER"
gdalwarp -q -cutline CLIP -crop_to_cutline -of GTiff RASTER OUTPUT+ "clip_"+ RASTER
done
QgsApplication.exitQgis()
以下は、今までに行った改善ですが、スクリプトを機能させていませんが、近づいていると思います...
import qgis.core, qgis.utils, os, fnmatch
from osgeo import gdal
CLIP= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/study_area_foscagno.shp"
INPUT_FOLDER= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/LE71930282000259EDC00/DNs2Reflectance_LE71930282000259EDC00"
OUTPUT= "C:/Users/unimi/Documents/Umberto/Universita/PhD/Guglielmin/Permafrost/Alta_Valtellina/Landsat_ita/Cloud_mask_AltaValtellina/clip_2_foscagno"
def findRasters (path, filter):
for root, dirs, files in os.walk(path):
for file in fnmatch.filter(files, filter):
yield os.path.join (root, file)
for raster in findRasters (INPUT_FOLDER, '*.tif'):
print (raster)
outRaster = OUTPUT + '/clip_' + raster
cmd = 'gdalwarp -dstnodata 0 -q -cutline CLIP -crop_to_cutline %s %s' % (raster, outRaster)
os.system (cmd)
「gdal」コマンドに問題があるのではないかと思います。「印刷」機能は適切に機能しますが、出力にファイルが書き込まれず、エラーも表示されません。ちなみに、gdalコーディングに関する簡単なドキュメントを見つけるのは困難です...
まず始めに、Pythonとbashをgdalスクリプトで混合しています。これはgdalを使用するだけで実行できますか、それともpyqgisを使用する必要がありますか?
—
Nathan W
ありがとうございます。Pythonを使用したいのですが、これはより大きなスクリプトの開始点にすぎません。いくつかの回避策を使用してarcpyで行ったようにそれを使用することは可能ですか?
—
umbe1987 2013年
CLIP
でcmd
表現することは問題です。変数を文字列に入れても、読み込まれません。代わりに、変数と文字列を連結します。
現在、外部で使用していますが、エラーは出力されず、すべての「.tif」ラスタが適切に「印刷」されます。しかし、いくつかのことを行った後(ウィンドウを1秒未満で4回開くなど)、OUTPUTフォルダーに出力がありません。
—
umbe1987 2013年
の
—
Antonio Falciano 2013年
print(cmd)
代わりにでラスターパスを確認しますos.system(cmd)
。あなたのoutRaster
変数が正しくありません。