Buongiorno,
quando creo delle view in Postgres, da caricare in QGis come delle normali geometrie, devo sempre creare una unique key e ho sempre risolto (visto che di solito ho sempre una sola geometria di riferimento), facendo (a.gid) as gid o min(a.gid) as gid.
Non ho mai fatto fino ad ora però l'operazione di union (a quanto pare non ST_Union) tra due geometrie, dove ognuna delle 2 geometrie viene tagliata dall'altra, nel caso si sovrappone in modo diverso. Così dopo aver scoperto che avrei dovuto fare una serie di ST_Union, ST_Intersects, ST_Overlaps... e JOIN, con un risultato preciso e decisamente veloce nell'esecuzione, rimane il fatto che non ho una sola geometria da prendere il GID!!!
Ho trovato che è possibile fare una funzione, ma probabilmente non ho capito come funziona e quindi speravo si potesse inserire nella stringa sql una cosa di questo genere:
SELECT gid integer NOT NULL DEFAULT nextval('pg_catastali_wgs_gid_seq'::regclass), ...
Soluzioni a riguardo?
grazie.
allego la query solo per capire di cosa sto parlando:
$strsql2a="
SELECT scen2c, txtmemo,ST_Union(the_geom)
FROM
(
SELECT p.gid as gid, scen2c, txtmemo,
ST_Intersection(b.the_geom, p.the_geom) As the_geom
FROM pg_destinazioni b INNER JOIN pg_catastali p
ON ST_Intersects(b.the_geom, p.the_geom)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
) as foo
WHERE gid = $q2A
GROUP BY scen2c, txtmemo, gid
ORDER BY txtmemo
";