[QGIS-it-user] qgis_process -

Ciao, sto facendo alcuni test sul nuovo tool da riga di comando,

uso ubuntu 18.04
qgis 3.14.1
gdal 2.2.3

lanciando il comando randompointsinsidepolygons, dove i parametri sono:

----------------
Arguments
----------------

INPUT: Input layer
        Argument type: source
        Acceptable values:
                - Path to a vector layer
STRATEGY: Sampling strategy
        Argument type: enum
        Available values:
                - 0: Points count
                - 1: Points density
        Acceptable values:
                - Number of selected option, e.g. '1'
                - Comma separated list of options, e.g. '1,3'
VALUE: Point count or density
        Argument type: number
        Acceptable values:
                - A numeric value
MIN_DISTANCE: Minimum distance between points
        Argument type: distance
        Acceptable values:
                - A numeric value
OUTPUT: Random points
        Argument type: sink
        Acceptable values:
                - Path for new vector layer

ottengo questo errore:

pigreco@lenovo:/mnt/c/Users/pigre/Desktop/Limiti01012020_g$ qgis_process run
qgis:randompointsinsidepolygons --STRATEGY=0 --VALUE=1000
--INPUT="./ProvCM01012020_g/ProvCM01012020_g_WGS84.shp"
--OUTPUT="./output/random_point_prov.shp"

/usr/lib/python3/dist-packages/qgis/utils.py:743: DeprecationWarning: the
imp module is deprecated in favour of importlib; see the module's
documentation for alternative uses
  mod = _builtin_import(name, globals, locals, fromlist, level)
Problem with SAGA installation: SAGA was not found or is not correctly
installed
----------------
Inputs
----------------

INPUT: ./ProvCM01012020_g/ProvCM01012020_g_WGS84.shp
OUTPUT: ./output/random_point_prov.shp
STRATEGY: 0
VALUE: 1000

Logged critical: Traceback (most recent call last):
  File
"/usr/share/qgis/python/plugins/processing/algs/qgis/RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

Traceback (most recent call last):
  File
"/usr/share/qgis/python/plugins/processing/algs/qgis/RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'
ERROR: Traceback (most recent call last):
  File
"/usr/share/qgis/python/plugins/processing/algs/qgis/RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

è normale??

saluti

-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Totò wrote

  File
"/usr/share/qgis/python/plugins/processing/algs/qgis/RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

Ciao Salvatore,
hai provato ad usare lo stesso algoritmo con gli stessi parametri anche su
Windows.
Puoi confermare che che il problema non è specifico di Linux?

Comunque,
siccome l'algoritmo deve utilizzare un ellissoide per calcolare l'area dei
poligoni, cerca di recuperare tale l'informazione dalle impostazioni del
progetto. Questo approccio funziona bene quando l'algoritmo è eseguito in un
progetto con QGIS.

Con qgis_process invece, come puoi leggere nel log
"da.setEllipsoid(context.project().ellipsoid() AttributeError: 'NoneType'
object has no attribute 'ellipsoid'), l'algoritmo non ha alcun progetto a
cui far riferimento per sapere quale ellissoide deve utilizzare e quindi si
interrompe.

Questo è un altro problema da risolvere: fare in modo che usando
qgis_process si possano specificare i valori di alcuni parametri che
solitamente gli algoritmi prendono da quelli memorizzati nelle impostazioni
di progetto.

Per il momento penso che non ci sia un alcun modo per aggirare il problema
in maniera generale per tutti gli algoritmi che devono usare le impostazioni
di un progetto.

Nel tuo caso specifico, dovresti poter eseguire comunque l'algoritmo con
successo con quei parametri modificando la riga 160 del file
RandomPointsPolygons.py con:

if strategy == 1
    da.setEllipsoid(context.project().ellipsoid())

tanto con il parametro STRATEGY=0 non è strettamente necessario effettuare
il calcolo della superficie.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Andrea Giudiceandrea wrote

Totò wrote

  File
"/usr/share/qgis/python/plugins/processing/algs/qgis/RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

Ciao Salvatore,
hai provato ad usare lo stesso algoritmo con gli stessi parametri anche su
Windows.
Puoi confermare che che il problema non è specifico di Linux?

Ciao ANdrea,
confermo, l'errore non è specifico di linux in quanto si verifica anche in
windows:

C:\Users\pigre\Desktop\Limiti01012020_g>qgis_process.exe run
qgis:randompointsinsidepolygons --STRATEGY=0 --VALUE=1000
--INPUT="./ProvCM01012020_g/ProvCM01012020_g_WGS84.shp"
--OUTPUT="./output/random_point_prov.shp"
Qt WebEngine seems to be initialized from a plugin. Please set
Qt::AA_ShareOpenGLContexts using QCoreApplication::setAttribute before
constructing QGuiApplication.
C:/OSGEO4~1/apps/qgis/./python\qgis\utils.py:743: DeprecationWarning:

the imp module is deprecated in favour of importlib; see the module's
documentation for alternative uses

----------------
Inputs
----------------

INPUT: ./ProvCM01012020_g/ProvCM01012020_g_WGS84.shp
OUTPUT: ./output/random_point_prov.shp
STRATEGY: 0
VALUE: 1000

Logged critical: Traceback (most recent call last):
  File
"C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\qgis\RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

Traceback (most recent call last):
  File
"C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\qgis\RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'
ERROR: Traceback (most recent call last):
  File
"C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\qgis\RandomPointsPolygons.py",
line 160, in processAlgorithm
    da.setEllipsoid(context.project().ellipsoid())
AttributeError: 'NoneType' object has no attribute 'ellipsoid'

IMHO è un bug,
se lo strumento è nato per la riga di comando, il progetto non dovrebbe più
condizionare gli algoritmi.

grazie

PS continuo con i test

-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Traceback (most recent call last):
File
“C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\qgis\RandomPointsPolygons.py”,
line 160, in processAlgorithm
da.setEllipsoid(context.project().ellipsoid())
AttributeError: ‘NoneType’ object has no attribute ‘ellipsoid’
ERROR: Traceback (most recent call last):
File
“C:/OSGEO4~1/apps/qgis/./python/plugins\processing\algs\qgis\RandomPointsPolygons.py”,
line 160, in processAlgorithm
da.setEllipsoid(context.project().ellipsoid())
AttributeError: ‘NoneType’ object has no attribute ‘ellipsoid’

Una curiosità, ma non vorrei mi fosse sfuggito qualcosa, il problema si pone con tutti gli algoritmi?
Hai provato con un altro? Per esempio Centroids, Buffer?

IMHO è un bug,
se lo strumento è nato per la riga di comando, il progetto non dovrebbe più
condizionare gli algoritmi.

Si, concordo, e temo sia quello il problema, il progetto non deve essere una condizione necessaria per eseguire un algoritmo.
Se così fosse i soli algoritmi che soffrono di questo problema dovrebbero essere i seguenti:

ExecuteSQL,
ExportGeometryInfo,
FieldsCalculator,
···

Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

Salvatore Larosa-2 wrote

Una curiosità, ma non vorrei mi fosse sfuggito qualcosa, il problema si
pone con tutti gli algoritmi?
Hai provato con un altro? Per esempio Centroids, Buffer?

Ciao,
no, con centroid funziona.

saluti

-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Andrea Giudiceandrea wrote

Nel tuo caso specifico, dovresti poter eseguire comunque l'algoritmo con
successo con quei parametri modificando la riga 160 del file
RandomPointsPolygons.py con:

if strategy == 1
    da.setEllipsoid(context.project().ellipsoid())

allego il file RandomPointsPolygons.py,
come dovrei modificarlo??

https://gist.github.com/pigreco/deb5efabb7e794198e315463c38e03e6

-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Salvatore Larosa-2 wrote

Una curiosità, ma non vorrei mi fosse sfuggito qualcosa, il problema si
pone con tutti gli algoritmi?

Ciao Salvatore,
non tutti, solo quelli che hanno bisogno di informazioni memorizzate nelle
impostazioni del progetto: per esempio, l'ellissoide scelto, il crs del
progetto, le unità di area o di lunghezza, ...

Salvatore Larosa-2 wrote

Se così fosse i soli algoritmi che soffrono di questo problema dovrebbero
essere i seguenti:
ExecuteSQL,
ExportGeometryInfo,
FieldsCalculator,
HubDistanceLines,
HubDistancePoints,
PointDistance,
PointsToPaths,
RandomPointsAlongLines,
RandomPointsPolygons

Oltre a quelli in Python elencati da te:
qgis:executesql (da verificare)
qgis:exportaddgeometrycolumns (solo metodi 1 e 2)
qgis:fieldcalculator
qgis:distancetonearesthublinetohub
qgis:distancetonearesthubpoints
qgis:distancematrix
qgis:pointstopath
qgis:randompointsalongline
qgis:randompointsinsidepolygons

ci sono anche questi sempre in Python:
qgis:rastercalculator
qgis:postgisexecuteandloadsql
qgis:tilesxyzdirectory

Inoltre, quelli elencati sono solo gli algoritmi in python (qgis:...), poi
ci sono anche quelli in c++ (native:...):
native:antimeridiansplit
native:sumlinelengths
native:calculatevectoroverlaps
native:nearestneighbouranalysis
native:refactorfields
native:linedensity (questo non dovrebbe generare l'errore, ma effettuerebbe
il calcolo senza tener conto dell'ellissoide)
native:aggregate
native:hublines
native:rasterize (utilizza un progetto)
native:loadlayer (modifica un progetto)
native:setprojectvariable (modifica un progetto)
native:stylefromproject (utilizza un progetto)
native:bookmarkstolayer (utilizza un progetto)
native:categorizeusingstyle
native:networkanalysis

E non sono sicuro che questo elenco sia esaustivo di tutti gli algoritmi che
fanno uso delle impostazioni relative ad un progetto.

Totò wrote

allego il file RandomPointsPolygons.py,
come dovrei modificarlo??

Come avevo indicato, così:
https://gist.github.com/agiudiceandrea/fa9d334cafd124436267c92b920b9062/revisions

Ma questo dovrebbe risolvere l'errore solo per strategy == 0, mentre sarebbe
irrisolto per strategy == 1.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Salvatore Larosa-2 wrote

Credo comunque sia una cosa abbastanza semplice da sistemare.

Quale approccio consiglieresti?

Aggiungere una parametro a qgis_process per specficare un progetto da
utilizzare?
Ci vorrebbe poi un metodo per creare un progetto con le informazioni
necessarie anche in un sistema senza gui.

Oppure aggiungere tanti parametri a qgis_process quante sono le informazioni
memorizzate in un progetto di cui hanno bisogno tutti i vari algoritmi?
Ne andrebbe fatta una ricognizione e poi modificati tutti affinché possano
funzionare in questo modo. E poi ne andrebbero aggiunti ogni volte che un
nuovo algoritmo abbia bisogno di una nuova informazione...

Oppure ancora, modificare gli algoritmi in modo da non generare errori e
continuare l'esecuzione anche in caso di mancanza di un progetto a cui fare
riferimento?
In questo caso però si potrebbero ottenere risultati non corretti.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

On Mon, Jul 27, 2020 at 5:50 PM Andrea Giudiceandrea <andreaerdna@libero.it> wrote:

Salvatore Larosa-2 wrote

Credo comunque sia una cosa abbastanza semplice da sistemare.

Quale approccio consiglieresti?

Non mi ci sono soffermato più di tanto, intanto andrebbe visto quali sono gli algoritmi che fanno la chiamata a context.project(),
capire effettivamente se l’istanza progetto è necessaria (credo di si) ma soprattutto evitare risultati falsati.

Come giustamente hai osservato tu, gli algoritmi sono molti di più, andrebbe approfondito!

Non saprei che approccio utilizzare in particolare. Si potrebbe pensare ad una variabile, PROJECT_FILE che se definita attiverebbe o meno l’algoritmo che necessita di un file di progetto.
Oppure, capire se la proprietà che serve per l’esecuzione dell’algoritmo può essere recuperata diversamente, dal layer di input per esempio o altro.
Si potrebbe anche evitare di listare gli algoritmi che necessitano di un progetto per essere eseguiti.
Ci sto ragionando insieme a te, non mi sono fatto un’idea precisa, ho dato un’occhiata molto superficiale al codice.

Infine, forse la via più veloce, si potrebbe aprire una issue segnalando il problema. Magari chi conosce bene quella parte di codice riesce ad individuare la soluzione corretta.

Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

Salvatore Larosa-2 wrote

Infine, forse la via più veloce, si potrebbe aprire una issue segnalando
il
problema. Magari chi conosce bene quella parte di codice riesce ad
individuare la soluzione corretta.

Sì, infatti. Ho scritto un bug report
https://github.com/qgis/QGIS/issues/37988

Ti chiedevo un parere perché io non ero riuscito a trovare una approccio
risolutivo senza controindicazioni e solitamente i bug report che contengono
anche una possibile soluzione al problema vengono risolti più velocemente.

Comunque colgo l'occasione per segnalare che recentemente è stato risolto un
piccolo problema di qgis_process https://github.com/qgis/QGIS/pull/37884 e
un altro problema è stato segnalato
https://github.com/qgis/QGIS/issues/37877 e proposta una modifica al codice
che spero verrà anch'essa presto implementata
https://github.com/qgis/QGIS/pull/37883

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Salvatore Larosa-2 wrote

Infine, forse la via più veloce, si potrebbe aprire una issue segnalando
il
problema. Magari chi conosce bene quella parte di codice riesce ad
individuare la soluzione corretta.

Sì, infatti. Ho scritto un bug report
https://github.com/qgis/QGIS/issues/37988

Perfetto. Grazie!

Comunque colgo l’occasione per segnalare che recentemente è stato risolto un
piccolo problema di qgis_process https://github.com/qgis/QGIS/pull/37884 e
un altro problema è stato segnalato
https://github.com/qgis/QGIS/issues/37877 e proposta una modifica al codice
che spero verrà anch’essa presto implementata
https://github.com/qgis/QGIS/pull/37883

Grazie, un contributo utile a tutti!

Saluti,
SL

···

Salvatore Larosa
linkedIn: http://linkedin.com/in/larosasalvatore
twitter: @lrssvt
skype: s.larosa
IRC: lrssvt on freenode

Salvatore Larosa-2 wrote

Sì, infatti. Ho scritto un bug report
https://github.com/qgis/QGIS/issues/37988

Perfetto. Grazie!

Il bug dovebbe essere stato risolto: https://github.com/qgis/QGIS/pull/37992

Sono stati aggiunti dei nuovi parametri al tool qgis_process
("--ELLIPSOID=", "--DISTANCE_UNITS=", "--AREA_UNITS" e "--PROJECT_PATH=")
necessari per l'esecuzione di alcuni algoritmi, un bel po' di algoritmi di
processing sono stati modificati di conseguenza e alcuni sono stati esclusi
dall'uso con qgis_process perché il loro utilizzo ha senso solo all'interno
di QGIS o perché il loro uso è deprecato e verranno rimossi o riscritti in
una prossima versione di QGIS.

Rimane ancora aperto il bug https://github.com/qgis/QGIS/issues/37989 e il
piccolo bug https://github.com/qgis/QGIS/issues/37877 per il quale c'è
comunque già una soluzione non ancora introdotta nel codice
https://github.com/qgis/QGIS/issues/37877.

A presto.

Andrea Giudiceandrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Andrea Giudiceandrea wrote

piccolo bug https://github.com/qgis/QGIS/issues/37877 per il quale c'è
comunque già una soluzione non ancora introdotta nel codice

Anche per questo piccolo bug relativo al tool qgis_process è stata
introdotta nel codice la patch risolutiva
https://github.com/qgis/QGIS/pull/37883 ed è stato anche risolto un altro
bug per le versioni Windows 3.14 rel-dev (nightly builds)
https://github.com/qgis/QGIS/commit/b3147bc8b6a841d9a5e20fb43d41288e9b841ecf

Putroppo invece il bug "qgis_process: processing plugin not loaded / reduced
list of algorithms on freshly installed systems and headless servers"
https://github.com/qgis/QGIS/issues/37989 sembra non essere stato ancora
preso in considerazione per una eventuale risoluzione.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Andrea Giudiceandrea wrote

Putroppo invece il bug "qgis_process: processing plugin not loaded /
reduced
list of algorithms on freshly installed systems and headless servers"
https://github.com/qgis/QGIS/issues/37989 sembra non essere stato ancora
preso in considerazione per una eventuale risoluzione.

Sono trascorsi un paio di mesi, ma anche questo bug è stato risolto:
https://github.com/qgis/QGIS/pull/39324/commits/9c9b27d1d75d0a05f8c96dc203fe50c94ac3d255

Con la stessa Pull Request https://github.com/qgis/QGIS/pull/39324, Nyall
Dawson ha anche aggiunto una nuova opzione "--json" per qgis_process e, con
un'altra PR https://github.com/qgis/QGIS/pull/39349, Matthias Kuhn sta
aggiungendo una nuova modalità per specificare i parametri da passare
all'algoritmo da eseguire.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html