Dervin Thunk
Dervin Thunk

Reputation: 20119

How do I save centroids in a shapefile, together with a geometry?

I calculate a centroid for some GeoDataFrame

M["centroid"] = M.centroid

now, I'd like to save that column in a shp file, and do

M[["centroid","geometry"]].to_file("mfile.shp")

But the driver complains I cannot save a Point together with my geometry. I guess that's ok, but I'm wondering what's the best way to store controid information alongside other geo info using geopandas

Upvotes: 1

Views: 741

Answers (1)

martinfleis
martinfleis

Reputation: 7804

Because GeoPandas will not allow you to save two geometry columns (when create shapefiles), I would recommend saving xy coordinates into columns for each centroid. From that you can always easily get shapely.Point.

for index, row in M.iterrows():
    centroid_coords = row.geometry.centroid.coords.xy
    M.loc[index, 'cen_x'] = centroid_coords[0][0]
    M.loc[index, 'cen_y'] = centroid_coords[1][0]

M[["cen_x", "cen_y", "geometry"]].to_file("mfile.shp")

EDIT based on comment below (thanks, didn't realise it):

temp = M.centroid

M['cen_x'] = temp.x
M['cen_y'] = temp.y

M[["cen_x", "cen_y", "geometry"]].to_file("mfile.shp")

Upvotes: 2

Related Questions