Re: [Gfoss] Punti random nel poligono soluzione SpatiaLite Help
Ottima spiegazione Alessandro. Il mar 21 mag 2019, 18:49 ha scritto: > On Wed, 15 May 2019 12:16:48 -0700 (MST), pigreco wrote: > > C'è qualche suggerimento didattico su come risolvere tutto in una > > logica SQL > > (in sqlite) o la strada preferenziale è fare dialogare spatialite con > > Python > > (o altro) e qualche while loop? > > > > chiaramente la strada piu' liscia, semplice e veloce e' quella di > scrivere > un banale programmicchio in C, C++, Java, Python o qualsiasi altro > linguaggio > di programmazione che supporti i loops. > > SQL e' un linguaggio meraviglioso, ma e' comunque un linguaggio basato > sul > paradigma dichiarativo; tutti gli altri (C, Java etc) sono invece > linguaggi > basati sul paradigma imperativo. > nei linguaggi dichiarativi va specificato quale risultato finale si > intende > ottenere, dopo di che ci pensera' il linguaggio stesso ad identificare > in > modo ottimale tutte le azioni necessarie per arrivare a quel risultato. > tutto l'opposto avviene nei linguaggi imperativi, in cui e' il > programmatore > a dovere specificare minuziosamente tutte le azioni necessarie per > arrivare > al risultato finale. > > non e' che un paradigma sia superiore all'altro; sono profondamente > diversi, > e ciascuno di essi e' piu' adatto ad alcuni problemi piuttosto che ad > altri. > e' un po' come avere a disposizione un coltello da cucina ed un'ascia; > se devi > affettare del pane l'ascia sara' decisamente poco pratica, esattamente > come > il coltello da cucina si rivelera' inadeguato per abbattere una > quercia. > > venendo allo specifico del tuo problema, lo possiamo sintetizzare in > questo pseudo-algoritmo: > > 0. inizializzazione: definisci il poligoo ed azzeri il contatore > 1. se il contatore ha raggiunto il valore massimo vai al punto 4) > altrimenti procedi al punto successivo. > 2. calcola un punto random all'interno del BBOX del poligono > 3. verifica se il punto cade realmente all'interno della superficie > del poligono > 3-A) si: inseriscilo nella tavola, incrementa il contatore e torna > al punto 1) > 3-B) no: torna al punto 1) senza incrementare il contatore > 4. fine > > questo e' un classico loop, e tutti i linguaggi di programmazione > imperativi sono fatti apposta per rendere semplice l'esecuzione > dei loops. > SQL invece segue tutt'altra logica, ed offre solo la WITH RECURSIVE > per mettere in piedi (in modo abbastanza macchinoso e contorto) > qualcosa che assomiglia ad un loop. > conclusione: quando usare un loop e' assolutamente critico (come > nel tuo caso, visto che non puoi sapere in anticipo se/quanti > punti random cadranno effettivamente dentro al poligono) > pretendere di usare solo SQL puro non e' la scelta ottimale. > e' un po' come cercare di affettare pane e salame con l'ascia; > se usi invece il coltello da cucina fatichi molto meno. > > ciao Sandro > ___ > Gfoss@lists.gfoss.it > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss > Questa e' una lista di discussione pubblica aperta a tutti. > I messaggi di questa lista non hanno relazione diretta con le posizioni > dell'Associazione GFOSS.it. > 796 iscritti al 28/12/2017 ___ Gfoss@lists.gfoss.it http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
Re: [Gfoss] Punti random nel poligono soluzione SpatiaLite Help
Grazie mille per la risposta. Se riesco condividerò lo script. T. - https://pigrecoinfinito.wordpress.com/ -- Sent from: http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ ___ Gfoss@lists.gfoss.it http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
Re: [Gfoss] Punti random nel poligono soluzione SpatiaLite Help
On Wed, 15 May 2019 12:16:48 -0700 (MST), pigreco wrote: C'è qualche suggerimento didattico su come risolvere tutto in una logica SQL (in sqlite) o la strada preferenziale è fare dialogare spatialite con Python (o altro) e qualche while loop? chiaramente la strada piu' liscia, semplice e veloce e' quella di scrivere un banale programmicchio in C, C++, Java, Python o qualsiasi altro linguaggio di programmazione che supporti i loops. SQL e' un linguaggio meraviglioso, ma e' comunque un linguaggio basato sul paradigma dichiarativo; tutti gli altri (C, Java etc) sono invece linguaggi basati sul paradigma imperativo. nei linguaggi dichiarativi va specificato quale risultato finale si intende ottenere, dopo di che ci pensera' il linguaggio stesso ad identificare in modo ottimale tutte le azioni necessarie per arrivare a quel risultato. tutto l'opposto avviene nei linguaggi imperativi, in cui e' il programmatore a dovere specificare minuziosamente tutte le azioni necessarie per arrivare al risultato finale. non e' che un paradigma sia superiore all'altro; sono profondamente diversi, e ciascuno di essi e' piu' adatto ad alcuni problemi piuttosto che ad altri. e' un po' come avere a disposizione un coltello da cucina ed un'ascia; se devi affettare del pane l'ascia sara' decisamente poco pratica, esattamente come il coltello da cucina si rivelera' inadeguato per abbattere una quercia. venendo allo specifico del tuo problema, lo possiamo sintetizzare in questo pseudo-algoritmo: 0. inizializzazione: definisci il poligoo ed azzeri il contatore 1. se il contatore ha raggiunto il valore massimo vai al punto 4) altrimenti procedi al punto successivo. 2. calcola un punto random all'interno del BBOX del poligono 3. verifica se il punto cade realmente all'interno della superficie del poligono 3-A) si: inseriscilo nella tavola, incrementa il contatore e torna al punto 1) 3-B) no: torna al punto 1) senza incrementare il contatore 4. fine questo e' un classico loop, e tutti i linguaggi di programmazione imperativi sono fatti apposta per rendere semplice l'esecuzione dei loops. SQL invece segue tutt'altra logica, ed offre solo la WITH RECURSIVE per mettere in piedi (in modo abbastanza macchinoso e contorto) qualcosa che assomiglia ad un loop. conclusione: quando usare un loop e' assolutamente critico (come nel tuo caso, visto che non puoi sapere in anticipo se/quanti punti random cadranno effettivamente dentro al poligono) pretendere di usare solo SQL puro non e' la scelta ottimale. e' un po' come cercare di affettare pane e salame con l'ascia; se usi invece il coltello da cucina fatichi molto meno. ciao Sandro ___ Gfoss@lists.gfoss.it http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017