ciao,
cosa intendi per “database sqlite”? geopackage o spatialite?
ci sono due modi per risolvere la tua esigenza:
1
creare una vista geometrica in questo modo (esempio geopackage)
devi innanzitutto abilitare le funzioni spaziali (solo se lavori fuori da QGIS):
SELECT load_extension(‘mod_spatialite.so’);
SELECT EnableGpkgAmphibiousMode();
create view [vista_geometrica] as
select , st_length([geom]) as lunghezza, st_length([geom]) as costo
from [tabella_geometrica]
dove:
[vista_geometrica] è il nome in output che tu vuoi dare
[tabella_geometrica] è il tuo layer di linee
[geom] è il nome del tuo campo geometria (linee)
è il tuo valore fisso (può anche essere un campo numerico)
una volta creata questa vista la devi catalogare nel geopackage (metodo manuale):
insert into gpkg_geometry_columns (table_name,column_name,geometry_type_name,srs_id,z,m) values (
‘[vista_geometrica]’,
‘[geom]’,
(select geometry_type_name from gpkg_geometry_columns where table_name=‘[tabella_geometrica]’),
(select srs_id from gpkg_contents where table_name=‘[tabella_geometrica]’),
0,0
);
insert into gpkg_extensions (table_name,column_name,extension_name,definition,scope) values (
‘[vista_geometrica]’,
(select column_name from gpkg_geometry_columns where table_name=‘[tabella_geometrica]’),
(select extension_name from gpkg_extensions where table_name=‘[tabella_geometrica]’),
(select definition from gpkg_extensions where table_name=‘[tabella_geometrica]’),
(select scope from gpkg_extensions where table_name=‘[tabella_geometrica]’)
);
insert into gpkg_ogr_contents (table_name,feature_count) values (
‘[vista_geometrica]’,
(select count(*) from [tabella_geometrica])
);
è un po rocambolesco ma funziona.
ovviamente poi l’editing continui a farlo sulla tua [tabella_geometrica] e nella [vista_geometrica] troverai i dati aggiornati.
come già qualcuno ha suggerito, con un trigger (anzi, due):
CREATE TRIGGER agg_lunghezza_after_insert_[tabella_geometrica]
AFTER INSERT ON [tabella_geometrica]
BEGIN
UPDATE [tabella_geometrica] set lunghezza=st_length(geom), costo = st_length(geom)* where gid=new.gid;
END;
CREATE TRIGGER agg_lunghezza_after_update_[tabella_geometrica]
AFTER UPDATE ON [tabella_geometrica]
BEGIN
UPDATE [tabella_geometrica] set lunghezza=st_length(geom), costo = st_length(geom)* where gid=new.gid;
END;
facci sapere.
saluti,
francesco
Il giorno mer 5 feb 2020 alle ore 07:19 FabioP <fabio.pifferini@masotti.ch> ha scritto:
Buongiorno,
lavoro con layer basati su un database sqlite, contenete informazioni
tipologiche e geometriche.
M’interesserebbe far si che alcuni campi (il cui valore è dipendente da
altri valori nella tabella) venissero aggiornati in automatico ogni volta
che si cambiano dei campi di riferimento.
Per esempio:
Ho i seguenti campi “Lunghezza” e “Costo”,
Il valore del campo “Costo” = “Lunghezza” x fattore fisso.
Vorrei che quando cambio il valore del campo “Lunghezza” su un determinato
vettore, il corrispondente valore del campo “Costo” venisse aggiornato.
Attendo volentieri qualche suggerimento, grazie mille.
F.