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

Andrea Giudiceandrea andreaerdna a libero.it
Ven 9 Apr 2021 02:23:23 PDT


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


Maggiori informazioni sulla lista QGIS-it-user