[Gfoss] Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich sigfrido a tiscali.it
Mer 16 Nov 2011 16:46:03 CET


Ciao Alessandro,

puoi effettuare un update condizionale in due modi:

1. Splittandolo:
update tabella set risultato = campo1 + campo2 where condizione_sum;
update tabella set risultato = campo1 - campo2 where condizione_sub;


2. Con l'operatore CASE:

update tabella set risultato = 
case 
when condizione_sum then campo1 + campo2
when condizione_sub then campo1 - campo2
else null 
end

Se condizione_sum e condizione_sub non sono mutuamente esclusive è opportuno aggiungere la clausola ELSE.

Se anziché salvare il risultato in una colonna vuoi semplicemente visualizzarlo:
select campo1, campo2,
case 
  when condizione_sum then campo1 + campo2
  when condizione_sub then campo1 - campo2
  else null 
end as risultato
from tabella;

Il manuale di postGIS riporta esempi d'uso di CASE - case use cases, se mi consentite :)

Sig

Il giorno mer, 16/11/2011 alle 16.08 +0100, Alessandro Gentili ha
scritto:
> Rieccomi qui..
> Dopo mezza giornata di "spippolamento", ricerche su internet e altri
> consigli sono arrivato a creare la tabella che volevo nella bellezza
> di pocomeno di un minuto!!
> Intanto vi ringrazio a tutti per il supporto e i consigli e poi vi
> chiederei un'ulteriore indizio.
> 
> Per la cronaca l'intersect l'ho fatto su Postgis con ottimi risultati
> testati
> La nuova tabella è composta da due colonne di valori numerici che
> vanno sommati o sottratti tra di loro a seconda dei casi.
> Operazione che son sicuro si può fare tramite postgis ma che purtroppo
> non riesco a trovare l'operatore adatto.
> 
> Qualche indizio? :)
> 
> > Date: Tue, 15 Nov 2011 19:25:50 +0100
> > From: aperi2007 a gmail.com
> > To: gfoss a lists.gfoss.it
> > Subject: Re: [Gfoss] Intersezione Spaziale MOLTO Pesante
> > 
> > >Vorrei sapere se c'è qualche guida/sito su internet in grado di 
> > >aiutarmi a migliorare
> > >Qualche consiglio?
> > 
> > La migliore guida che io conosco è il libro
> > "postgis_in_action"
> > 
> > Purtroppo non e' disponibile open su internet.
> > 
> > >Ho provato a scrivere questa queri in Postgis ma mi restituisce un 
> > >errore (vado a memoria su quanto ho scritto)
> > >
> > >SELECT *
> > >FROM vector1
> > >WHERE ST_Intersections('vector1.the_geom','vector2.the_geom')
> > 
> > 
> > Va un po' risistemata,
> > cosi' non va bene,
> > 
> > La condizione va dichiarata con
> > ST_Intersects(vector1.geom,vector2.geom)=true
> > 
> > ricordati di dichiarare degli indici spaziali sulle tabelle vector1
> e 
> > vector2 cosi e' piu' veloce.
> > 
> > Poi per estrarre il taglio sulle singole celle,
> > io userei qualcosa tipo questa:
> > 
> >
> ST_Multi(ST_CollectionExtract(ST_Force_Collection(ST_Intersection(a.geom,b.geom)),2)) 
> > 
> > 
> > La ST_Intersection(), in punti sfortunati puo' generare una
> collection. 
> > Non sempre succede, ma a volte si' e questo genera delle eccezioni
> che 
> > "complicano" la vita.
> > Non e' un errore, ma una "magia nera" insita nella matematica
> "finita" 
> > dei computers.
> > Fatto sta' che per compensarlo senza farsi troppi patemi una strada 
> > comoda e' quella sopra indicata.
> > 
> > Lo forzi a generare sempre una collection, poi estrai la componente 
> > lineare della collection e la forzi a essere Multi.
> > Questo ultimo è essenziale perche' a volte viene multi a volte no, e
> te 
> > devi sempre avere il medesimo tipo (multi appunto).
> > 
> > Alla fine di quella strana formula avrai buttato via tutti i valori 
> > spuri generati dalla aritmetica finita e rimarra solo in cuore
> della 
> > geometria. Quello buono.
> > 
> > Caso mai se hai tempo, prova a farlo anche sul tuo software
> commerciale
> > e confronta i risultati, il confronto potrebbe fornire
> > spunti interessanti :)
> > 
> > 
> > Saluti,
> > 
> > Andrea.
> > _______________________________________________
> > Iscriviti all'associazione GFOSS.it:
> http://www.gfoss.it/drupal/iscrizione
> > Gfoss a lists.gfoss.it
> > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> > Questa e' una lista di discussione pubblica aperta a tutti.
> > Non inviate messaggi commerciali.
> > I messaggi di questa lista non rispecchiano necessariamente
> > le posizioni dell'Associazione GFOSS.it.
> > 540 iscritti al 4.11.2011
> 
> _______________________________________________
> Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> Non inviate messaggi commerciali.
> I messaggi di questa lista non rispecchiano necessariamente
> le posizioni dell'Associazione GFOSS.it.
> 540 iscritti al 4.11.2011



Maggiori informazioni sulla lista Gfoss