[QGIS-it-user] calcolatore di campi_conteggio simboli (numeri/lettere) diversi

Ciao!

Ho bisogno di aiuto con il calcolatore di campi, per trovare la formula e il modulo da usare.

Situazione: sto analizzando il cambiamento dell’uso del suolo tra 1790 e il 2020

  1. ho stabilito sei momenti nel tempo: T1, T2, T3… T6
  2. per ogni momento ho quattro usi: spazio costruito, bosco ecc.
  3. ho codificato: 1= spazio costruito; 2= bosco ecc.
  4. ho fatto la intersezione tra gli strati e ho creato un attributo de tipo stringa (una colonna) che raccoglie tutti i cambiamenti, per ogni area. Per esempio: 111111 (rimasto per sempre spazio costruito); 211111 (T1=bosco; T2-T6=spazio costruito); 342211; 334441 ecc.

Ora il problema: come posso classificare in automatico i codici (tipo 133114 ecc.) per identificare il numero dei cambiamenti, cioè il numero di caratteri diversi? Per esempio, nella stringa 133114 ci sono “1” tre volte, “3” due volte, “4” una volta, dunque ci sono tre caratteri diversi. Nella stringa 222222 (sempre bosco) c’è un solo carattere (“2”) ecc.

E’ meglio riclassificare tutto e usare delle lettere (AAAAAA, ABBACD ecc.)? E poi?

Grazie mille,
Gabriela

Mi sono dimenticata di dire che lo stato e .shp.
Uso QGIS 3.14 Pi (tramite osgeo4w) sotto W10.

Grazie mille,
Gabriela

Il mercoledì 2 settembre 2020, 12:24:45 EEST, Gabriela Osaci-Costache gabrielacatalinaosaci@yahoo.it ha scritto:

Ciao!

Ho bisogno di aiuto con il calcolatore di campi, per trovare la formula e il modulo da usare.

Situazione: sto analizzando il cambiamento dell’uso del suolo tra 1790 e il 2020

  1. ho stabilito sei momenti nel tempo: T1, T2, T3… T6
  2. per ogni momento ho quattro usi: spazio costruito, bosco ecc.
  3. ho codificato: 1= spazio costruito; 2= bosco ecc.
  4. ho fatto la intersezione tra gli strati e ho creato un attributo de tipo stringa (una colonna) che raccoglie tutti i cambiamenti, per ogni area. Per esempio: 111111 (rimasto per sempre spazio costruito); 211111 (T1=bosco; T2-T6=spazio costruito); 342211; 334441 ecc.

Ora il problema: come posso classificare in automatico i codici (tipo 133114 ecc.) per identificare il numero dei cambiamenti, cioè il numero di caratteri diversi? Per esempio, nella stringa 133114 ci sono “1” tre volte, “3” due volte, “4” una volta, dunque ci sono tre caratteri diversi. Nella stringa 222222 (sempre bosco) c’è un solo carattere (“2”) ecc.

E’ meglio riclassificare tutto e usare delle lettere (AAAAAA, ABBACD ecc.)? E poi?

Grazie mille,
Gabriela

Gabriela Osaci-Costache wrote

Ora il problema: come posso classificare in automatico i codici (tipo
133114 ecc.) per identificare il numero dei cambiamenti, cioè il numero di
caratteri diversi? Per esempio, nella stringa 133114 ci sono "1" tre
volte, "3" due volte, "4" una volta, dunque ci sono tre caratteri
diversi. Nella stringa 222222 (sempre bosco) c'è un solo carattere ("2")
ecc.
E' meglio riclassificare tutto e usare delle lettere (AAAAAA, ABBACD
ecc.)? E poi?
Grazie mille,Gabriela
_______________________________________________
QGIS-it-user mailing list

QGIS-it-user@.osgeo

https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao Gabriela,
sperando di aver capito il quesito, la mia soluzione passa per l'uso degli
ARRAY

crea un nuovo campo e lo popoli con la seguente espressione:

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( 133114,'(.)','\\1,'),',$','')))) → 3

l'espressione calcola il numero di elementi distinti dopo aver trasformato
il valore del campo da stringa a array.

devi solo sostituire a 133114 il nome del campo che contiene i tuoi valori,
esempio se il tuo campo fosse:
pippo l'espresione diventerebbe:

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( "pippo",'(.)','\\1,'),',$',''))))

fammi sapere

saluti

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

Ciao, Totò!

Sei fenomenaleeeeee! Un vero guru di QGIS!

Ha funzionato! Grazie di cuore! EmojiEmojiEmoji

Saluti e grazie di nuovo,

Gabriela

Il mercoledì 2 settembre 2020, 13:55:29 EEST, Totò pigrecoinfinito@gmail.com ha scritto:

Gabriela Osaci-Costache wrote

Ora il problema: come posso classificare in automatico i codici (tipo
133114 ecc.) per identificare il numero dei cambiamenti, cioè il numero di
caratteri diversi? Per esempio, nella stringa 133114 ci sono “1” tre
volte, “3” due volte, “4” una volta, dunque ci sono tre caratteri
diversi. Nella stringa 222222 (sempre bosco) c’è un solo carattere (“2”)
ecc.
E’ meglio riclassificare tutto e usare delle lettere (AAAAAA, ABBACD
ecc.)? E poi?
Grazie mille,Gabriela


QGIS-it-user mailing list

QGIS-it-user@.osgeo

https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao Gabriela,
sperando di aver capito il quesito, la mia soluzione passa per l’uso degli
ARRAY

crea un nuovo campo e lo popoli con la seguente espressione:

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( 133114,‘(.)’,‘\1,’),‘,$’,‘’)))) → 3

l’espressione calcola il numero di elementi distinti dopo aver trasformato
il valore del campo da stringa a array.

devi solo sostituire a 133114 il nome del campo che contiene i tuoi valori,
esempio se il tuo campo fosse:
pippo l’espresione diventerebbe:

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( “pippo”,‘(.)’,‘\1,’),‘,$’,‘’))))

fammi sapere

saluti


https://pigrecoinfinito.wordpress.com/

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


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

Totò wrote

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( "pippo",'(.)','\\1,'),',$',''))))

Ciao Salvatore, bella soluzione!

Si può anche evitare il doppio regexp_replace in questa maniera:

array_length(
array_distinct(
string_to_array(
substr(regexp_replace( "pippo",'(.)',',\\1'),2))))

A presto.

Andrea

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

Grazie mille!

Funziona anche la seconda soluzione!

Credo che sia utile un esempio di questo tipo (con entrambe le soluzioni) nel manuale del calcolatore di campi per ignoranti come me.

Saluti e grazie di cuore,
Gabriela

Il mercoledì 2 settembre 2020, 14:44:21 EEST, Andrea Giudiceandrea andreaerdna@libero.it ha scritto:

Totò wrote

array_length(
array_distinct(
string_to_array(
regexp_replace(regexp_replace( “pippo”,‘(.)’,‘\1,’),‘,$’,‘’))))

Ciao Salvatore, bella soluzione!

Si può anche evitare il doppio regexp_replace in questa maniera:

array_length(
array_distinct(
string_to_array(
substr(regexp_replace( “pippo”,‘(.)’,‘,\1’),2))))

A presto.

Andrea


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


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

Gabriela Osaci-Costache wrote

Credo che sia utile un esempio di questo tipo (con entrambe le soluzioni)
nel manuale del calcolatore di campi per ignoranti come me.
Saluti e grazie di cuore,Gabriela

Ciao Gabriela, ecco esaudito anche questo desiderio, qui l'esempio [0]

Grazie mille Andrea, al tua soluzione è molto più elegante! :slight_smile:

[0]
http://hfcqgis.opendatasicilia.it/it/latest/esempi/conteggio_caratteri_diversi.html

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

Grazie di cuore, Totò!

Saluti e grazie ancora,
Gabriela

Il mercoledì 2 settembre 2020, 16:23:25 EEST, Totò pigrecoinfinito@gmail.com ha scritto:

Gabriela Osaci-Costache wrote

Credo che sia utile un esempio di questo tipo (con entrambe le soluzioni)
nel manuale del calcolatore di campi per ignoranti come me.
Saluti e grazie di cuore,Gabriela

Ciao Gabriela, ecco esaudito anche questo desiderio, qui l’esempio [0]

Grazie mille Andrea, al tua soluzione è molto più elegante! :slight_smile:

[0]
http://hfcqgis.opendatasicilia.it/it/latest/esempi/conteggio_caratteri_diversi.html


https://pigrecoinfinito.wordpress.com/


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


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

Andrea Giudiceandrea wrote

array_length(
array_distinct(
string_to_array(
substr(regexp_replace( "pippo",'(.)',',\\1'),2))))

ciao,
si puo' evitare anche l'uso della funzione substr:

array_length(
array_distinct(
string_to_array(
regexp_replace( "field",'(.)\\B','\\1,'))))

w regex

https://regex101.com/r/XkpsXl/1/

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