ฉันใช้ python และ QGIS 2.0 ฉันพยายามที่จะคลิป rasters ในโฟลเดอร์ด้วยคุณสมบัติรูปหลายเหลี่ยมเดียว มันเป็นครั้งแรกที่ฉันใช้ (สมมุติ) "PyQGIS" ฉันเคยชินกับการโค้งก่อน อย่างไรก็ตามฉันไม่ได้รับสคริปต์ง่ายๆของฉันทำงานข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก!
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" เนื่องจากฟังก์ชั่น "print" ทำงานได้อย่างเหมาะสม แต่ไม่มีไฟล์ใดถูกเขียนไปยังเอาต์พุตและฉันไม่ได้รับข้อผิดพลาดใด ๆ อย่างไรก็ตามมันเป็นเรื่องยากที่จะรักเอกสารง่าย ๆ ในการเขียนรหัส gdal ...
CLIP
ในcmd
การแสดงออกที่เป็นปัญหา หากคุณใส่ตัวแปรในสตริงมันจะไม่อ่าน คุณจะเชื่อมสตริงกับตัวแปรแทน
print(cmd)
ตัวแปรos.system(cmd)
ของคุณoutRaster
ไม่ถูกต้อง