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:
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 ![]() _______________________________________________ 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 |
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 |
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 *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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
In reply to this post by Alessandro Gentili
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 |
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 |
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 |
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 |
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 |
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 |
Free forum by Nabble | Edit this page |