Modul pyshp agak sulit untuk dipahami, tetapi sangat berguna setelah Anda melakukannya. Saya telah menulis sebuah skrip yang membaca dalam csv dari contoh data dan menulis sebuah shapefile dengan data yang disimpan sebagai atribut dari tipe data yang benar. Datatyping pyshp / xbase selalu sulit bagi saya sampai saya menemukan panduan pengguna ini untuk format xbase dan sebagai hasil dari pertanyaan ini saya telah menulis catatan kecil di blog saya mengenai tipe data pyshp yang relevan, bagian yang telah saya tempel di bawah ini :
- C adalah karakter ASCII
- N adalah bilangan bulat presisi ganda yang panjangnya sekitar 18 karakter
- D adalah untuk tanggal dalam format YYYYMMDD, tanpa spasi atau tanda hubung di antara bagian.
- F adalah untuk angka floating point dengan batas panjang yang sama dengan N
- L adalah untuk data logis yang disimpan dalam tabel atribut shapefile sebagai integer pendek sebagai 1 (benar) atau 0 (salah). Nilai yang dapat diterimanya adalah 1, 0, y, n, Y, N, T, F atau python builtins Benar dan Salah
Daftar lengkapnya adalah sebagai berikut:
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)
Saya harap ini membantu.