SPATIAL JOIN ONE TO MANY QGIS VS ARCGIS PRO

Per lavoro sto usando molto ArcGIS PRO 3.1 e colgo l’occasione per metterlo a confronto con QGIS 3.28 LTR Firenze sullo Spatial Join One To Many OTF (On The Fly), ovvero, come ‘acchiappare’ valori di un attributo tra due layer sovrapposti usando il Field Calc.

L’esempio chiarirà ulteriormente il quesito: immaginiamo, per semplicità, di aver caricato due layer (shapefile delle regioni ISTAT e lo shapefile delle province) sovrapposti e di voler popolare, nel layer regioni, un nuovo attributo, che chiamo lista_prov, con la lista delle province che ricadono dentro ogni regione. Quindi mi aspetto che nel rigo delle regioni Sicilia, nell’attributo lista_prov, ci sia l’elenco delle nove province: Palermo, Catania, Messina, Caltanissetta, Trapani, Siracusa, Ragusa, Enna, Agrigento.

In QGIS :

Per popolare il nuovo attributo lista_prov nella tabella attributi del layer regioni, utilizzo questa semplice espressione:

array_to_string(
   overlay_contains(
   layer:='ProvCM01012023_g_WGS84',
   expression:="DEN_UTS")
)

risultato:

In ArcGIS PRO:

Premessa: ho usato molto in passato ArcMap 9 (2008/2013) e per motivi di lavoro mi ritrovo ad usare, nel 2023, ArcGIS PRO 3.1, che è completamente differente rispetto il nonno ArcMap 9 o 10. Quindi posso dire che conosco poco questa nuova release.

Per risolvere il quesito ho fatto molte ricerche nel web, ho usato l’AI (intelligenza artificiale), ho cercato in StackExchange trovando poche indicazioni e quelle poche non funzionavano.

Il Field Calc di ArcGIS PRO può lavorare sia con Expression Type Python3 che Arcade, quest’ultima è stata esplicitamente introdotta per risolvere facilmente (così ho letto) quesiti come quello di questo post.

Ma non perdiamoci in troppe chiacchiere, l’espressione (forse meglio chiamarlo script) da scrivere nel field calc (dopo aver impostato Expression type in Arcade) è:

var intersectLayer = Contains(FeatureSetByName($datastore, "ProvCM01012023_g_WGS84"),$feature)
var lista= ""
for (var f in intersectLayer){
    lista= concatenate(lista,f.DEN_UTS,",")
}
return lista

dove:

  • FeatureSetByName($datastore, “ProvCM01012023_g_WGS84”) : serve a richiamare il layer sovrapposto; $datastore è il geoDB Home del file di progetto;
  • $feature : è la feature corrente del layer corrente (nel nostro caso le regioni);
  • occorre fare un ciclo FOR per concatenare i valori in lista;

Punti di forza del field calc di QGIS:

  1. unico linguaggio;
  2. help delle funzioni;
  3. anteprima dell’output dell’espressione;
  4. campo ricerca funzioni;
  5. posso salvare le mie espressioni personalizzate;
  6. posso aggiungere facilmente nuove funzioni personalizzate usando il linguaggio pyQGIS;
  7. LA MIA GUIDA #HfcQGIS.

NOTE FINALI: ci tengo a sottolineare che le espressioni di overlay_* (usate per risolvere il quesito) di QGIS sono state ideate da un italiano, Enrico Ferreguti (il più attivo sviluppatore di plugin italiano), prima in un plugin e successivamente portate nel core di QGIS.

Come è palesemente visibile, l’espressione di QGIS è mille volte più semplice ed intuitiva!!!

Lo spatial join OTF (al volo) lo ritengo molto utile in quanto:

  1. permette velocemente di ottenere risultati;;
  2. permette di scrivere l’output direttamente nella tabella attributi senza creare altri layer;
  3. permette di scegliere velocemente il predicato (contains, intersects, within ecc…);
  4. permette di manipolare la geometria (convertirla in centroid, buffer, ecc…)
  5. per chi fa analisi di dati spaziali è uno strumento indispensabile!!!!

RIFERIMENTI



I MIEI CANALI – ISCRIVITI


Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST/BLOG TI È STATO UTILE CONTRIBUISCI A MANTENERLO AGGIORNATO PAYPAL


2 pensieri su “SPATIAL JOIN ONE TO MANY QGIS VS ARCGIS PRO

Scrivi una risposta a Totò Cancella risposta

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.