Ciao a tutti. Oggi vediamo come eseguire la semplificazione di linee in QGIS e i diversi algoritmi che QGIS ci offre a questo scopo.
1. Cosa vuol dire semplificare linee e perché è utile farlo
In QGIS è sempre possibile semplificare linee o contorni di poligoni riducendone il numero di vertici di cui sono composte. Può ad esempio capitare che per digitalizzare questi elementi sia stato inserito un numero di vertici “eccessivo” per gli scopi di rappresentazione ed analisi che ci si propone. Di conseguenza queste feature contengono un livello di dettaglio che risulta eccessivo e rende inutilmente pesante il vettore che si sta trattando.
In questi caso può, quindi, risultare utile diminuire il numero di punti che compongono le singole linee o i singoli contorni (nel caso in cui stiamo trattando dei poligoni), in modo da avere una geometria più leggera, nella visualizzazione e nel trattamento analitico.
Come molte delle operazioni spaziali, tuttavia, va fatta in maniera consapevole: non vogliamo certo perdere il livello di dettaglio, quando invece serve o non vogliamo eseguire una semplificazione in maniera sbagliata, giusto?
È interessante conoscere i metodi di semplificazione anche perché alcuni di questi vengono usati anche per l’ottimizzazione nell’estrazione di punti da point cloud.
2. La tolleranza nella semplificazione di linee
In QGIS, per semplificare una linea o un poligono, è presente il tool Semplifica presente nel gruppo Geometria vettore. Quando lo apriamo vediamo che oltre al file di input, cioè la linea da semplificare e al file di output, cioè la linea semplificata, bisogna settare due parametri.
Parliamo subito della tolleranza, ovvero la distanza entro la quale effettuare la semplificazione. In pratica, se la distanza fra due vertici presenti nella linea è inferiore al valore di tolleranza imposto nella tool, allora la linea verrà semplificata. In altre parole, i vertici intermedi nella distanza di tolleranza imposta vengono eliminati secondo uno dei tre metodi che vedremo in seguito.
Qui, di solito scatta la domanda da 100 punti: quale distanza di tolleranza bisogna usare? Potete già immaginare la risposta: non c’è una tolleranza univoca da inserire in questa tool. Può dipendere da diversi elementi, tra cui la scala in cui si sta lavorando, o la distribuzione stessa dei vertici all’interno della linea da semplificare.
Inoltre, in particolare quando si vogliono semplificare linee o aree molto grandi non è facile trovare un valore che ci soddisfi, soprattutto se la distribuzione dei vertici non è omogenea, perché potrebbero esserci delle parti di linea che richiederebbero valori diversi di tolleranza, magari in una sezione della linea servirebbe una tolleranza minore, in altre una tolleranza maggiore.
Noi, talvolta, per aiutarci nella valutazione del valore da assegnare alla tolleranza usiamo il procedimento che adesso vi spieghiamo, applicato sul layer di un pezzetto di reticolo fluviale, ma potreste applicarlo anche su delle curve di livello:
- Estrapoliamo i vertici delle feature lineari da semplificare attraverso la tool Estrai Vertici presente in Geometria Vettore.
- Splittiamo il vettore lineare lungo i vertici appena estratti con la tool Split Line at Points di SAGA, nel gruppo Features Lines.
- Calcoliamo la lunghezza di ciascun elemento splittato semplicemente con la funzione $lenght nel calcolatore di campi.
- Infine selezioniamo tutti i segmenti che hanno lunghezza superiore ad un valore piccolo, ad esempio 0.5 e, tramite il pannello statistiche andiamo a vedere qual è la dimensione media della lunghezza degli elementi, ma ricordatevi di mettere la spunta su Solo elementi selezionati.
In questo caso abbiamo una media di circa 17m Ecco, questo è un valore che può essere preso a riferimento come parametro di tolleranza. Poi si può procedere sperimentalmente, se si vuole una semplificazione maggiore, provando ad aumentare questo valore e valutando il risultato in base a ciò che si vuole fare con l’elemento semplificato.
3. I diversi algoritmi di semplificazione delle linee
Oltre alla tolleranza, nella tool semplificazione bisogna settare l’algoritmo di semplificazione.
Esistono tre algoritmi di semplificazione:
- Algoritmo di Douglas-Peucker.In realtà alcuni associano questo algoritmo anche a Ramer per via di un articolo uscito nel 1972, per cui in realtà l’algoritmo si chiamerebbe algoritmo di Ramer-Douglas-Peucker.Si tratta di un algoritmo, che, ai fini della semplificazione di una linea utilizza il concetto di similarità tra la curva originale e la curva semplificata in termini di distanza. L’algoritmo procede in questo modo: l’utente, cioè noi, stabilisce il valore di tolleranza in QGIS. Vengono semplificati iterativamente i punti presenti all’interno di questa distanza, calcolando di volta in volta anche il valore di distanza tra la curva originale e la curva di volta in volta semplificata. La linea semplificata finale è quella che minimizza questa distanza, cioè quella che approssima meglio la curva di partenza. Un aspetto importante dell’algoritmo di Douglas-Peucker è che non crea nuovi vertici, ma utilizza quelli esistenti della curva originale.
- Algoritmo di Visvalingam. Anche in questo caso, in realtà l’algoritmo appartiene anche a Whyatt e quindi il nome completo è algoritmo di Visvalingam–Whyatt. L’algoritmo semplifica i punti che reputa meno importanti, all’interno della distanza di tolleranza, tramite il calcolo dell’area ad essi sottesi. Minore è l’area formata con il punto insieme ai due vertici ad esso più prossimi, maggiore è la probabilità che esso venga eliminato nel processo di semplificazione.
- Il terzo metodo si chiama aggancia al reticolo. Su questo non abbiamo trovato molte informazioni né su articoli scientifici, presenti invece per i due metodi precedentemente illustrati, né informazioni sul web. Immaginiamo tuttavia che la semplificazione agganci il risultato alla linea originale semplicemente eliminando i punti intermedi all’interno della distanza di tolleranza. Ovviamente se voi ne sapete di più i vostri commenti e le vostre spiegazioni sono le benvenute.
Eseguiamo una semplificazione: usiamo come parametri di ingresso la distanza media trovata uguale a 17m e usiamo ad esempio, l’algoritmo di Doglas-Peucker.
Ecco qua: abbiamo ottenuto delle linee semplificate e alleggerite nel numero di vertici, che seguono discretamente bene le linee di partenza.
Tips and tricks
Articoli sull’argomento
Douglas, D. H., & Peucker, T. K. (1973). Algorithms for the reduction of the number of points required to represent a digitized line or its caricature. Cartographica: The International Journal for Geographic Information and Geovisualization, 10(2), 112–122. doi:10.3138/fm57–6770-u75u-7727. Accessibile all’indirizzo http://www2.ipcku.kansai-u.ac.jp/~yasumuro/M_InfoMedia/paper/Douglas73.pdf
Ramer, U. (1972). An iterative procedure for the polygonal approximation of plane curves. Computer Graphics and Image Processing, 1(3), 244–256. doi:10.1016/s0146–664x(72)80017–0. Accessibile all’indirizzo https://dokumen.tips/documents/an-iterative-procedure-for-the-polygonal-approximation-of-plane-curves.html?page=1
Visvalingam, M., & Whyatt, J. D. (2014) Line generalisation by repeated elimination of the smallest area. Cartographic Information Systems Research Group, University of Hull. Disponibile all’indirizzo https://hull-repository.worktribe.com/output/459275/line-generalisation-by-repeated-elimination-of-the-smallest-area .
Bene, questo post è finito. Se ti è piaciuto condividilo! Hai dubbi o suggerimenti? Lascia pure un commento.
Puoi vedere anche il nostro video su YouTube Semplificare linee in QGIS” e iscriverti al nostro canale.
Ciaooo