[Gfoss] Confronto calcolo di aree tra QGIS e POSTGIS con TRIGGER

Massimiliano Moraca info a massimilianomoraca.it
Ven 27 Dic 2019 15:48:39 CET


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*


Maggiori informazioni sulla lista Gfoss