Salve a tutti e buon Natale passato.
Sto sperimentando i TRIGGER usando PostGIS ed ho creato un semplice vettore
poligonale in cui è presente una colonna area che deve riempirsi
automaticamente dopo la creazione del poligono. L'area deve essere in
ettari.
Ho quindi creato il mio vettore:
CREATE TABLE buffer
(
id INTEGER PRIMARY KEY,
area_ha DECIMAL
);
SELECT AddGeometryColumn(
'buffer',
'geom',
3857,
'POLYGON',
2
);
Ed i TRIGGER associati:
CREATE FUNCTION areabuffer_trigger_function() RETURNS trigger AS $$
BEGIN
NEW.area_ha = ST_AREA(NEW.geom)/10000;
RETURN NEW;
END;
$$ language plpgsql;CREATE TRIGGER areabuffer_trigger
BEFORE INSERT OR UPDATE
ON buffer
FOR EACH ROW
EXECUTE PROCEDURE areabuffer_trigger_function();
Creando il poligono o i poligoni in QGIS e salvando l'editing, il campo
*area_ha* viene effettivamente riempito con un valore. Come test ho creato
un field virtuale nel calcolatore di campi usando la funzione `*$area/10000*`
ma noto che i valori di area calcolati in QGIS sono diversi da quelli che
calcola PostGIS usando il TRIGGER.
Ad esempo il poligono 1 ha un valore di area da TRIGGER pari a 36,6917
mentre il corrispettivo da QGIS è 20,9879.
Come mai?
*ing.Massimiliano Moraca*
*Analisi, progettazione e sviluppo di soluzioni GIS e WebGIS*
*P.IVA*: 08700081212
*CELL*: 333 59 49 583 (*lun - ven 9.00 - 18.00*)
*WEB*: www.massimilianomoraca.it
* Attività svolta ai sensi della Legge 4 del 14 gennaio 2013, art.1*