답변:
pyshp 모듈은 약간 까다 롭지 만 일단 사용하면 실제로 유용합니다. 예제 데이터의 CSV로 읽고 올바른 데이터 유형의 속성으로 저장된 데이터로 shapefile을 작성하는 스크립트를 작성했습니다. pyshp / xbase 데이터 타이핑은 xbase 형식에 대한 이 사용자 안내서를 찾을 때까지 항상 까다 로웠으며이 질문의 결과로 아래에 붙여 넣은 관련 pyshp 데이터 유형에 대한 작은 메모를 내 블로그 에 작성했습니다. :
전체 목록은 다음과 같습니다.
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)
이게 도움이 되길 바란다.
대안으로 목록에 데이터를 보유 할 필요가 없습니다.
# import libraries
import shapefile, csv
# create a point shapefile
output_shp = shapefile.Writer(shapefile.POINT)
# for every record there must be a corresponding geometry.
output_shp.autoBalance = 1
# create the field names and data type for each.
# you can insert or omit lat-long here
output_shp('Date','D')
output_shp('Target','C',50)
output_shp('ID','N')
# count the features
counter = 1
# access the CSV file
with open('input.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
# skip the header
next(reader, None)
#loop through each of the rows and assign the attributes to variables
for row in reader:
id= row[0]
target= row[1]
date = row[2]
# create the point geometry
output_shp.point(float(longitude),float(latitude))
# add attribute data
output_shp.record(id, target, date)
print "Feature " + str(counter) + " added to Shapefile."
counter = counter + 1
# save the Shapefile
output_shp.save("output.shp")
이 구현의 실제 예제는 여기에서 찾을 수 있습니다 .