Tôi đang sử dụng python và QGIS 2.0. Tôi đang cố gắng cắt các trình quét trong một thư mục bằng một tính năng đa giác. Đây là lần đầu tiên tôi sử dụng (giả sử) "PyQGIS", trước đây tôi đã quen với việc sử dụng. Dù sao, tôi không làm cho kịch bản đơn giản của mình hoạt động, bất kỳ đề xuất nào cũng sẽ được đánh giá cao!
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()
Dưới đây là những cải tiến tôi đã thực hiện kể từ bây giờ, mặc dù kịch bản không hoạt động, nhưng tôi nghĩ rằng tôi có thể tiến gần hơn ...
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)
Tôi nghĩ rằng có thể có lỗi gì đó trong lệnh "gdal", vì chức năng "in" thực hiện đúng chức năng của nó, nhưng không có tệp nào được ghi vào đầu ra, tôi không nhận được bất kỳ lỗi nào. Nhân tiện, thật khó để thích một tài liệu dễ dàng về mã hóa gdal ...
CLIP
trong cmd
biểu thức là vấn đề. Nếu bạn đặt một biến trong một chuỗi, nó không được đọc. Thay vào đó, bạn sẽ nối chuỗi với biến.
print(cmd)
vị trí của os.system(cmd)
. outRaster
Biến của bạn không đúng.