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

Massimiliano Moraca info a massimilianomoraca.it
Ven 27 Dic 2019 16:03:40 CET


Visto che era un test con un solo layer l'ho caricato direttamente in QGIS
e lui ha settato il SR del progetto in 3857. Comunque ho appena creato un
progetto di test presettando il SR in 3857 ed anche in questo caso il
calcolo dell'area è diverso dal risultato di PostGIS.

La versione di QGIS in uso è la 3.4 mentre PostgreSQL/PostGIS è in versione
12.1/3.0

*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*


Il giorno ven 27 dic 2019 alle ore 15:56 Umberto Minora <
umbertofilippo a tiscali.it> ha scritto:

> solo un'ipotesi, ma in QGIS il progetto è impostato sul sistema di
> riferimento del dato ovvero 3857?
>
> Il 27/dic/2019 15:48 Massimiliano Moraca <info a massimilianomoraca.it> ha
> scritto:
> >
> > 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*
> > _______________________________________________
> > Gfoss a lists.gfoss.it
> > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> > Questa e' una lista di discussione pubblica aperta a tutti.
> > I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> > 764 iscritti al 23/08/2019


Maggiori informazioni sulla lista Gfoss