Intersezione Spaziale MOLTO Pesante

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
19 messages Options
Reply | Threaded
Open this post in threaded view
|

Intersezione Spaziale MOLTO Pesante

Alessandro Gentili
Salve a tutti.

Come ho descritto nell'oggetto ho un problema con l'intersect di una grossa mole di dati con un altro layer vettoriale. Cerco di spiegare.

Ho da correggere dei dati proveniente da un rilievo batometrico (multibeam e singlebeam) con un grigliato che ho generato con dei valori di correzioni rispetto all'escursione della marea.
Il processo attualmente consiste nel:
  • Prendere lo shp del rilievo fare l'intersect con il grigliato per assegnare il valore di correzione
  • Fare il field calculator in un nuovo campo calcolando il nuovo punto batimetrico
Purtroppo la dimensione del rilievo è decisamente grande (45mb) con qualcosa come 1.600.000 record che durante i due punti sopra descritti il tempo che passa si conta in ore e non in minuti.


Volevo sapere se c'era qualche soluzione alternativa che possa permettermi di fare queste operazioni (una spaziale, una di DB) in maniera relativamente veloce.
Gia cominciare a parlare di "minuti di elaborazione" sarebbe un grosso progresso.


N.B. Ho la possibilità di usare anche ArcGis ma voglio evitare di farlo finchè posso


Grazie a tutti in anticipo

Alessandro Gentili

email: [hidden email]

Facebook Twitter LinkedIn

_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

a.furieri
On Tue, 15 Nov 2011 15:29:54 +0100, Alessandro Gentili wrote
> Purtroppo la dimensione del rilievo è decisamente grande (45mb)
> con qualcosa come 1.600.000 record che durante i due punti sopra
> descritti il tempo che passa si conta in ore e non in minuti.
>

perchè non usi uno Spatial DBMS ? p.es. PostGis o SpatiaLite
per uno Spatial DBMS 45 MB di dati, 1.600.000 righe, sono
decisamente "numeri piccoli e ragionevoli".

> Volevo sapere se c'era qualche soluzione alternativa che
> possa permettermi di fare queste operazioni (una spaziale,
> una di DB) in maniera relativamente veloce.
>

appunto: se usi uno Spatial DBMS ti rimane esclusivamente
una banale serie di operazioni SQL: la parte "spaziale"
sparisce magicamente imboscata dentro a SQL
non hai affatto bisogno di fare "due" cose; ne basta
semplicemente una sola.

> Gia cominciare a parlare di "minuti di elaborazione"
> sarebbe un grosso progresso.
>

direi a naso che usando saggiamente gli spatial index
probabilmente forse potresti addirittura aspirare a
parlare di "decine di secondi".
sicuramente non oltre i pochi minuti anche nel caso
peggiore, considerate le dimensioni del tuo problema.

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Alessandro Gentili
Si.. ho sia Postgis che Spatialite ma, come dire, ci sto entrando per mia volontà e soprattutto perchè so che è possibile farlo in Opensource e lo voglio fare in quella maniera.
Unico problema è che la mia conoscenza di SQL è un pò limitata sia perchè non ci lavoro molto spesso, sia perchè è da poco che lavoro in ambiente e materia Gis.

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')

Solo mi rendo anche io conto per quel poco che conosco che non è corretta ma non so come correggerla purtroppo.
Sto cercando di trovare la soluzione nel mezzo ad altre cose quindi la ricerca della soluzione è lenta.

Vorrei sapere se c'è qualche guida/sito su internet in grado di aiutarmi a migliorare
Qualche consiglio?


> From: [hidden email]

> To: [hidden email]; [hidden email]
> Subject: Re: [Gfoss] Intersezione Spaziale MOLTO Pesante
> Date: Tue, 15 Nov 2011 15:57:03 +0100
>
> On Tue, 15 Nov 2011 15:29:54 +0100, Alessandro Gentili wrote
> > Purtroppo la dimensione del rilievo è decisamente grande (45mb)
> > con qualcosa come 1.600.000 record che durante i due punti sopra
> > descritti il tempo che passa si conta in ore e non in minuti.
> >
>
> perchè non usi uno Spatial DBMS ? p.es. PostGis o SpatiaLite
> per uno Spatial DBMS 45 MB di dati, 1.600.000 righe, sono
> decisamente "numeri piccoli e ragionevoli".
>
> > Volevo sapere se c'era qualche soluzione alternativa che
> > possa permettermi di fare queste operazioni (una spaziale,
> > una di DB) in maniera relativamente veloce.
> >
>
> appunto: se usi uno Spatial DBMS ti rimane esclusivamente
> una banale serie di operazioni SQL: la parte "spaziale"
> sparisce magicamente imboscata dentro a SQL
> non hai affatto bisogno di fare "due" cose; ne basta
> semplicemente una sola.
>
> > Gia cominciare a parlare di "minuti di elaborazione"
> > sarebbe un grosso progresso.
> >
>
> direi a naso che usando saggiamente gli spatial index
> probabilmente forse potresti addirittura aspirare a
> parlare di "decine di secondi".
> sicuramente non oltre i pochi minuti anche nel caso
> peggiore, considerate le dimensioni del tuo problema.
>
> ciao Sandro

_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

a.furieri
On Tue, 15 Nov 2011 16:51:28 +0100, Alessandro Gentili wrote
> 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')
>

a) manca una tavola: casomai dovrebbe essere:
SELECT *
FROM vector1, vector2
WHERE ST_Intersections(vector1.the_geom,vector2.the_geom)

b) gli apici (') identificano le costanti testo: se scrivi
   'vector1.the_geom', non puo' capire che intendi riferirti
   alla colonna "the_geom" della tavola "vector1", ma
   capisce invece che gli stati passando un testo.
   casomai il mascheramento dei nomi SQL richiede doppi
   apici ("): "vector1"."the_geom"
   n.b.: il punto *non* deve essere mascherato tra apici,
   perchè non è un nome SQL, ma è un delimiter strutturale.


> Vorrei sapere se c'è qualche guida/sito su internet in grado
> di aiutarmi a migliorare
> Qualche consiglio?
>  

non posso che consigliarti di partire dal
cookbook di spatialite (in buona misura vale anche
per PostGIS, visto entrambi sono OGC-SFS) :-D
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=misc-docs

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich
Ciao,

Il giorno mar, 15/11/2011 alle 17.36 +0100, [hidden email] ha scritto:

> SELECT *
> FROM vector1, vector2
> WHERE ST_Intersections(vector1.the_geom,vector2.the_geom)

acc, per un attimo ho sperato che ST_intersections fosse una new entry
nella santa barbara del già ottimo spatialite, invece temo sia un
refuso :)

ST_intersects(geom1, geom2) restituisce true se due geometrie si
intersecano e in genere si usa nelle condizioni di JOIN, mentre
ST_intersection(geom1, geom2) restituisce la porzione comune ai due
oggetti:

SELECT v1.fid, v2.fid, ST_intersection(v1.the_geom, v2.the_geom)
FROM vector1 as v1, vector2 as v2
WHERE ST_Intersects(v1.the_geom,v2.the_geom)

Così ad esempio ottieni un layer con geometrie derivate dall'intersezione di quelle dei due layer originali.

Rileggendo la query mi chiedo perché a nessuno viene mai in mente di chiamare il FID "the_fid", o il nome "the_name" :)

Sig


_____________
PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Sandro Santilli
In reply to this post by a.furieri
On Tue, Nov 15, 2011 at 05:36:29PM +0100, [hidden email] wrote:

> On Tue, 15 Nov 2011 16:51:28 +0100, Alessandro Gentili wrote
> > 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')
> >
>
> a) manca una tavola: casomai dovrebbe essere:
> SELECT *
> FROM vector1, vector2
> WHERE ST_Intersections(vector1.the_geom,vector2.the_geom)

"ST_Intersections" non esiste.
"ST_Intersection" restituisce la geometria dell'intersezione
"ST_Intersects" e' un predicato

La costruttiva e' piu' lenta (e meno robusta) del predicato.
Eviterei di controllare ogni coppia due volte: A && B + B && A.

--strk;

  ()   Free GIS & Flash consultant/developer
  /\   http://strk.keybit.net/services.html
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Sandro Santilli
In reply to this post by Luca Sigfrido Percich
On Tue, Nov 15, 2011 at 06:08:05PM +0100, Luca Sigfrido Percich wrote:

> Rileggendo la query mi chiedo perché a nessuno viene mai in mente di chiamare il FID "the_fid", o il nome "the_name" :)

Nel 2.0 di postgis il loader cambia default da "the_geom" a "geom".
Spero sia cosa gradita :)

--strk;

  ()   Free GIS & Flash consultant/developer
  /\   http://strk.keybit.net/services.html
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich

Graditissima!. Io però avrei scelto un più accattivante e giovanile
"my_geom". :)

Con ogr2ogr ormai l'opzione geometry_name=geom la considero parte
integrante del comando. Magari hanno cambiato il default pure in GDAL e
non me ne sono accorto. :)

Sig

Il giorno mar, 15/11/2011 alle 18.10 +0100, Sandro Santilli ha scritto:

> On Tue, Nov 15, 2011 at 06:08:05PM +0100, Luca Sigfrido Percich wrote:
>
> > Rileggendo la query mi chiedo perché a nessuno viene mai in mente di chiamare il FID "the_fid", o il nome "the_name" :)
>
> Nel 2.0 di postgis il loader cambia default da "the_geom" a "geom".
> Spero sia cosa gradita :)
>
> --strk;
>
>   ()   Free GIS & Flash consultant/developer
>   /\   http://strk.keybit.net/services.html


_____________
PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

a.furieri
In reply to this post by Luca Sigfrido Percich
On Tue, 15 Nov 2011 18:08:05 +0100, Luca Sigfrido Percich wrote

> Il giorno mar, 15/11/2011 alle 17.36 +0100, [hidden email] ha scritto:
>
> > SELECT *
> > FROM vector1, vector2
> > WHERE ST_Intersections(vector1.the_geom,vector2.the_geom)
>
> acc, per un attimo ho sperato che ST_intersections fosse una new
> entry nella santa barbara del già ottimo spatialite, invece temo
> sia un refuso :)
>

sorry, ho fatto un copia/incolla al volo
concentrandomi sulle "farfaline" più vistose,
e così ci sono cascato anch'io :-D

serva sempre di lezione: RTFM, plz
(prima di scrivere bischerate a ruora libera)
vale anche per i developers ;-)

scusate se alla fine ho contribuito
involontariamente ad aumentare la confusione

ciao Sandro
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Andrea Peri
In reply to this post by Alessandro Gentili
 >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
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Alessandro Gentili
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: [hidden email]
> To: [hidden email]
> 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
> [hidden email]
> 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
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

a.furieri
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 :-D
 
> 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? :)
>

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
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich
In reply to this post by Alessandro Gentili
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: [hidden email]
> > To: [hidden email]
> > 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
> > [hidden email]
> > 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
> [hidden email]
> 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
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

pcav
In reply to this post by Alessandro Gentili
Il 16/11/2011 16:08, 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

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

_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Luca Sigfrido Percich
In reply to this post by Luca Sigfrido Percich

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: [hidden email]
> > > To: [hidden email]
> > > 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
> > > [hidden email]
> > > 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
> > [hidden email]
> > 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
> [hidden email]
> 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
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Luca Delucchi
Il 16 novembre 2011 19:48, Luca Sigfrido Percich <[hidden email]>
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
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Andrea Peri
In reply to this post by Alessandro Gentili
 >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!!

Non vorrei fare il guastafeste,
ma hai controllato i risultati ?

Non si sa' mai, i tempi bassi potrebbero anche essere dovuti alla
mancata gestione di determinate combinazioni di dati.

Quando si effettua le intersezioni, possono succedere cose di questo genere.
Sono dovute al fatto che il DB confronta effettua confronti per singolo
record.
Come pure puo' succedere che la medesima geometria ti rientri piu' volte.

Insomma una occhiatina ai risultati e' sempre bene darla, specie quando
si è agli inizi.
Per cui ti consiglio di controllarli e verificare che non manchino
geometrie e non ci siano elementi ripetuti piu' volte.

Andrea.
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Alessandro Gentili
Certamente.. il controllo l'ho fatto a campione su molti record anche
con un altro shape con la solita operazione già fatta e correttamente.
Un altro controllo può essere quello del numero di record che in
entrambi i casi era identico

Grazie mille a tutti per l'aiuto ed alla prossima domanda perchè ne ho
parecchie :)
Alessandro

PS: ho creato nel wiki Gfoss la procedura che mi ha portato al
risultato.

Nella citazione in data dom 20 nov 2011 11:16:59 CET, aperi2007 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!!
>
> Non vorrei fare il guastafeste,
> ma hai controllato i risultati ?
>
> Non si sa' mai, i tempi bassi potrebbero anche essere dovuti alla
> mancata gestione di determinate combinazioni di dati.
>
> Quando si effettua le intersezioni, possono succedere cose di questo
> genere.
> Sono dovute al fatto che il DB confronta effettua confronti per
> singolo record.
> Come pure puo' succedere che la medesima geometria ti rientri piu' volte.
>
> Insomma una occhiatina ai risultati e' sempre bene darla, specie
> quando si è agli inizi.
> Per cui ti consiglio di controllarli e verificare che non manchino
> geometrie e non ci siano elementi ripetuti piu' volte.
>
> Andrea.
> _______________________________________________
> Iscriviti all'associazione GFOSS.it:
> http://www.gfoss.it/drupal/iscrizione
> [hidden email]
> 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
[hidden email]
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
Reply | Threaded
Open this post in threaded view
|

Re: Intersezione Spaziale MOLTO Pesante

Sandro Santilli
On Sun, Nov 20, 2011 at 11:28:38AM +0100, Alessandro Gentili wrote:

> PS: ho creato nel wiki Gfoss la procedura che mi ha portato al
> risultato.

Grande Alessandro, grazie ! :)

--strk;

  ()   Free GIS & Flash consultant/developer
  /\   http://strk.keybit.net/services.html
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
[hidden email]
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