파이썬과 QGIS 2.0을 사용하고 있습니다. 하나의 다각형 기능으로 폴더의 래스터를 자르려고합니다. "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"명령에 문제가 있다고 생각합니다. 그건 그렇고, gdal 코딩에 대한 쉬운 문서를 좋아하는 것은 어렵습니다 ...
글쎄, 처음에는 파이썬과 bash를 gdal 스크립팅과 혼합하고 있습니다. gdal을 사용 하여이 작업을 수행 할 수 있습니까, 아니면 pyqgi를 사용해야합니까?
—
Nathan W
고맙습니다. 파이썬을 사용하고 싶습니다. 큰 스크립트의 시작점이 될 것입니다. 몇 가지 해결 방법으로 arcpy로했던 것처럼 사용할 수 있습니까?
—
umbe1987
CLIP
의 cmd
표현은 문제입니다. 문자열에 변수를 넣으면 읽지 않습니다. 대신 문자열을 변수와 연결합니다.
지금 밖에서 사용하고 있는데 오류가 발생하지 않으며 모든 ".tif"래스터를 올바르게 "인쇄"합니다. 그러나 몇 가지 작업을 수행 한 후 (예 : 창을 1 초 미만으로 열 때와 같이) OUTPUT 폴더에 출력이 없습니다.
—
umbe1987
print(cmd)
대신 래스터 경로를 확인하십시오 os.system(cmd)
. 귀하의 outRaster
변수가 올바르지 않습니다.