我正在构建一个无头脚本来预处理Sentinel图像。有关信息,会话设置如下:
import sys
import os
import qgis
from qgis.core import *
#from PyQt4.QtGui import *
QgsApplication.setPrefixPath("/usr", False)
app = QgsApplication([], False)
app.initQgis()
sys.path.append('/usr/share/qgis/python/plugins')
from processing.core.Processing import Processing
Processing.initialize()
import processing as p
其中一个步骤包括获取提供的云掩码文件(.gml),将其转换为栅格并使用它来掩盖Sentinel映像。 如下:
ogr2ogr.main(["","-f", "ESRI Shapefile", "-s_srs", "EPSG:32630", cpv, clMpath])
# parameters to rasterize
fName=[field.name() for field in QgsVectorLayer(cpv, "cl", "ogr").pendingFields()][0]
p.runalg("gdalogr:rasterize", cpv, fName, 1, 10,10, extImg, False, 5,0,4,75, 6,1,False,0,"-burn 1 -a_srs 'EPSG:32630'",cloudRast)
rMaskPath=wod+"clMaskNDVI.tif"
p.runalg("gdalogr:rastercalculator", img, "1", cloudRast, "1", None, "1", None, "1", None, "1", None, "1", "A*((-1*B)+1)", "", 5, "", rMaskPath)
此操作以交互方式(约1分钟)快速完成,但是当我通过脚本启动它时大约需要40分钟(主要是光栅化多边形图层)。我还尝试过其他方法:直接使用GML文件或grass7模块,但这不会加快操作速度。
你知道为什么会有这样的时间差异吗?你能建议一种加速光栅化shapefile的方法吗?
由于
答案 0 :(得分:0)
所以解决方案实际上是让Gdal直接处理rastertization: 所以首先我构建一个字符串,遵循标准的gdal语法:
cmd="gdal_rasterize -burn 0 -a_nodata 1000 -a_srs %s -te %s -tr %s %s %s %s" %(imgCrs.authid(), extImg.replace(","," "), cloudRes, cloudRes, cpv, cloudRast)
然后我让系统运行它:
os.system(cmd)
事实证明,这比其他所有解决方案都要快得多。它可能不那么优雅或者#py; 34#pytonic"但到目前为止,我无法找到任何缺点。