Pyshp modülü asmak için biraz zor, ama gittikten sonra gerçekten yararlı. Ben örnek verilerin bir csv okuyan ve doğru veri türlerinin öznitelikleri olarak depolanan veriler ile bir şekil dosyası yazıyor bir komut dosyası yazdım. Ben bunu bulana dek pyshp / xbase datatyping benim için her zaman zor olmuştur xbase formatı için kullanım kılavuzunu ve bu sorunun bir sonucu olarak ben küçük bir not yazdım bloguma aşağıda yapıştırdığınız ilgili pyshp veri türleri, kısmen ilgili :
- C, ASCII karakterleri
- N, yaklaşık 18 karakter uzunluğunda sınırlı bir çift duyarlıklı tam sayıdır
- D, bölümler arasında boşluk veya kısa çizgi olmadan YYYYAAGG biçimindeki tarihler içindir.
- F, N ile aynı uzunluk sınırlarına sahip kayan nokta sayıları içindir
- L, şekil dosyasının öznitelik tablosunda 1 (doğru) veya 0 (yanlış) olarak kısa bir tamsayı olarak depolanan mantıksal veriler içindir. Alabileceği değerler 1, 0, y, n, Y, N, T, F veya python yerleşik True ve False
Listenin tamamı aşağıdaki gibidir:
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)
Umarım bu yardımcı olur.