[Gfoss] Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich sigfrido a tiscali.it
Mer 16 Nov 2011 19:48:33 CET


Scusate, tornando a casa mi è suonato un campanello e infatti devo
correggermi:

Il giorno mer, 16/11/2011 alle 16.46 +0100, Luca Sigfrido Percich ha
scritto:

Ho dimenticato l'espressione di confronto (dopo case):

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

che diventa 

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

e va bene se voglio restituire l'espressione corrispondente alla prima condizione che risulti vera;

Nel caso più tipico in cui se condizione_sum è vera restituisco la somma, ALTRIMENTI la differenza, userò invece

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

("else" o "when false" in questo caso fa lo stesso)

CASE si può anche nidificare, ovviamente la scelta del costrutto dipende dal caso specifico.

Scusate ancora!

Sig


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