Thursday, 2 August 2018

python - Using PyShp to convert polygons in *.csv to *.shp files?


I'm converting csv data to shapefiles using the pyshp python library. What I want to do is very similar to Using pyshp to convert .csv file to .shp?, except that I don't know how to handle polygons.


My data is in a csv file. Each row corresponds to a named rectangle, i.e. a string and the latitude or longitude coordinates of each side of the rectangle: left side (xl), right side (xr), top (yt) and bottom (yb).



So my data looks like this:


name,xl,xr,yt,yb
some Name,-25.3125,22.5,47.517193,31.353634
another Name,-103.359375,-0.703125,80.87282,74.40216
...

And my python code is pretty simple. It is only slightly modified from the points example. But when I try to import this data into google maps, it has some errors parsing it. So I think I'm doing something wrong, but I'm not sure what?


#Set up blank lists for data
name, polyPart = [],[]


#read data from csv file and store in lists
with open(in_file, 'rb') as csvfile:
r = csv.reader(csvfile, delimiter=',')
for i,row in enumerate(r):
if i > 0: #skip header

# parse data into a point array representing the bounding box
xl = float(row[1])
xr = float(row[2])
yt = float(row[3])

yb = float(row[4])
tl = [xl, yt]
tr = [xr, yt]
br = [xr, yb]
bl = [xl, yb]
parr = [tl, tr, br, bl, tl]

# array of one "part", the part is an array of points
polyPart.append([parr])
name.append(row[0])


#Set up shapefile writer and create empty fields
maxStringLength = 50
w = shp.Writer(shp.POLYGON)
w.field('name','C',maxStringLength)

#loop through the data and write the shapefile
for j, name in enumerate(name):
w.poly(parts=polyPart[j])
w.record(name)


#Save shapefile
w.save(out_file)


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...