Я создаю сценарий без головы для предварительной обработки изображений 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. Следующее:
перевести gml в шейп-файл
ogr2ogr.main(["","-f", "ESRI Shapefile", "-s_srs", "EPSG:32630", cpv, clMpath])
растрируйте маску облаков, чтобы получить растр только с 0 (без облаков) и 1 (облако)
# 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, но это не ускоряет работу.
Знаете ли вы, почему такая разница во времени? Можете ли вы предложить способ ускорить растрирование шейп-файла?
Спасибо