Ottima spiegazione Alessandro. Il mar 21 mag 2019, 18:49 <a.furi...@lqt.it> 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