Buongiorno, confermo tutto. Ho fatto i test consigliati e ho usato il gpkg condiviso.
Aggiungo altre osservazioni: 1. dove è scritto nella documentazione che overlay_nearest() utilizzato con lo stesso layer ha quel comportamento? (ovvero salta i casi banali); 2. come mai l'opzione limit:=-1 non ha effetto se il layer è lo stesso? grazie per la segnalazione saluti Il giorno gio 3 feb 2022 alle ore 20:23 Andrea Giudiceandrea < [email protected]> ha scritto: > Salve a tutti, > rispondendo ad un quesito di un utente della mailing list qgis-user > qualche giorno fa, mi sono accorto che si riscontrano dei bug usando la > funzione overlay_nearest sullo stesso layer. > > La funzione, usata su uno stesso layer, per esempio, di punti, dovrebbe > trovare, per ogni punto del layer, il punto più vicino appartenente allo > stesso layer. > Chiaramente il punto più vicino appartenente allo stesso layer è il punto > stesso, ma il codice è fatto in modo che in questo caso venga escluso il > punto stesso (che sarebbe un risultato banale) e si cerchi il secondo punto > più vicino nello stesso layer. > > overlay_nearest funziona effettivamente così per layer in formato, per > esempio, Memory, GeoPackage o Spatialite. > > Invece, per layer, per esempio, in formato Shapefile, GeoJSON o > FlatGeobuf, io riscontro che la funzione restituisce sempre il punto stesso > invece che il secondo punto più vicino. > > Per fare una semplice verifica: > > - crea un nuovo Memory layer di tipo geometrico Point in un progetto vuoto > - aggiungi un singolo punto al layer, salva la modifica e chiudi > l'editazione > - usa l'espressione overlay_nearest(@layer,$geometry) nel calcolatore di > campi per tale layer: l'anteprima mostra il valore [] (cioè, correttamente, > un array vuoto) > > - esporta il Memory layer in un layer in formato Shapefile e aggiungi tale > layer Shapefile al progetto > - usa la stessa espressione nel calcolatore di campi per tale layer > Shapefile: l'anteprima mostra il valore [ <geometry: Point> ] (cioè > l'espressione restituisce erroneamente lo stesso unico punto presente nel > layer) > > - esporta il Memory layer in un layer in formato GeoPackage o Spatialite e > aggiungi tale layer al progetto > - usa la stessa espressione nel calcolatore di campi per tale layer > GeoPackage o Spatialite: l'anteprima mostra il valore [] (cioè, > correttamente, un array vuoto) > > > Inoltre, sempre applicando la funzione sullo stesso layer, anche con layer > in formato Memory, GeoPackage o Spatialite, riscontro un altro bug. > > Creando un nuovo layer di tipo geometrico Point in formato Memory, > GeoPackage o Spatialite e inserendo un certo numero di punti, tutto > funziona come dovrebbe e l'espressione overlay_nearest(@layer,$geometry) > restituisce correttamente il secondo punto più vicino. > > Se però elimino uno dei punti dal layer, allora, per tutti i punti a > partire da quello successivo a quello eliminato, la funzione restituisce > erroneamente il punto stesso invece che il secondo punto più vicino. > > Mi sembra strano che nessun altro se ne sia ancora accorto (non ho trovato > bug report a riguardo e la funzione esiste ormai da più di un paio di anni) > e quindi sono un po' in dubbio sulla reale esistenza di questi due bug... > > Per verificare questo bug, metto a disposizione un piccolo file GeoPackage > https://drive.google.com/file/d/195J1kph3v8q_Db2TVDXm-RMYpkaI2ES5 > > Il layer contiene sette punti, con un campo ID testuale progressivo da 1 a > 7. > > Creando un campo virtuale testuale (ID_near) con il calcolatore di campi e > l'espressione overlay_nearest(@layer, ID)[0] si dovrebbero ottenere i > seguenti valori: > > ID ID_near > 1 3 > 2 5 > 3 7 > 4 2 > 5 2 > 6 3 > 7 3 > > > Se però, per esempio, elimino il punto con ID 4, la tabella diventa > erroneamente: > > ID ID_near > 1 3 > 2 5 > 3 7 > 5 5 > 6 6 > 7 7 > cioè i valori del campo virtuale per i punti con ID da 1 a 3 sono > corretti, mentre per i punti con ID da 5 a 7 sono errati (riportano lo > stesso ID del punto). > > > Riscontro il problema con QGIS 3.16.0 (prima versione in cui è presente > overlay_nearest), 3.16.16 e 3.22.3. > > > Spero qualcuno possa smentirmi... ma le conferme sono apprezzate > ugualmente :-) > > A presto. > > Andrea > _______________________________________________ > QGIS-it-user mailing list > [email protected] > https://lists.osgeo.org/mailman/listinfo/qgis-it-user > -- *Ing. Salvatore Fiandaca* *mobile*.:+39 327.493.8955 *m*: *[email protected] <[email protected]>* *C.F*.: FNDSVT71E29Z103G *P.IVA*: 06597870820 *membro QGIS Italia - http://qgis.it/ <http://qgis.it/>* *socio GFOSS.it - *http://gfoss.it/ *blog:* * https://pigrecoinfinito.com/ <https://pigrecoinfinito.com/> FB: Co-admin - https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>** <https://www.facebook.com/qgis.it/> * *TW: <http://goog_95411464>**https://twitter.com/totofiandaca <https://twitter.com/totofiandaca>* 43°51'0.54"N 10°34'27.62"E - EPSG:4326 “Se la conoscenza deve essere aperta a tutti, perchè mai limitarne l’accesso?” R. Stallman Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E' vietata qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso.
_______________________________________________ QGIS-it-user mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/qgis-it-user
