[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 :slight_smile:

Saluti,

Andrea.

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? :slight_smile:

Date: Tue, 15 Nov 2011 19:25:50 +0100
From: aperi2007@gmail.com
To: gfoss@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 :slight_smile:

Saluti,

Andrea.


Iscriviti all’associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@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

On Wed, 16 Nov 2011 16:08:37 +0100, Alessandro Gentili wrote

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

visto che non raccontavo balle ?
imparare Spatial SQL sicuramente richiede un pizzico
di sforzo: ma ti consente di fare cose favolose che
con i normali strumenti desktop/GUI spesso te le sogni :smiley:

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? :slight_smile:

puoi usare SQL anche per fare calcoli più o meno sofisticati,
come in questo esempio di pura fantasia:

SELECT ((Sin(col_1) * Log(col_2)) / 3.14) AS risultato
FROM mia_tavola
WHERE (col_3 + col_4) > 100 AND col_5 < 0;

ovviamente la clausola WHERE deve rispecchiare appunto
quello che tu definisci "a seconda dei casi"

ciao Sandro

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 :slight_smile:

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? :slight_smile:

> Date: Tue, 15 Nov 2011 19:25:50 +0100
> From: aperi2007@gmail.com
> To: gfoss@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 :slight_smile:
>
>
> Saluti,
>
> Andrea.
> _______________________________________________
> Iscriviti all'associazione GFOSS.it:
http://www.gfoss.it/drupal/iscrizione
> Gfoss@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@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

Bene.
Per piacere, quando hai risolto rendi disponibile un howto, eventualmente tramite il wiki di gfoss.it, in modo che altri possano imparare dalla tua esperienza.
Saluti.

···
-- 
Paolo Cavallini
See: [http://www.faunalia.it/pc](http://www.faunalia.it/pc)

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 :slight_smile:

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? :slight_smile:
>
> > Date: Tue, 15 Nov 2011 19:25:50 +0100
> > From: aperi2007@gmail.com
> > To: gfoss@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 :slight_smile:
> >
> >
> > Saluti,
> >
> > Andrea.
> > _______________________________________________
> > Iscriviti all'associazione GFOSS.it:
> http://www.gfoss.it/drupal/iscrizione
> > Gfoss@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@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@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

Il 16 novembre 2011 19:48, Luca Sigfrido Percich <sigfrido@tiscali.it>
ha scritto:

Scusate ancora!

di che!!??
tutti possono sbagliare, se poi riescono anche a correggersi che si vuole di più

grazie mille!

Sig

--
ciao
Luca

http://gis.cri.fmach.it/delucchi/
www.lucadelu.org