Il modulo pyshp è un po 'complicato da capire, ma è davvero utile quando lo fai andare avanti. Ho scritto uno script che legge in un CSV i dati di esempio e scrive uno shapefile con i dati memorizzati come attributi dei tipi di dati corretti. Il tipo di dati pyshp / xbase è sempre stato complicato per me fino a quando non ho trovato questa guida per l'utente per il formato xbase e come risultato di questa domanda ho scritto una piccola nota sul mio blog riguardante i tipi di dati pyshp pertinenti, parte della quale ho incollato di seguito :
- C è caratteri ASCII
- N è un numero intero a doppia precisione limitato a circa 18 caratteri di lunghezza
- D è per le date nel formato AAAAMMGG, senza spazi o trattini tra le sezioni.
- F è per i numeri in virgola mobile con gli stessi limiti di lunghezza di N
- L è per i dati logici memorizzati nella tabella degli attributi del file di forma come numero intero breve come 1 (vero) o 0 (falso). I valori che può ricevere sono 1, 0, y, n, Y, N, T, F o gli builtin python True e False
L'elenco completo è il seguente:
import shapefile as shp
import csv
out_file = 'GPS_Pts.shp'
#Set up blank lists for data
x,y,id_no,date,target=[],[],[],[],[]
#read data from csv file and store in lists
with open('input.csv', 'rb') as csvfile:
r = csv.reader(csvfile, delimiter=';')
for i,row in enumerate(r):
if i > 0: #skip header
x.append(float(row[3]))
y.append(float(row[4]))
id_no.append(row[0])
date.append(''.join(row[1].split('-')))#formats the date correctly
target.append(row[2])
#Set up shapefile writer and create empty fields
w = shp.Writer(shp.POINT)
w.autoBalance = 1 #ensures gemoetry and attributes match
w.field('X','F',10,8)
w.field('Y','F',10,8)
w.field('Date','D')
w.field('Target','C',50)
w.field('ID','N')
#loop through the data and write the shapefile
for j,k in enumerate(x):
w.point(k,y[j]) #write the geometry
w.record(k,y[j],date[j], target[j], id_no[j]) #write the attributes
#Save shapefile
w.save(out_file)
Spero che questo possa essere d'aiuto.