Spatial Intersect
Indice |
[modifica] Premessa
Questa guida ha lo scopo di descrivere come eseguire una Join Spaziale (Spatial Join) e calcolo di un nuovo campo (Field Calculator) con due diversi layer all'interno di un DB Postgis.
Questa operazione può essere eseguita anche con i normali e "Ready to use" strumenti di Qgis. Ma quando cominciamo a trattare con moli di dati relativamente grandi Qgis comincia ad accusare lentezza nei calcoli
Al fine di ovviare a questo problema e velocizzare il processo dovremo far ricorso all'uso di Postgis o qualsiasi altro DBMS.
[modifica] Analisi dei Dati
Dopo aver caricato all'interno del nostro DB Postgis le due tabelle con geometria secondo la procedura analizziamo i dati che abbiamo
Tabella_A con questo schema
|--zone--|--val--|--the_geom--|
ed una Tabella_B con questo schema
|--name--|--dim--|--the_geom--|
Da notare che entrambe le tabelle sono dotate di geometria propria e che tali geometrie sono sovrapposte tra loro
[modifica] Query
Il risultato che vogliamo ottenere sarà una nuova tabella con tutti i campi all'interno della Tabella_B ed in aggiunta il relativo campo "val" all'interno della Tabella_A a seconda della loro posizione. In più aggiungeremo un nuovo campo dove calcoleremo i nuovi valori derivanti da un'operazione matematica su due campi
Tradotto:
CREATE TABLE Tabella_C AS SELECT tableA.name, tableA.dim, tableB.val as val, tableA.the_geom FROM "Tabella_A" as tableA, "Tabella_B" as tableB WHERE ST_Intersects(tableA.the_geom,tableB.the_geom); ALTER TABLE Tabella_C ADD COLUMN dim_new; UPDATE Tabella_C SET dim_new = dim [operazione] val;
Ad ogni valore della Tabella_A è stato associato il corrispettivo valore (secondo la posizione) della Tabella_B e calcolato il nuovo valore attraverso un'operazione matematica popolando il nuovo campo dim_new