[QGIS-it-user] problema con python qgis

salve

sto scrivendo un codice che mi dovrebbe permettere di creare uno raster multibanda (stack raster) con python qgis.

La linea che mi causa l’errore è

processing.run (‘gdal:merge’, ‘/home/giacomo/file1.tif;/home/giacomo/file2.tif;/home/giacomo/file3.tif;/home/giacomo/file4.tif’, False, False, 5, ‘/home/giacomo/stack.tif’)

l’errore in questione è questo

Traceback (most recent call last):
File “/usr/lib/python3.7/code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
File “”, line 74, in
File “/usr/share/qgis/python/plugins/processing/tools/general.py”, line 114, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish=post_process, feedback=feedback, context=context)
File “/usr/share/qgis/python/plugins/processing/core/Processing.py”, line 130, in runAlgorithm
if context.feedback() is None:
AttributeError: ‘int’ object has no attribute 'feedback

Il mio QGIS ha le seguenti caratteristiche



QGIS version



3.8.0-Zanzibar



QGIS code revision



11aff65



Compiled against Qt



5.12.2



Running against Qt



5.12.2



Compiled against GDAL/OGR



2.4.0



Running against GDAL/OGR



2.4.0

Sapete dirmi in cosa sbaglio?

Una sintassi simile funzionava perfettamente in QGIS 2.18

Grazie

hai passato 5 come parametro, ma è un intero quel metodo non c'è

il feedback e il context sono oggetti qgis,
questo dovrebbe fare al caso tuo
https://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/tasks.html

Il 30/07/2019 22:53, Giacomo Fontanelli ha scritto:

salve

sto scrivendo un codice che mi dovrebbe permettere di creare uno raster multibanda (stack raster) con python qgis.

La linea che mi causa l'errore è

processing.run ('gdal:merge', '/home/giacomo/file1.tif;/home/giacomo/file2.tif;/home/giacomo/file3.tif;/home/giacomo/file4.tif', False, False, 5, '/home/giacomo/stack.tif')

l'errore in questione è questo

Traceback (most recent call last):
File "/usr/lib/python3.7/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<string>", line 74, in <module>
File "/usr/share/qgis/python/plugins/processing/tools/general.py", line 114, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish=post_process, feedback=feedback, context=context)
File "/usr/share/qgis/python/plugins/processing/core/Processing.py", line 130, in runAlgorithm
if context.feedback() is None:
AttributeError: 'int' object has no attribute 'feedback

Il mio QGIS ha le seguenti caratteristiche

QGIS version

3.8.0-Zanzibar

QGIS code revision

11aff65 <https://github.com/qgis/QGIS/commit/11aff65&gt;

Compiled against Qt

5.12.2

Running against Qt

5.12.2

Compiled against GDAL/OGR

2.4.0

Running against GDAL/OGR

2.4.0

Sapete dirmi in cosa sbaglio?

Una sintassi simile funzionava perfettamente in QGIS 2.18

Grazie

_______________________________________________
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao Giacomo,

devi passare i parametri in un dizionario:

processing.run('gdal:merge, parameters = {'INPUT': .....,
'SECONDO_PARAMETRO'.....})

per vedere i parametri da usare

processing.algorithmHelp('gdal:merge')

Matteo

Grazie

processing.algorithmHelp(‘gdal:merge’) l’ho sempre cercato, perchè mi permette di conoscere i parametri in ingresso al processing.

Ho provato a mettere tutto in un dizionario ma si ripresenta lo stesso errore:

parameters = {‘INPUT’: ‘/home/file1.tif;/home/file2.tif;/home/file3.tif;/home/file4.tif’,
‘PCT’: False,
‘SEPARATE’: False,
‘NODATA_INPUT’: 0,
‘NODATA_INPUT’: 0,
‘OPTIONS’: “”,
‘DATA_TYPE’: 5,
‘OUTPUT’: pathOutStack}

processing.run (‘gdal:merge’, parameters)

questo è l’errore

raceback (most recent call last):
File “/usr/lib/python3.7/code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
File “”, line 76, in
File “/usr/share/qgis/python/plugins/processing/tools/general.py”, line 114, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish=post_process, feedback=feedback, context=context)
File “/usr/share/qgis/python/plugins/processing/core/Processing.py”, line 130, in runAlgorithm
if context.feedback() is None:
AttributeError: ‘int’ object has no attribute ‘feedback’

Giacomo

Il giorno mer 31 lug 2019 alle ore 07:10 matteo <matteo.ghetta@gmail.com> ha scritto:

Ciao Giacomo,

devi passare i parametri in un dizionario:

processing.run('gdal:merge, parameters = {‘INPUT’: …,
‘SECONDO_PARAMETRO’…})

per vedere i parametri da usare

processing.algorithmHelp(‘gdal:merge’)

Matteo


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Scusate avevo messo due volte ‘NODATA_INPUT’: 0, \

ora ho corretto

parameters = {‘INPUT’: ‘/home/giacomo/aa/a1.tif;/home/giacomo/aa/a2.tif;/home/giacomo/aa/a10.tif;/home/giacomo/aa/a21.tif’,
‘PCT’: False,
‘SEPARATE’: False,
‘NODATA_INPUT’: 0,
‘NODATA_OUTPUT’: 0,
‘OPTIONS’: “”,
‘DATA_TYPE’: 5,
‘OUTPUT’: pathOutStack}

e l’errore è

Traceback (most recent call last):
File “/usr/lib/python3.7/code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
File “”, line 76, in
File “/usr/share/qgis/python/plugins/processing/tools/general.py”, line 106, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context)
File “/usr/share/qgis/python/plugins/processing/core/Processing.py”, line 137, in runAlgorithm
raise QgsProcessingException(msg)
_core.QgsProcessingException: Unable to execute algorithm
Incorrect parameter value for INPUT

Grazie

Il giorno mer 31 lug 2019 alle ore 19:00 Giacomo Fontanelli <giacomofontanelli76@gmail.com> ha scritto:

Grazie

processing.algorithmHelp(‘gdal:merge’) l’ho sempre cercato, perchè mi permette di conoscere i parametri in ingresso al processing.

Ho provato a mettere tutto in un dizionario ma si ripresenta lo stesso errore:

parameters = {‘INPUT’: ‘/home/file1.tif;/home/file2.tif;/home/file3.tif;/home/file4.tif’,
‘PCT’: False,
‘SEPARATE’: False,
‘NODATA_INPUT’: 0,
‘NODATA_INPUT’: 0,
‘OPTIONS’: “”,
‘DATA_TYPE’: 5,
‘OUTPUT’: pathOutStack}

processing.run (‘gdal:merge’, parameters)

questo è l’errore

raceback (most recent call last):
File “/usr/lib/python3.7/code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
File “”, line 76, in
File “/usr/share/qgis/python/plugins/processing/tools/general.py”, line 114, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish=post_process, feedback=feedback, context=context)
File “/usr/share/qgis/python/plugins/processing/core/Processing.py”, line 130, in runAlgorithm
if context.feedback() is None:
AttributeError: ‘int’ object has no attribute ‘feedback’

Giacomo

Il giorno mer 31 lug 2019 alle ore 07:10 matteo <matteo.ghetta@gmail.com> ha scritto:

Ciao Giacomo,

devi passare i parametri in un dizionario:

processing.run('gdal:merge, parameters = {‘INPUT’: …,
‘SECONDO_PARAMETRO’…})

per vedere i parametri da usare

processing.algorithmHelp(‘gdal:merge’)

Matteo


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao Giacomo,

e l'errore è

Traceback (most recent call last):
File "/usr/lib/python3.7/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<string>", line 76, in <module>
File "/usr/share/qgis/python/plugins/processing/tools/general.py",
line 106, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish,
feedback, context)
File "/usr/share/qgis/python/plugins/processing/core/Processing.py",
line 137, in runAlgorithm
raise QgsProcessingException(msg)
_core.QgsProcessingException: Unable to execute algorithm
Incorrect parameter value for INPUT

e l'errore è giustificato :wink:

INPUT: Input layers

  Parameter type: QgsProcessingParameterMultipleLayers

  Accepted data types:
    - list[str]: list of layer IDs
    - list[str]: list of layer names
    - list[str]: list of layer sources
    - list[QgsMapLayer]
    - QgsProperty

devi mettere i vari path dentro una lista:

parameters = {'INPUT':
['/home/giacomo/aa/a1.tif;/home/giacomo/aa/a2.tif;/home/giacomo/aa/a10.tif;/home/giacomo/aa/a21.tif'],
\
                        'PCT': False, \
                        'SEPARATE': False, \
                        'NODATA_INPUT': 0, \
                        'NODATA_OUTPUT': 0, \
                        'OPTIONS': "", \
                        'DATA_TYPE': 5, \
                        'OUTPUT': pathOutStack}

Ciao Matteo e grazie per i consigli

Ho trovato la soluzione:

Con QGIS 2.x i raster layer in INPUT erano dati sottoforma di una stringa con questa forma

‘/home/File1.tif;/home/File2.tif;/home/File3.tif’

Con QGIS 3.x invece si usa direttamente una lista, come [‘/home/File1.tif’, ‘/home/File2.tif’, ‘/home/File3.tif’]

In pratica questa è la parte incriminata del mio codice

parameters = {‘DATA_TYPE’ : 5,
‘INPUT’ : inputList,
‘NODATA_INPUT’ : None,
‘NODATA_OUTPUT’ : None,
‘OPTIONS’ : ‘’,
‘OUTPUT’ : outputStack,
‘PCT’ : False,
‘SEPARATE’ : True }

processing.run (‘gdal:merge’, parameters)

Mail priva di virus. www.avast.com

Il giorno gio 1 ago 2019 alle ore 07:08 matteo <matteo.ghetta@gmail.com> ha scritto:

Ciao Giacomo,

e l’errore è

Traceback (most recent call last):
File “/usr/lib/python3.7/code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
File “”, line 76, in
File “/usr/share/qgis/python/plugins/processing/tools/general.py”,
line 106, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish,
feedback, context)
File “/usr/share/qgis/python/plugins/processing/core/Processing.py”,
line 137, in runAlgorithm
raise QgsProcessingException(msg)
_core.QgsProcessingException: Unable to execute algorithm
Incorrect parameter value for INPUT

e l’errore è giustificato :wink:

INPUT: Input layers

Parameter type: QgsProcessingParameterMultipleLayers

Accepted data types:

  • list[str]: list of layer IDs
  • list[str]: list of layer names
  • list[str]: list of layer sources
  • list[QgsMapLayer]
  • QgsProperty

devi mettere i vari path dentro una lista:

parameters = {‘INPUT’:
[‘/home/giacomo/aa/a1.tif;/home/giacomo/aa/a2.tif;/home/giacomo/aa/a10.tif;/home/giacomo/aa/a21.tif’],

‘PCT’: False,
‘SEPARATE’: False,
‘NODATA_INPUT’: 0,
‘NODATA_OUTPUT’: 0,
‘OPTIONS’: “”,
‘DATA_TYPE’: 5,
‘OUTPUT’: pathOutStack}