Conversione da punti a linee

Originariamente presentato in Conversions from points to lines: which methods? (pubblicato 2010-11-12) e Conversione da punti a linee: come? (pubblicato 2010-11-09).

Finalità

Questo script Python converte uno shapefile puntuale in uno lineare con la maggiore equivalenza possibile. Una successione di punti viene convertita in una linea individuale basandosi su un identificatore numerico comune. Per ogni set di punti con un identificatore comune, l'algoritmo inizialmente rimuove i punti duplicati (con le stesse coordinate x-y) e crea poi una matrice delle distanze di ogni punto del set con ognuno dei rimanenti. L'algoritmo assume che gli estremi della linea da costruire siano rappresentati dalla coppia di punti con la massima distanza reciproca. Esso sceglie, in maniera arbitraria, il primo punto di questa coppia come punto iniziale della linea. A partire da questo, la linea è costruita dall'aggiunta successiva di ogni punto del set che ha la distanza minima col punto precedente.

Questo algoritmo è stato creato per convertire in lineari dati puntuali con duplicati e sequenze irregolari dei punti, tali che le usuali funzioni GIS producevano linee con andamenti erronei. Questa versione è ancora sperimentale e dovrebbe essere applicato solo a geometrie relativamente semplici e rettilinee. Anche se ha prodotto risultati corretti in alcuni casi pratici, non si può garantire per i casi più generali.

Implementazione

Languaggio: Python 2.6
Versione: 2010-11-08
Codice: pt2line_05.py

I moduli Python richiesti sono numpy e ogr. Lo script è stato creato e testato con Python(x,y), che incorpora già questi moduli. Un altro ambiente Python-GIS molto usato, FWTools, incorpora il modulo Numeric, predecessore di numpy. Questo script non dovrebbe quindi funzionare sulle versioni di FWTools senza numpy, a meno di non riscrivere le parti di codice che si basano su questo, adattandole per Numeric. L'uso in altre distribuzioni di Python con numpy e ogr regolarmente installate non dovrebbero presentare problemi.

Creato e testato con Python(x,y) 2.6.5.1 in Windows Vista.

Input del programma

L'input consiste in uno shapefile dei punti da convertire, con un campo numerico con un identificatore numerico.
Lo script si attiva dalla shell con la seguente linea di comando:
   python pt2line_05.py par.txt

dove pt2line_05.py è il nome dello script e par.txt quello del file testuale che conserva i parametri richiesti (vedi esempio sottostante).
Un esempio di file dei parametri è:
   flt_pts.shp #nome dello shapefile puntuale di input
   flt_lines.shp #nome dello shapefile lineare di output
   flt_id #nome del campo identificatore (numerico intero) per ogni linea

Output del programma

i dati di output sono conservati in uno shapefile lineare. A parte il campo identificatore, id, un altro campo conserva il numero di punti che costituiscono ogni singola linea generata.

Esempio

Questo script è stato usato per convertire un dataset di punti che rappresentano le tracce di faglie nella zona della Valnerina nei pressi di Piedipaterno (Umbria). La figura sottostante illustra il dataset prima e dopo la conversione tramite lo script. La geometria delle linee generate è abbastanza semplice e questo consente il successo nella conversione effettuata dall'algoritmo. Dati e codice sono liberamente disponibili.

Points representing faults in Valnerina zone (Umbria, Italy)
Tracce delle faglie nella zona della Valnerina, espresse da punti.


Lines representing faults in Valnerina zone (Umbria, Italy)
Le stesse tracce, convertite in linee tramite l'algoritmo presentato.

Contatti

Mauro Alberti

alberti.m65@gmail.com