[QGIS-it-user] errore nel collegamento di due algoritmi di processing nello stesso script

Salve, vi allego l’ultima parte di uno script python che dovrebbe funzionare come algoritmo di processing.

In pratica dovrebbe compiere un’operazione matematica su ogni banda di un multiband raster
e immediatamente creare un nuovo multiband raster in output con le bande calcolate.
Lo script funziona, ma alla fine fornisce un errore, credo sia perchè qgis sta cercando di caricare sulla canvas
ogni singola banda calcolata (e invece non dovrebbe, ma dovrebbe caricare solo il multiband raster).

Credo di non aver capito molto bene ancora come si collegano due operazioni di processing successive.

Riesco ad evitare il messaggio di errore solo se al momento dell’esecuzione
deflaggo l’opzione “Apri il risultato alla fine dell’algoritmo”.

Sapete darmi qualche consiglio?

Grazie

bandList =

fa un loop tra le bande del raster

for band in range(1, nBand+1):

svolge l’operazione matematica per ogni banda

outRas = processing.run(
‘qgis:rastercalculator’,
{“EXPRESSION”: operation = “10 * ( log10 ( " + pathStackIn + “@” + str(band) + " ) )”,
“LAYERS”: stackIn,
“CELLSIZE”: None,
“EXTENT”: None,
“CRS”: None,
“OUTPUT”: “TEMPORARY_OUTPUT”},
is_child_algorithm = True,
context = context,
feedback = feedback)

bandList.append(outRas[“OUTPUT”])

crea il nuovo multiband raster con i layer calcolati

outStack = processing.run(
‘gdal:merge’,
{“INPUT”: bandList,
“PCT”: False,
“SEPARATE”: True,
“NODATA_INPUT”: None,
“NODATA_OUTPUT”: None,
“OPTIONS”:“”,
“EXTRA”:“”,
“DATA_TYPE”: 5,
“OUTPUT”: parameters[self.OUTPUT]}
is_child_algorithm = True,
context = context,
feedback = feedback)

return {self.OUTPUT: outStack[“OUTPUT”]}

Ciao Giacomo,
qual è l'errore?

A presto.

Andrea

Il 15/12/2021 23:59, Giacomo Fontanelli ha scritto:

Lo script funziona, ma alla fine fornisce un errore, credo sia perchè qgis sta cercando di caricare sulla canvas
ogni singola banda calcolata (e invece non dovrebbe, ma dovrebbe caricare solo il multiband raster).

Ciao Andrea

questo è quello che viene mostrato alla fine dell’esecuzione dello script (che fornisce comunque un risultato perfetto)


Versione di QGIS: 3.22.1-Białowieża
Revisione codice QGIS: 663dcf8fb9
Versione di Qt: 5.12.8
Versione Python: 3.8.10
Versione di GDAL: 3.0.4
Versione di GEOS: 3.8.0-CAPI-1.13.1
Versione di PROJ: Rel. 6.3.1, February 10th, 2020
versione di PDAL: 2.0.1 (git-version: Release)
Algoritmo iniziato alle: 2021-12-16T09:58:16
In avvio l’algoritmo ‘Linear to dB’ …
Parametri in ingresso:
{ ‘INPUT’ : ‘/home/giacomo/Desktop/PP_esperimenti/4_PP_2020_I_r_stacks/I_HH_2020_stack.tif’, ‘OUTPUT’ : ‘TEMPORARY_OUTPUT’ }

Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/fc597f3178ca47e0b543c5a0936576a0/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/de653b67e79c43bf8589946c5ee972f0/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/8908d2eb383a4dba81bae9d61fba4887/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/f5dbf29e85ed4d61b73c417e84787653/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/59d7c1a8c19e405280b2384191248824/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/7a75cb2ae2ed46128826678140a94543/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/06ed438e78094c7c94a6e289715af4de/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/feebae37ea0d44389da6599c9d317759/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/519d926faa68436ab444e9b0faf302d8/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/471d544d7e4d401480c5baa5a30774ef/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/47657e7e6aee481692f119ba7d3fd995/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/81e912a8859742f998f8f54ea14a0ee1/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/730cd07bea554ab8ad3370f725afc92b/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/acf1afaf4f76438696c86eac2843aa15/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/c7c4e07db59f4d38bc9d2d06a4f64fda/OUTPUT.tif’}
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/2e1d47d229c64db793c9d5e40cedba6b/OUTPUT.tif’}
Comando GDAL:
gdal_merge.py -separate -ot Float32 -of GTiff -o /tmp/processing_xWeKZC/3983ace422504502b50b4df7d55b2d28/OUTPUT.tif --optfile /tmp/processing_xWeKZC/cd92fe92f4ab411eae2322cb9ed5bbc7/mergeInputFiles.txt
Risultato comando GDAL:
0…10…20…30…40…50…60…70…80…90…100 - done.
Processo completato con successo.
Risultati: {‘OUTPUT’: ‘/tmp/processing_xWeKZC/3983ace422504502b50b4df7d55b2d28/OUTPUT.tif’}
Execution completed in 2.78 secondi
Risultati:
{‘OUTPUT’: ‘/tmp/processing_xWeKZC/3983ace422504502b50b4df7d55b2d28/OUTPUT.tif’}

Caricamento layer
I seguenti layer non sono stati generati correttamente
• /tmp/processing_xWeKZC/c39d842bacba4a1a824e685ea21c8b5c/OUTPUT.tif
Puoi verificare il “Pannello dei messaggi” nella finestra principale di QGIS per trovare maggiori informazioni circa l’esecuzione dell’algoritmo


Nel “Pannello dei Messaggi” non viene scritto niente, ma guardando nel pannello dei Log, più precisamente nel pannello OGR, appare questo messaggio

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/fc597f3178ca47e0b543c5a0936576a0/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/de653b67e79c43bf8589946c5ee972f0/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/8908d2eb383a4dba81bae9d61fba4887/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/f5dbf29e85ed4d61b73c417e84787653/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/59d7c1a8c19e405280b2384191248824/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/7a75cb2ae2ed46128826678140a94543/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/06ed438e78094c7c94a6e289715af4de/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/feebae37ea0d44389da6599c9d317759/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/519d926faa68436ab444e9b0faf302d8/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/471d544d7e4d401480c5baa5a30774ef/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/47657e7e6aee481692f119ba7d3fd995/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/81e912a8859742f998f8f54ea14a0ee1/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/730cd07bea554ab8ad3370f725afc92b/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/acf1afaf4f76438696c86eac2843aa15/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/c7c4e07db59f4d38bc9d2d06a4f64fda/OUTPUT.tif ().()

2021-12-16T09:58:19 WARNING Impossibile aprire /tmp/processing_xWeKZC/2e1d47d229c64db793c9d5e40cedba6b/OUTPUT.tif ().()


io credo sia dovuto al fatto che qgis sta tentando di importare anche i layer temporanei.

Grazie

Il giorno gio 16 dic 2021 alle ore 09:38 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Ciao Giacomo,
qual è l’errore?

A presto.

Andrea

Il 15/12/2021 23:59, Giacomo Fontanelli ha scritto:

Lo script funziona, ma alla fine fornisce un errore, credo sia perchè
qgis sta cercando di caricare sulla canvas
ogni singola banda calcolata (e invece non dovrebbe, ma dovrebbe
caricare solo il multiband raster).


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

Il 16/12/2021 10:08, Giacomo Fontanelli ha scritto:

Nel "Pannello dei Messaggi" non viene scritto niente, ma guardando nel pannello dei Log, più precisamente nel pannello OGR, appare questo messaggio

Ciao Giacomo,
i layer che saranno aggiunti automaticamente alla mappa, alla fine dell'esecuzione dell'algoritmo, dipendono dalla tipologia dei parametri dichiarati nell'algoritmo.
Purtroppo hai condiviso solo una parte dello script e quindi non posso provare a controllare dov'è l'errore.

Il fatto che gli errori vengono riportati nel pannello OGR, vuol dire che non solo si tenta di aggiungere in mappa layer che non dovrebbero essere aggiunti, ma anche se si tenta di aggiungerli come layer vettoriali invece che come raster.

Inoltre, nella parte di script che hai condiviso ci sono degli errori.
Per esempio "operation =" che funzione ha in
"EXPRESSION": operation = "10 * ( log10 ( " + pathStackIn + "@" + str(band) + " ) )"?

E in
"OUTPUT": parameters[self.OUTPUT]}
manca una virgola finale.

Come fa a funzionare questo script con questi errori?

Comunque ho corretto gli errori e ho messo il tuo pezzo di script all'interno di un algoritmo generico adattandolo per l'occorrenza e aggiungendo quello che mancava, e non riscontro il problema da te riscontrato e le operazioni vanno a buon fine senza che si tenti di aggiungere layer inutili alla mappa.

A presto.

Andrea

Il 16/12/2021 14:42, Andrea Giudiceandrea ha scritto:

Comunque ho corretto gli errori e ho messo il tuo pezzo di script all'interno di un algoritmo generico adattandolo per l'occorrenza e aggiungendo quello che mancava, e non riscontro il problema da te riscontrato e le operazioni vanno a buon fine senza che si tenti di aggiungere layer inutili alla mappa.

Ops.. mi correggo.
Non riscontro l'errore:
"I seguenti layer non sono stati generati correttamente
• /tmp/processing_xWeKZC/c39d842bacba4a1a824e685ea21c8b5c/OUTPUT.tif
Puoi verificare il "Pannello dei messaggi" nella finestra principale di QGIS per trovare maggiori informazioni circa l'esecuzione dell'algoritmo".

Invece effettivamente riscontro gli avvisi "Warning" nel pannello OGR. Questi avvisi non sono però legati all'errore relativo al layer non generato correttamente.

Ciao Andrea e intanto grazie.

Faccio prima ad allegare tutto lo script.
Probabilmente adesso hai una visione d’insieme più chiara

In pratica lo script dovrebbe prendere un multilayer raster, convertire tutte le bande in decibel e rifare lo stack

Non capisco perchè QGIS tenti di aggiungere vettoriali, dato che nello script non sono contemplati layer vettoriali.

Di nuovo grazie

giacomo

Il giorno gio 16 dic 2021 alle ore 16:11 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Il 16/12/2021 14:42, Andrea Giudiceandrea ha scritto:

Comunque ho corretto gli errori e ho messo il tuo pezzo di script
all’interno di un algoritmo generico adattandolo per l’occorrenza e
aggiungendo quello che mancava, e non riscontro il problema da te
riscontrato e le operazioni vanno a buon fine senza che si tenti di
aggiungere layer inutili alla mappa.

Ops… mi correggo.
Non riscontro l’errore:
“I seguenti layer non sono stati generati correttamente
• /tmp/processing_xWeKZC/c39d842bacba4a1a824e685ea21c8b5c/OUTPUT.tif
Puoi verificare il “Pannello dei messaggi” nella finestra principale di
QGIS per trovare maggiori informazioni circa l’esecuzione dell’algoritmo”.

Invece effettivamente riscontro gli avvisi “Warning” nel pannello OGR.
Questi avvisi non sono però legati all’errore relativo al layer non
generato correttamente.


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

script_giacomo.py (3.83 KB)

Il 16/12/2021 17:05, Giacomo Fontanelli ha scritto:

"I seguenti layer non sono stati generati correttamente

• /tmp/processing_xWeKZC/c39d842bacba4a1a824e685ea21c8b5c/OUTPUT.tif
Puoi verificare il “Pannello dei messaggi” nella finestra principale di
QGIS per trovare maggiori informazioni circa l’esecuzione dell’algoritmo".

Quell’errore è causato dalle seguenti linee di codice nel tuo script:

4C Output stack

stackOut = self.parameterAsOutputLayer(
parameters,
self.OUTPUT,
context)

Invece, dei “Warning” non so ancora spiegare il motivo…

Gli avvisi “Impossibile aprire …” (che comunque non sono “errori”), presenti nel tab OGR del pannello del log dei messaggi, sono generati dall’algoritmo “Merge” di GDAL (gdal:merge).

Tale algoritmo genera gli stessi warning anche quando utilizzato direttamente in maniera interattiva dal pannello degli strumenti di processing.

Il bug era già stato segnalato https://issues.qgis.org/issues/19597 qualche anno fa ed era stata implementata anche una patch https://github.com/qgis/QGIS/pull/7608 che avrebbe dovuto risolverlo… ma evidentemente non è stata risolutiva.

A presto.

Andrea

Andrea grazie mille
speriamo risolvano questo bug

l’ultima domanda: mi hai segnalato che l’errore è in

4C Output stack

stackOut = self.parameterAsOutputLayer(
parameters,
self.OUTPUT,
context)

Come sarebbe la versione corretta della sintassi?

Grazie di nuovo

Giacomo

Il giorno ven 17 dic 2021 alle ore 08:56 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Il 16/12/2021 17:45, Andrea Giudiceandrea ha scritto:

Invece, dei “Warning” non so ancora spiegare il motivo…

Gli avvisi “Impossibile aprire …” (che comunque non sono “errori”), presenti nel tab OGR del pannello del log dei messaggi, sono generati dall’algoritmo “Merge” di GDAL (gdal:merge).

Tale algoritmo genera gli stessi warning anche quando utilizzato direttamente in maniera interattiva dal pannello degli strumenti di processing.

Il bug era già stato segnalato https://issues.qgis.org/issues/19597 qualche anno fa ed era stata implementata anche una patch https://github.com/qgis/QGIS/pull/7608 che avrebbe dovuto risolverlo… ma evidentemente non è stata risolutiva.

A presto.

Andrea


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

Il 17/12/2021 10:53, Giacomo Fontanelli ha scritto:

# 4C Output stack
stackOut = self.parameterAsOutputLayer(
parameters,
self.OUTPUT,
context)

Come sarebbe la versione corretta della sintassi?

Devi eliminarlo. Peraltro, la variabile stackOut non viene utilizzata in nessun altra parte quindi è inutile.

Inoltre ti posso consigliare di sostituire

     pathStackIn = self\.parameterAsString\(
         parameters,
         self\.INPUT,
         context\)

e

     stackIn = QgsRasterLayer\(pathStackIn, &quot;stack&quot;\)

con

     stackIn = self\.parameterAsRasterLayer\(parameters,
                                                  &#39;INPUT&#39;,
                                                  context\)

     pathStackIn = stackIn\.source\(\)

A presto.

Andrea

Il 17/12/2021 10:53, Giacomo Fontanelli ha scritto:

Andrea grazie mille
speriamo risolvano questo bug

Beh... difficilmente potrà essere risolto se non viene segnalato nel repository GitHub di QGIS...
https://github.com/qgis/QGIS/issues/46534

A presto.

Andrea