sábado, 2 de diciembre de 2017

Empleando Processing gdal:cliprasterbymasklayer en QGIS 2.99

Para finalizar esta visión exploratoria de Processing en QGIS 2.99 voy a seleccionar gdal:cliprasterbymasklayer porque no aparece en la oferta de algoritmos de Processing invocadas con:

1
2
for key, value in processing.algs.help.shortHelp.items():
    print(key)

pero, sin embargo, puede ser encontrada en la Processing Toolbox. Con relación a QGIS 2.18 el método cambió de gdalogr:cliprasterbymasklayer a gdal:cliprasterbymasklayer en QGIS 2.99 (algo que me costó encontrar debido a la ausencia de una buena ayuda equivalente al método 'alglist' del antiguo Processing). La evaluación de los parámetros con:

processing.algorithmHelp('gdal:cliprasterbymasklayer')

resultó en:

INPUT:  <QgsProcessingParameterRasterLayer>
 Input layer

MASK:  <QgsProcessingParameterFeatureSource>
 Mask layer

NODATA:  <QgsProcessingParameterNumber>
 Assign a specified nodata value to output bands

ALPHA_BAND:  <QgsProcessingParameterBoolean>
 Create and output alpha band

CROP_TO_CUTLINE:  <QgsProcessingParameterBoolean>
 Crop the extent of the target dataset to the extent of the cutline

KEEP_RESOLUTION:  <QgsProcessingParameterBoolean>
 Keep resolution of output raster

OPTIONS:  <QgsProcessingParameterString>
 Additional creation parameters

DATA_TYPE:  <QgsProcessingParameterEnum>
 Output data type
  0 - Byte
  1 - Int16
  2 - UInt16
  3 - UInt32
  4 - Int32
  5 - Float32
  6 - Float64
  7 - CInt16
  8 - CInt32
  9 - CFloat32
  10 - CFloat64

OUTPUT:  <QgsProcessingParameterRasterDestination>
 Clipped (mask)

lo que sirvió de base para producir el código a continuación:

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import processing

registry = QgsProject.instance()

raster = registry.mapLayersByName('Utah DemUTM2')
Polygon1 = registry.mapLayersByName('Polygon1')

output = 'C:/pyqgis_data/clipped_raster.tif'

processing.runAndLoadResults('gdal:cliprasterbymasklayer', 
                            {'INPUT':raster[0],
                             'MASK':Polygon1[0],
                             'NODATA':"-999",
                             'ALPHA_BAND':False,
                             'CROP_TO_CUTLINE':False,
                             'KEEP_RESOLUTION':False,
                             'DATA_TYPE':5,
                             'OUTPUT':output})

El código anterior se probó con las capas siguientes y a pesar de ejecutarse sin errores no produjo la capa resultante en la ruta esperada; evidenciando que si no está en la lista de processing.algs.help.shortHelp.items() todavía no ha sido adecuadamente implementado.


La ejecución de la herramienta en la Processing Toolbox, equivalente al código anterior, se presenta como sigue:


y después de su ejecución tenemos:


donde un Zoom In al borde inferior de la máscara permite corroborar que la alineación con el ráster original es perfecta.


1 comentario:

GERALDO SOUZA dijo...

Bom dia! Sou seguidor do blog.uma duvida, p favor, qual codigo para gerar polygonyze e separar as classes do raster em areas?Grato.