[QGIS-it-user] recuperare uno shapefile poligonale corrotto

Ciao Andrea e grazie per l’aiuto.

In allegato lo shape “problematico”.

Effettivamente nella mia richiesta di aiuto non mi sono dilungato in dettagli, ma ho citato soltanto il fatto che sono riuscito a risolvere qualcosa, apparentemente, solo con v.clean, mentre non ho detto che dagli altri tool non ho ricavato un granché di utile.

Più precisamente:

  • il plugin core “Geometry Checker”, già installato di default ma da abilitare: si avvia dal menu Vector->Check Geometries…

Ecco il resoconto della correzione di circa 1030 errori (in gran parte tipi di geometria e, meno, errori di sovrapposizione) rilevati dal controllo appena effettuato con il tool: 795 errori riparati e 1746 (!!) nuovi errori trovati… In pratica, più tenti di correggerli, più gli errori aumentano: effettivamente il plugin non pare funzionare come dovrebbe. ([1] - verificato_poligoni2021ecc. )

  • il plugin core “Topology Checker”, già installato di default ma da abilitare: si avvia dal menu Vector->Topology Checker

E’, appunto, il tool che uso per la validazione topologica cui faccio riferimento nella mia richiesta.

  • il tool di processing “Check Validity”

…ovvero “Controlla validità” di processing, che fino a quando ho inviato la mia richiesta non aveva mai rilevato errori, restituendo solo poligoni validi.

Devo però dire che poco fa, dopo aver utilizzato Geometry Checker, ho sottoposto al controllo di validità il gpkg derivato ed ho ottenuto, per la prima volta, i tre layer temporanei che la procedura produce, popolati ([1] - risultato valido, risultato non valido, risultato errato).

Sono sempre più confuso…

Grazie ancora.

Alessio

[1] https://drive.google.com/drive/folders/1yIXKG2zEi3whAujz1YGun4g-g0nFxmlS?usp=sharing

···

Il 08/04/2021 11:05, Andrea Giudiceandrea ha scritto:

Ciao Alessio,
ho iniziato a fare qualche verifica. Magari poi si potrebbero estrapolare solo 3 o 4 dei poligoni con cui si riscontrano i problemi e condividerli con gli iscritti alla mailing list in modo che tu possa avere eventualmente più suggerimenti e soluzioni.

Nel frattempo, potresti chiarirmi quali tool stai usando? Non sono un esperto di validazione topologica/geometrica in QGIS, ma per quanto ne sappia ci sono almeno tre tool di QGIS (senza considerare quelli di GRASS e SAGA comunque disponibili in QGIS) di questo tipo:

  • il plugin core “Geometry Checker”, già installato di default ma da abilitare: si avvia dal menu Vector->Check Geometries…

  • il tool di processing “Check Validity”

A quale di questi tool stai facendo riferimento?

Per quanto ne sappia, teoricamente solo il primo tool (il plugin “Geometry Checker”) dovrebbe avere la funzionalità di risolvere i problemi di sovrapposizione di poligoni, mentre il secondo può solo verificarli e il terzo non può effettuare tale verifica.

Tuttavia tale plugin sembra avere svariati bug (almeno nelle versioni pià recenti di QGIS) e, fra le altre cose, sembra che la correzione delle sovrapposizioni (e dei gap) non funzioni correttamente. Ne ho infatti segnalati altri due di cui mi sono accorto proprio ieri mentre facevo qualche prova con il tuo file.
Puoi farti un’idea dei vari bug segnalati per questo plugin all’URL https://github.com/qgis/QGIS/issues?q=is%3Aissue+is%3Aopen+%22Geometry+Checker%22

A presto.

Andrea


Alessio Degioannini wrote

- il plugin core "Geometry Checker"

In pratica, più tenti di correggerli, più gli
errori aumentano: effettivamente il plugin non pare funzionare come
dovrebbe.

Ciao Alessio,
come ti accennavo il plugin "Geometry Checker" purtroppo attualmente
presenta vari bug relativi alle funzionalità di soluzioni dei problemi
geometrici/topologici soprattutto per quanto riguarda le sovrapposizioni e i
gap, come puoi notare anche leggendo le varie segnalazioni di bug in
proposito. In particolare, come ti dicevo, le sovrapposizioni non vengono
corrette. https://github.com/qgis/QGIS/issues/29556

Inoltre, per esempio, la tabella riassuntiva degli errori "corretti" e dei
nuovi errori trovati è spesso totalmente errata.
https://github.com/qgis/QGIS/issues/34664

Non noto problemi invece per le funzionalità di controllo dei problemi
geometrici/topologici.

Ho verificato lo shapefile poligoni.shp che mi hai inviato con 756 feature.
Tutti e tre i tool in QGIS non riportano alcun errore nelle geometrie. Ho
effettuato la verifica anche con ArcMap 9.3.1 e anch'esso non riporta alcun
errore geometrico.

Non ho effettuato verifiche né tramite gli appositi tool dei geo database
PostGIS/PostgreSQL e Spatialite/SQLite, né tramite quelli eventualmente
esistenti in GRASS o SAGA.

Comunque, per riparare errori delle geometrie, il tool di processing QGIS
"Fix geometries" funziona abbastanza bene ed è progettato per usare lo
stesso algoritmo di soluzione degli errori geometrici usato da PostGIS.

Per quanto riguarda invece la presenza di gap o overlaps, effettivamente lo
shapefile ne contiene svariati (circa un migliaio tra gaps e overlaps
secondo Topology Checker, circa 500 secondo Geometry Checker con tolleranza
impostata di default a 1E-8), ma, da quello che ho potuto verificare
controllando il valore delle coordinate memorizzato nello shapefile, quasi
tutti sono dovuti al fatto che vari vertici di poligoni adiacenti
differiscono di pochissimo fra loro.

Per farti un esempio, due punti corrispondenti di due poligoni adiacenti
presentano lo stesso identico valore della coordinata Y mentre i valori
della coordinata X sono:
1: 409478,23033759469...
2: 409478,23033759475,
e quindi differiscono di circa 0,00000000006 metri = 0,06 nanometri, che è
circa l'ordine di grandezza delle dimensioni degli atomi.

Non so come sono state create queste piccolissime discrepanze, ma in
generale tali livelli di precisione delle coordinate in ambito GIS è
solitamente eccessivo e inutile.

Solitamente è meglio fare in modo che le coordinate dei vertici delle
geometrie siano memorizzate con una precisione accettabile, per esempio
0,001 metri o 0,005 metri, di fatto facendo in modo che ogni vertice possa
ricadere solo nei nodi di una griglia di 0,001 x 0,001 metri o 0,005 x 0,005
metri.

Per fare questo puoi usare il tool di processing QGIS "Snap points to grid"
impostando per esempio il valore di 0,005 per X e 0,005 per Y.

Se effettui a questo punto i controlli di validità, vedrai che il layer
risultante non avrà errori di geometria, come il layer di partenza, ma
verranno riscontrati solo 72 gaps e 0 overlaps sia dal Topology Checker che
dal Geometry Checker (lasciando a 0 il valore di soglia per l'area di gaps e
overlaps).

Dalla tabella dei risultati del controllo effettuato da Geometry Checker,
ordinando l'elenco degli errori per la colonna Value vedrai che ci sono solo
due gaps con superficie inferiore a 0,01 metri quadrati mentre gli altri 70
hanno superfici superiori a 8 metri quadrati.

Questo significa che solo i primi due gaps con superficie inferiore a 0,01
metri quadrati potrebbero essere effettivi gaps da correggere manualmente,
mentre gli altri 70 in realtà corrispondono a "buchi" interni ai poligoni.

Infatti solitamente si fissa una valore di area di soglia piccola (a seconda
dei propri dati) ma maggiore di 0 per l'individuazione dei gaps. Fissandola
per esempio a 1 metro quadrato, Geometry Checker elencherà solo due gaps.

Per correggere questi unici due gaps, basta editare il layer e rimuovere in
entrambi i casi il vertice in più.

Per imporre uno "snapping" fisso su griglia anche durante la digitazione o
modifica di geometrie, puoi impostare per ogni layer la precisione scelta
per la memorizzazione delle coordinate con l'opzione "Geometry precision"
nella tab Digitizing delle proprietà del layer. Nella stessa finestra di
impostazioni possono essere impostate altre verifiche geometriche e
topologiche che vengono effettuate automaticamente prima del salvataggio del
layer.

Non riscontrato crash, né "propagazione degli errori" facendo delle prove di
editazione del layer: forse sei stato fuorviato dalla errata tabella
riassuntiva degli errori "corretti" e dei nuovi errori trovati del Geometry
Checker.

Spero di esserti stato utile e spero magari che qualche altro utente più
esperto di PostGIS e Spatialite o GRASS e SAGA possa proporre altre
soluzioni.

Comunque penso che lo snapping alla griglia sia già una soluzione abbastanza
veloce e sicura.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

grazie andrea per la tua dettagliata spiegazione.
ricordo una discussione di qualche anno fa sulla lista GFOSS proprio su questi problemi legati alle coordinate, a cura di sandro furieri.
quello che spesso succede è che passando da una struttura fisica ad un’altra o da un software ad un altro, si creiino degli errori dovuti all’approssimazione delle coordinate.
se no ricordo male, ad esempio, arcgis aggancia alla sua griglia interna e compie già un arrotondamento interno, così un dataset esportato da arcgis a postgres o viceversa può dare adito a queste incongruenza.

s.

Il giorno ven 9 apr 2021 alle ore 11:23 Andrea Giudiceandrea <andreaerdna@libero.it> ha scritto:

Alessio Degioannini wrote

  • il plugin core “Geometry Checker”
    In pratica, più tenti di correggerli, più gli
    errori aumentano: effettivamente il plugin non pare funzionare come
    dovrebbe.

Ciao Alessio,
come ti accennavo il plugin “Geometry Checker” purtroppo attualmente
presenta vari bug relativi alle funzionalità di soluzioni dei problemi
geometrici/topologici soprattutto per quanto riguarda le sovrapposizioni e i
gap, come puoi notare anche leggendo le varie segnalazioni di bug in
proposito. In particolare, come ti dicevo, le sovrapposizioni non vengono
corrette. https://github.com/qgis/QGIS/issues/29556

Inoltre, per esempio, la tabella riassuntiva degli errori “corretti” e dei
nuovi errori trovati è spesso totalmente errata.
https://github.com/qgis/QGIS/issues/34664

Non noto problemi invece per le funzionalità di controllo dei problemi
geometrici/topologici.

Ho verificato lo shapefile poligoni.shp che mi hai inviato con 756 feature.
Tutti e tre i tool in QGIS non riportano alcun errore nelle geometrie. Ho
effettuato la verifica anche con ArcMap 9.3.1 e anch’esso non riporta alcun
errore geometrico.

Non ho effettuato verifiche né tramite gli appositi tool dei geo database
PostGIS/PostgreSQL e Spatialite/SQLite, né tramite quelli eventualmente
esistenti in GRASS o SAGA.

Comunque, per riparare errori delle geometrie, il tool di processing QGIS
“Fix geometries” funziona abbastanza bene ed è progettato per usare lo
stesso algoritmo di soluzione degli errori geometrici usato da PostGIS.

Per quanto riguarda invece la presenza di gap o overlaps, effettivamente lo
shapefile ne contiene svariati (circa un migliaio tra gaps e overlaps
secondo Topology Checker, circa 500 secondo Geometry Checker con tolleranza
impostata di default a 1E-8), ma, da quello che ho potuto verificare
controllando il valore delle coordinate memorizzato nello shapefile, quasi
tutti sono dovuti al fatto che vari vertici di poligoni adiacenti
differiscono di pochissimo fra loro.

Per farti un esempio, due punti corrispondenti di due poligoni adiacenti
presentano lo stesso identico valore della coordinata Y mentre i valori
della coordinata X sono:
1: 409478,23033759469…
2: 409478,23033759475,
e quindi differiscono di circa 0,00000000006 metri = 0,06 nanometri, che è
circa l’ordine di grandezza delle dimensioni degli atomi.

Non so come sono state create queste piccolissime discrepanze, ma in
generale tali livelli di precisione delle coordinate in ambito GIS è
solitamente eccessivo e inutile.

Solitamente è meglio fare in modo che le coordinate dei vertici delle
geometrie siano memorizzate con una precisione accettabile, per esempio
0,001 metri o 0,005 metri, di fatto facendo in modo che ogni vertice possa
ricadere solo nei nodi di una griglia di 0,001 x 0,001 metri o 0,005 x 0,005
metri.

Per fare questo puoi usare il tool di processing QGIS “Snap points to grid”
impostando per esempio il valore di 0,005 per X e 0,005 per Y.

Se effettui a questo punto i controlli di validità, vedrai che il layer
risultante non avrà errori di geometria, come il layer di partenza, ma
verranno riscontrati solo 72 gaps e 0 overlaps sia dal Topology Checker che
dal Geometry Checker (lasciando a 0 il valore di soglia per l’area di gaps e
overlaps).

Dalla tabella dei risultati del controllo effettuato da Geometry Checker,
ordinando l’elenco degli errori per la colonna Value vedrai che ci sono solo
due gaps con superficie inferiore a 0,01 metri quadrati mentre gli altri 70
hanno superfici superiori a 8 metri quadrati.

Questo significa che solo i primi due gaps con superficie inferiore a 0,01
metri quadrati potrebbero essere effettivi gaps da correggere manualmente,
mentre gli altri 70 in realtà corrispondono a “buchi” interni ai poligoni.

Infatti solitamente si fissa una valore di area di soglia piccola (a seconda
dei propri dati) ma maggiore di 0 per l’individuazione dei gaps. Fissandola
per esempio a 1 metro quadrato, Geometry Checker elencherà solo due gaps.

Per correggere questi unici due gaps, basta editare il layer e rimuovere in
entrambi i casi il vertice in più.

Per imporre uno “snapping” fisso su griglia anche durante la digitazione o
modifica di geometrie, puoi impostare per ogni layer la precisione scelta
per la memorizzazione delle coordinate con l’opzione “Geometry precision”
nella tab Digitizing delle proprietà del layer. Nella stessa finestra di
impostazioni possono essere impostate altre verifiche geometriche e
topologiche che vengono effettuate automaticamente prima del salvataggio del
layer.

Non riscontrato crash, né “propagazione degli errori” facendo delle prove di
editazione del layer: forse sei stato fuorviato dalla errata tabella
riassuntiva degli errori “corretti” e dei nuovi errori trovati del Geometry
Checker.

Spero di esserti stato utile e spero magari che qualche altro utente più
esperto di PostGIS e Spatialite o GRASS e SAGA possa proporre altre
soluzioni.

Comunque penso che lo snapping alla griglia sia già una soluzione abbastanza
veloce e sicura.

A presto.

Andrea


Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao Andrea,

tutto molto chiaro ed esauriente!

Procedo come mi hai spiegato.

Grazie e cordiali saluti.

Alessio

Il 09/04/2021 11:23, Andrea Giudiceandrea ha scritto:

Alessio Degioannini wrote

- il plugin core "Geometry Checker"

In pratica, più tenti di correggerli, più gli
errori aumentano: effettivamente il plugin non pare funzionare come
dovrebbe.

Ciao Alessio,
come ti accennavo il plugin "Geometry Checker" purtroppo attualmente
presenta vari bug relativi alle funzionalità di soluzioni dei problemi
geometrici/topologici soprattutto per quanto riguarda le sovrapposizioni e i
gap, come puoi notare anche leggendo le varie segnalazioni di bug in
proposito. In particolare, come ti dicevo, le sovrapposizioni non vengono
corrette. https://github.com/qgis/QGIS/issues/29556

Inoltre, per esempio, la tabella riassuntiva degli errori "corretti" e dei
nuovi errori trovati è spesso totalmente errata.
https://github.com/qgis/QGIS/issues/34664

Non noto problemi invece per le funzionalità di controllo dei problemi
geometrici/topologici.

Ho verificato lo shapefile poligoni.shp che mi hai inviato con 756 feature.
Tutti e tre i tool in QGIS non riportano alcun errore nelle geometrie. Ho
effettuato la verifica anche con ArcMap 9.3.1 e anch'esso non riporta alcun
errore geometrico.

Non ho effettuato verifiche né tramite gli appositi tool dei geo database
PostGIS/PostgreSQL e Spatialite/SQLite, né tramite quelli eventualmente
esistenti in GRASS o SAGA.

Comunque, per riparare errori delle geometrie, il tool di processing QGIS
"Fix geometries" funziona abbastanza bene ed è progettato per usare lo
stesso algoritmo di soluzione degli errori geometrici usato da PostGIS.

Per quanto riguarda invece la presenza di gap o overlaps, effettivamente lo
shapefile ne contiene svariati (circa un migliaio tra gaps e overlaps
secondo Topology Checker, circa 500 secondo Geometry Checker con tolleranza
impostata di default a 1E-8), ma, da quello che ho potuto verificare
controllando il valore delle coordinate memorizzato nello shapefile, quasi
tutti sono dovuti al fatto che vari vertici di poligoni adiacenti
differiscono di pochissimo fra loro.

Per farti un esempio, due punti corrispondenti di due poligoni adiacenti
presentano lo stesso identico valore della coordinata Y mentre i valori
della coordinata X sono:
1: 409478,23033759469...
2: 409478,23033759475,
e quindi differiscono di circa 0,00000000006 metri = 0,06 nanometri, che è
circa l'ordine di grandezza delle dimensioni degli atomi.

Non so come sono state create queste piccolissime discrepanze, ma in
generale tali livelli di precisione delle coordinate in ambito GIS è
solitamente eccessivo e inutile.

Solitamente è meglio fare in modo che le coordinate dei vertici delle
geometrie siano memorizzate con una precisione accettabile, per esempio
0,001 metri o 0,005 metri, di fatto facendo in modo che ogni vertice possa
ricadere solo nei nodi di una griglia di 0,001 x 0,001 metri o 0,005 x 0,005
metri.

Per fare questo puoi usare il tool di processing QGIS "Snap points to grid"
impostando per esempio il valore di 0,005 per X e 0,005 per Y.

Se effettui a questo punto i controlli di validità, vedrai che il layer
risultante non avrà errori di geometria, come il layer di partenza, ma
verranno riscontrati solo 72 gaps e 0 overlaps sia dal Topology Checker che
dal Geometry Checker (lasciando a 0 il valore di soglia per l'area di gaps e
overlaps).

Dalla tabella dei risultati del controllo effettuato da Geometry Checker,
ordinando l'elenco degli errori per la colonna Value vedrai che ci sono solo
due gaps con superficie inferiore a 0,01 metri quadrati mentre gli altri 70
hanno superfici superiori a 8 metri quadrati.

Questo significa che solo i primi due gaps con superficie inferiore a 0,01
metri quadrati potrebbero essere effettivi gaps da correggere manualmente,
mentre gli altri 70 in realtà corrispondono a "buchi" interni ai poligoni.

Infatti solitamente si fissa una valore di area di soglia piccola (a seconda
dei propri dati) ma maggiore di 0 per l'individuazione dei gaps. Fissandola
per esempio a 1 metro quadrato, Geometry Checker elencherà solo due gaps.

Per correggere questi unici due gaps, basta editare il layer e rimuovere in
entrambi i casi il vertice in più.

Per imporre uno "snapping" fisso su griglia anche durante la digitazione o
modifica di geometrie, puoi impostare per ogni layer la precisione scelta
per la memorizzazione delle coordinate con l'opzione "Geometry precision"
nella tab Digitizing delle proprietà del layer. Nella stessa finestra di
impostazioni possono essere impostate altre verifiche geometriche e
topologiche che vengono effettuate automaticamente prima del salvataggio del
layer.

Non riscontrato crash, né "propagazione degli errori" facendo delle prove di
editazione del layer: forse sei stato fuorviato dalla errata tabella
riassuntiva degli errori "corretti" e dei nuovi errori trovati del Geometry
Checker.

Spero di esserti stato utile e spero magari che qualche altro utente più
esperto di PostGIS e Spatialite o GRASS e SAGA possa proporre altre
soluzioni.

Comunque penso che lo snapping alla griglia sia già una soluzione abbastanza
veloce e sicura.

A presto.

Andrea

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html
_______________________________________________
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user