这里用pyshp完成转换。
坐标纠偏(gcj02转wgs84)和定义投影(proj.4)酌情操作。
#-*-coding:utf-8-*- import shapefile as shp import csv import codecs import os def trans_point(folder, fn, delimiter=','): '''transfer a csv file to shapefile''' # create a point shapefile output_shp = shp.Writer(folder + "%s.shp"%fn.split('.')[0], shp.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 omit fields here # 顺序一定要与下面的保持一致 #关键步 output_shp.field('PointUid', 'C', 80) # string, max-length #output_shp.field('KeyName', 'C', 20) output_shp.field('BusName', 'C', 70) output_shp.field('StationName', 'C', 50) output_shp.field('LON', 'C', 15) output_shp.field('LAT', 'C', 15) counter = 1 # count the features # access the CSV file with codecs.open(folder + fn, 'rb', 'utf-8') as csvfile: reader = csv.reader(csvfile, delimiter=delimiter) next(reader, None) # skip the header #loop through each of the rows and assign the attributes to variables for row in reader: try: ###只有上海数据有KeyName #关键步 PointUid = row[0] #KeyName= row[1] BusName = row[1] StationName = row[2] LON = row[3] LAT = row[4] output_shp.point(float(LON), float(LAT)) # create the point geometry output_shp.record(PointUid,BusName,StationName,LON,LAT) # 关键步add attribute data if counter % 10000 == 0: print("Feature " + str(counter) + " added to Shapefile.") counter = counter + 1 except Exception as e: print(e) print(row) #listJS = ["changzhou","huaian","lianyungang","nanjing","nantong","suqian","suzhou","taizhou","wuxi","xuzhou","yancheng","yangzhou","zhenjiang"] for i in listJS: trans_point("E:\公交站点csv转shp\","{}点总量.csv".format(i))
最后结果:
厌世写手不想再写py爬虫了,立个flag,这个号不会再更新爬虫了。