[QGIS-it-user] Alcuni problemi con la funzione overlay_nearest usata sullo stesso layer

Totò Fiandaca pigrecoinfinito a gmail.com
Gio 3 Feb 2022 22:50:13 PST


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 <
andreaerdna a libero.it> 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
> QGIS-it-user a lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
>


-- 
*Ing. Salvatore Fiandaca*
*mobile*.:+39 327.493.8955
*m*: *pigrecoinfinito a gmail.com <pigrecoinfinito a gmail.com>*
*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.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.osgeo.org/pipermail/qgis-it-user/attachments/20220204/5b5bb9c5/attachment.html>


Maggiori informazioni sulla lista QGIS-it-user