Самый быстрый способ замаскировать растр с помощью полигонов из файла gml - PullRequest
0 голосов
/ 06 июня 2018

Я создаю скрипт без предварительной обработки для предварительной обработки изображений 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 в шейп-файлоблачные пиксели

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, но это не ускоряет работу.

Не знаете, почему существует такая разница во времени?Можете ли вы предложить способ ускорить растеризацию шейп-файла?

Спасибо

1 Ответ

0 голосов
/ 11 июня 2018

Таким образом, решение состояло в том, чтобы фактически позволить Gdal непосредственно обрабатывать растеризацию: поэтому сначала я строю строку, соответствующую следующему синтаксису 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)

Это оказалось намного быстрее, чем все другие найденные решения.Это может быть менее изящно или "питонно", но пока я не мог найти никакого недостатка в этом.

...