Docker-in-Docker (DinD) capabilities of public runners deactivated. More info

Commit 0e07d282 authored by PIERSON Julie's avatar PIERSON Julie
Browse files

bands can be renamed through table, very basic

parent 39362c27
...@@ -34,8 +34,11 @@ from qgis.PyQt.QtCore import QCoreApplication ...@@ -34,8 +34,11 @@ from qgis.PyQt.QtCore import QCoreApplication
from qgis.core import (QgsProcessing, from qgis.core import (QgsProcessing,
QgsProcessingAlgorithm, QgsProcessingAlgorithm,
QgsProcessingParameterRasterLayer, QgsProcessingParameterRasterLayer,
QgsProcessingParameterMatrix,
QgsProcessingParameterBand,
QgsProcessingParameterRasterDestination) QgsProcessingParameterRasterDestination)
import processing import processing
from osgeo import gdal
class RenameBandsAlgorithm(QgsProcessingAlgorithm): class RenameBandsAlgorithm(QgsProcessingAlgorithm):
...@@ -48,8 +51,9 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm): ...@@ -48,8 +51,9 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
# used when calling the algorithm from another algorithm, or when # used when calling the algorithm from another algorithm, or when
# calling from the QGIS console. # calling from the QGIS console.
OUTPUT = 'OUTPUT'
INPUT = 'INPUT' INPUT = 'INPUT'
TABLE = 'TABLE'
OUTPUT = 'OUTPUT'
def initAlgorithm(self, config): def initAlgorithm(self, config):
""" """
...@@ -66,6 +70,18 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm): ...@@ -66,6 +70,18 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
) )
) )
# table to reaorder and rename bands
self.addParameter(
QgsProcessingParameterMatrix(
self.TABLE,
self.tr('Nom et ordre des bandes'),
numberRows=0,
hasFixedNumberRows = False,
headers=['futur nom', 'ordre'],
defaultValue=[None,None]
)
)
# TODO # TODO
# output raster layer # output raster layer
self.addParameter( self.addParameter(
...@@ -82,8 +98,28 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm): ...@@ -82,8 +98,28 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
# Retrieve inputs and outputs # Retrieve inputs and outputs
input_raster = self.parameterAsRasterLayer(parameters, self.INPUT, context) input_raster = self.parameterAsRasterLayer(parameters, self.INPUT, context)
band_table = self.parameterAsMatrix(parameters, self.TABLE, context)
output_path_raster = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) output_path_raster = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
# get input raster path
raster_path = input_raster.source()
# read raster with gdal
raster_gdal = gdal.Open(raster_path)
# get number of bands
nbands = raster_gdal.RasterCount
# TODO : check if band number = row number in band_table
# transform band_table in a nested list, with 1 element per band, and name and order of each band
# [['band 1', 1], ['band 2', 2], ['band 3', 3]]
nb_col = 2
band_table = [band_table[n:n+nb_col] for n in range(0, len(band_table), nb_col)]
# iterate over each band to set its description
for band_number in range(nbands):
band = raster_gdal.GetRasterBand(band_number + 1)
band.SetDescription(band_table[band_number][0])
# running gdal:translate processing algorithm
param_translate = {'INPUT': input_raster, param_translate = {'INPUT': input_raster,
'TARGET_CRS':None, 'TARGET_CRS':None,
'NODATA':None, 'NODATA':None,
...@@ -95,7 +131,7 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm): ...@@ -95,7 +131,7 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
processing.run("gdal:translate", param_translate) processing.run("gdal:translate", param_translate)
# Return the results of the algorithm as a dictionary # Return the results of the algorithm as a dictionary
return {self.OUTPUT: output_path_raster} return {self.OUTPUT: output_path_raster, 'matrix': band_table}
def name(self): def name(self):
""" """
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment