[QGIS-it-user] Geometry generator espressione per richiamare tutte le geometrie di un layer esterno

Buonasera,
nel geometry generator, partendo dall’espressione

difference
($geometry,
geometry(get_feature(‘Prova’,‘OBJECTID’,9999)))

che agisce sulla sola feature con OBJECTID 9999 del layer Prova

è possibile agire contemporaneamente su tutte le geometrie del layer Prova (come se tutte le geometrie di quest’ultimo fossero dissolte)?

Ho tentato con aggregate, collect e altro, ma non riesco a definire una sintassi corretta.

Grazie in anticipo
Danilo

Il 18/10/2021 18:40, Danilo Procaccini ha scritto:

è possibile agire contemporaneamente su tutte le geometrie del layer Prova (come se tutte le geometrie di quest'ultimo fossero dissolte)?

Ho tentato con aggregate, collect e altro, ma non riesco a definire una sintassi corretta.

Ciao Danilo,
quale versione di QGIS stai utilizzando e quale sintassi hai utilizzato?
Hai consultato la guida utente per le funzioni [1]?

A presto.

Andrea Giudiceandrea

[1] https://docs.qgis.org/3.16/en/docs/user_manual/working_with_vector/functions_list.html

Versione: 3.14.1-Pi

SO Debian 10

Si, ho consultato la guida e a partire da

difference
($geometry,
geometry(get_feature(‘Prova’,‘OBJECTID’,9999)))

ho provato con aggregate collect

difference
($geometry,
aggregate(layer:=‘Prova’,aggregate:=‘collect’,expression:=‘OBJECTID’))

e anche con

difference
($geometry, geometry(

aggregate(layer:=‘Prova’,aggregate:=‘collect’,expression:=‘OBJECTID’)))

ma i risultati sono NULL e non visualizzo la differenza tra layer di partenza e layer Prova (cosa che ottengo nel caso della sola geometria con OBJECTID = 9999)

Il giorno mar 19 ott 2021 alle ore 08:40 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Il 18/10/2021 18:40, Danilo Procaccini ha scritto:

è possibile agire contemporaneamente su tutte le geometrie del layer
Prova (come se tutte le geometrie di quest’ultimo fossero dissolte)?

Ho tentato con aggregate, collect e altro, ma non riesco a definire una
sintassi corretta.

Ciao Danilo,
quale versione di QGIS stai utilizzando e quale sintassi hai utilizzato?
Hai consultato la guida utente per le funzioni [1]?

A presto.

Andrea Giudiceandrea

[1]
https://docs.qgis.org/3.16/en/docs/user_manual/working_with_vector/functions_list.html


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

Il 19/10/2021 08:57, Danilo Procaccini ha scritto:

ho provato con aggregate collect
difference
($geometry,
aggregate(layer:='Prova',aggregate:='collect',expression:='OBJECTID'))

Come primo consiglio, ti suggerisco di provare prima le singole parti dell'espressione per capire qual è l'errore.

In particolare, hai provato se la funzione aggregate, come da te scritta, abbia un risultato di tipo geometrico?

La funzione aggregate "aggrega" i valori presenti nel parametro expression. In particolare, se la modalità è 'collect', aggrega geometrie e quindi il parametro expression deve contenere delle geometrie da aggregare. Nella tua espressione, il parametro expression contiene invece una stringa.

Quindi, se vuoi aggregare tutte le geometrie del layer 'Prova', il parametro expression deve contenere il valore $geometry.

L'ultimo esempio della funzione aggregate nel manuale utente mostra proprio come si usa per la modalità 'collect'.

A presto.

Andrea

Grazie mille dei consigli e delle indicazioni Andrea,

sono riuscito a generare correttamente la geometria del “layer b” della differenza con

aggregate(layer:='Prova,aggregate:=‘collect’,expression:=$geometry)

L’ultimo esempio della funzione aggregate nel manuale utente mostra
proprio come si usa per la modalità ‘collect’.
Guardavo la guida della Finestra di dialogo delle espressioni che non riporta esempi relativi alla modalità ‘collect’.

Grazie ancora
Danilo

Il giorno mar 19 ott 2021 alle ore 09:22 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Il 19/10/2021 08:57, Danilo Procaccini ha scritto:

ho provato con aggregate collect
difference
($geometry,
aggregate(layer:=‘Prova’,aggregate:=‘collect’,expression:=‘OBJECTID’))

Come primo consiglio, ti suggerisco di provare prima le singole parti
dell’espressione per capire qual è l’errore.

In particolare, hai provato se la funzione aggregate, come da te
scritta, abbia un risultato di tipo geometrico?

La funzione aggregate “aggrega” i valori presenti nel parametro
expression. In particolare, se la modalità è ‘collect’, aggrega
geometrie e quindi il parametro expression deve contenere delle
geometrie da aggregare. Nella tua espressione, il parametro expression
contiene invece una stringa.

Quindi, se vuoi aggregare tutte le geometrie del layer ‘Prova’, il
parametro expression deve contenere il valore $geometry.

L’ultimo esempio della funzione aggregate nel manuale utente mostra
proprio come si usa per la modalità ‘collect’.

A presto.

Andrea


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

Il 19/10/2021 11:02, Danilo Procaccini ha scritto:

Guardavo la guida della Finestra di dialogo delle espressioni che non riporta esempi relativi alla modalità 'collect'.

Questo dipende dal fatto che stai usando una vecchia versione di QGIS.
In QGIS 3.16 sono stati aggiunti altri esempi, tra cui quello della modalità 'collect'.

A presto.

Andrea.