Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

Fiona accessing coordinates of multiple polygons in a shapefile

Writer Andrew Mclaughlin

I am working on a shapefile that contains 4 polygons where I need to extract their coordinates in a tuple or numpy array for later manipulation. While fiona identifies the 4 polygons, using shapely to get the area only gives me the value for the first polygon.

I would like to pick the xy coordinate for all polygons and put them separately into arrays and tuples for processing. Any help would be appreciated.

import fiona
import pprint
from shapely.geometry import shape, Polygon
c = fiona.open("myShapeFile.shp", 'r')
pprint.pprint(len(c))
poly = Polygon(next(iter(c))["geometry"]["coordinates"][:])
print('Area :: ',poly.area)

The execution gives me the following:

4

Area :: 483.6379565269977

6

1 Answer

Try this:

import fiona
import numpy as np
c = fiona.open('myShapeFile.shp')
coords = [np.array(poly['geometry']['coordinates']) for poly in c.values()]

coords is a 4 item list holding numpy arrays built from the coordinates of the polygons from the shapefile:

[array([[ 3.67739738e+05, 6.35697708e+06, -1.50000000e+03], [ 3.67709140e+05, 6.35875947e+06, -1.50000000e+03], [ 3.55633222e+05, 6.35932405e+06, -1.50000000e+03], [ 3.55340980e+05, 6.35724482e+06, -1.50000000e+03], [ 3.54012992e+05, 6.35713924e+06, -1.50000000e+03], [ 3.53169984e+05, 6.33306237e+06, -1.50000000e+03], [ 3.72936914e+05, 6.33219322e+06, -1.50000000e+03], [ 3.73638262e+05, 6.34799928e+06, -1.50000000e+03], [ 3.70536492e+05, 6.34865912e+06, -1.50000000e+03], [ 3.71030683e+05, 6.35672004e+06, -1.50000000e+03], [ 3.67739738e+05, 6.35697708e+06, -1.50000000e+03]]), array([[ 3.60619254e+05, 6.35486104e+06, -1.50000000e+03], [ 3.61702258e+05, 6.35460318e+06, -1.50000000e+03], [ 3.62578977e+05, 6.35362332e+06, -1.50000000e+03], [ 3.61805402e+05, 6.35192145e+06, -1.50000000e+03], [ 3.60412965e+05, 6.35114787e+06, -1.50000000e+03], [ 3.59072102e+05, 6.35171516e+06, -1.50000000e+03], [ 3.59020527e+05, 6.35279817e+06, -1.50000000e+03], [ 3.60309824e+05, 6.35295288e+06, -1.50000000e+03], [ 3.60000391e+05, 6.35408746e+06, -1.50000000e+03], [ 3.60619254e+05, 6.35486104e+06, -1.50000000e+03]]), array([[ 3.59072102e+05, 6.34439198e+06, -1.50000000e+03], [ 3.60928684e+05, 6.34537184e+06, -1.50000000e+03], [ 3.62424262e+05, 6.34480455e+06, -1.50000000e+03], [ 3.63868270e+05, 6.34361841e+06, -1.50000000e+03], [ 3.63146266e+05, 6.34155554e+06, -1.50000000e+03], [ 3.61341258e+05, 6.34036939e+06, -1.50000000e+03], [ 3.60258250e+05, 6.34109139e+06, -1.50000000e+03], [ 3.61650688e+05, 6.34227754e+06, -1.50000000e+03], [ 3.61289688e+05, 6.34356684e+06, -1.50000000e+03], [ 3.59897250e+05, 6.34294798e+06, -1.50000000e+03], [ 3.57989094e+05, 6.34346370e+06, -1.50000000e+03], [ 3.59072102e+05, 6.34439198e+06, -1.50000000e+03]]), array([[ 3.69489590e+05, 6.34294798e+06, -1.50000000e+03], [ 3.71397742e+05, 6.34103982e+06, -1.50000000e+03], [ 3.69438016e+05, 6.33928638e+06, -1.50000000e+03], [ 3.67581438e+05, 6.34052411e+06, -1.50000000e+03], [ 3.67787723e+05, 6.34222597e+06, -1.50000000e+03], [ 3.69489590e+05, 6.34294798e+06, -1.50000000e+03]])]
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.