sábado, 11 de marzo de 2017

Uso de processing gdalogr:cliprasterbymasklayer con PyQGIS

Cortar (clip) un ráster por máscara (vectorial tipo polígono) es otra de las opciones también disponibles en processing a través del método gdalogr:cliprasterbymasklayer. Sin embargo, no produce una capa perfectamente alineada con el ráster base; algo que posteriormente habría que solucionar en el parámetro 'EXTRA'.



Los parámetros a ser usados se encuentran a continuación:


y la situación a considerar es la siguiente:


El código completo desarrollado corresponde a:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import processing

mask = processing.getObjectFromName('polygon2')
input = processing.getObjectFromName('utah_demUTM2')

path = processing.runalg('gdalogr:cliprasterbymasklayer', 
                         input,    #INPUT <ParameterRaster>
                         mask,     #MASK <ParameterVector>
                         "0",       #NO_DATA <ParameterString>
                         False,    #ALPHA_BAND <ParameterBoolean>
                         True,     #CROP_TO_CUTLINE <ParameterBoolean>
                         True,     #KEEP_RESOLUTION <ParameterBoolean>
                         5,        #RTYPE <ParameterSelection>
                         0,        #COMPRESS <ParameterSelection>
                         1,        #JPEGCOMPRESSION <ParameterNumber>
                         1,        #ZLEVEL <ParameterNumber>
                         1,        #PREDICTOR <ParameterNumber>
                         False,    #TILED <ParameterBoolean>
                         0,        #BIGTIFF <ParameterSelection>
                         False,    #TFW <ParameterBoolean>
                         "",       #EXTRA <ParameterString>
                         None)     #OUTPUT <OutputRaster>

clipped = QgsRasterLayer(path['OUTPUT'],
                         'clipped')

QgsMapLayerRegistry.instance().addMapLayer(clipped)

Después de ejecutado en la Python Console de QGIS, un Zoom al ráster resultante permite tener lo siguiente:


Se corroboró que el ráster producido no está alineado con el ráster base. Esto se puede solucionar con:

1
-te xmin ymin xmax ymax


colocado como string en el parámetro 'EXTRA'. Sin embargo, esto requiere código adicional para determinar precisamente los valores de (xmin, ymin) y (xmax, ymax).

No hay comentarios: