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
from qgis.core import (QgsProcessing,
QgsProcessingAlgorithm,
QgsProcessingParameterRasterLayer,
QgsProcessingParameterMatrix,
QgsProcessingParameterBand,
QgsProcessingParameterRasterDestination)
import processing
from osgeo import gdal
class RenameBandsAlgorithm(QgsProcessingAlgorithm):
......@@ -48,8 +51,9 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
# used when calling the algorithm from another algorithm, or when
# calling from the QGIS console.
OUTPUT = 'OUTPUT'
INPUT = 'INPUT'
TABLE = 'TABLE'
OUTPUT = 'OUTPUT'
def initAlgorithm(self, config):
"""
......@@ -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
# output raster layer
self.addParameter(
......@@ -82,8 +98,28 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
# Retrieve inputs and outputs
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)
# 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,
'TARGET_CRS':None,
'NODATA':None,
......@@ -95,7 +131,7 @@ class RenameBandsAlgorithm(QgsProcessingAlgorithm):
processing.run("gdal:translate", param_translate)
# 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):
"""
......
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