Nel mese di agosto ho (abbiamo: OpenDataSicilia) iniziato due bei progetti, entrambi solo per la gloria, e in uno di questi abbiamo dovuto superare un grosso problema relativo all’algoritmo UNIONE presente in QGIS a partire da QGIS 3.2 Bonn.
Il problema è un caso limite e molto complesso, ovvero è l’output di API Here per la determinazione di isocrone, ecco un esempio di output:
Prima: dell’avvio dell’algoritmo UNIONE
DOPO: avvio dell’algoritmo UNIONE si manifestavano errori (nel log) e perdita di dati (come indica la freccia rossa).
Abbiamo aperto tre issue nel repo di QGIS, solo in questa ci ha risposto l’autore dell’algoritmo, ecco la sua risposta:
If there is a topology exception emitted from GEOS, that means some XY coordinate values are very very close to each other. Because of that, some math operations give wrong results.
The proper solution to this problem is to run “Snap geometries to layer” processing algorithm in “Snap to anchor nodes (single layer only)” mode with a small tolerance (note it is in map units!). Afterwards run “Fix geometries” algorithm to make sure that if snapping produced invalid geometries, they will get fixed.
A good question is whether QGIS should try harder to help users in these scenarios:
- maybe add some explanation what went wrong and how to fix the input data
- maybe try to automatically run the algorithms to fix the input data (but that seems like too much magic to me)
Autore: Martin Dobias
Tradotto in QGIS tramite modellatore Grafico:

di seguito i vari algoritmi:



NOTE FINALI: Il problema nasce quando l’algoritmo deve fare delle differenze tra poligoni e se la differenza fosse piccolissima, la libreria che si occupa di tutto cio’ (GEOS), manifesta un errore:
GEOS geoprocessing error: difference failed.
TopologyException: found non-noded intersection between LINESTRING (2.36891e+06 4.22927e+06, 2.36892e+06 4.22927e+06) and LINESTRING (2.36892e+06 4.22928e+06, 2.3689e+06 4.22926e+06) at 2368909.6404680978 4229266.2896102117
la soluzione descritta sopra intende evitare il problema correggendo lo strato di input con uno snap, cosi facendo si evitano differenza piccolissime tra poligoni vicini.
L’issue è ancora aperta, ma questa procedura sembra limitare i danni e consente di poter lavorare anche con strati particolarmente complessi.
Ottimo come sempre!
Ho un dubbio: il proces Snap Geometry to Layer”.. come funziona?
Grazie!
"Mi piace"Piace a 1 persona
Ciao Luca,
fissato la tolleranza, lo snap aggancia i nodi ai poligoni vicini.
"Mi piace"Piace a 1 persona
Grazie mille!! Molto interessante come sempre, ma non mi è chiaro cosa deve unire il processo di unione visto che si tratta di un singolo strato.
"Mi piace"Piace a 1 persona
Ciao, immagina di avere molti poligoni sovrapposti nello stesso layer, questo algoritmo li unisce evitando le sovrapposizioni.
Ho messo un link che spiega graficamente l’output dell’unione.
link:
https://www.qgis.org/en/site/forusers/visualchangelog32/#feature-union-algorithm-with-a-single-layer
"Mi piace"Piace a 1 persona
grande salvatore!
"Mi piace"Piace a 1 persona
Ciao Alberto, 🙂
"Mi piace""Mi piace"