VDC
VDC

Reputation: 1449

raise ValueError when producing a shape file with geopandas

I have just recently started to work with shapefiles. I have a shapefile in which each object is a polygon. I want to produce a new shapefile in which the geometry of each polygon is replaced by its centroid. There is my code.

import geopandas as gp
from shapely.wkt import loads as load_wkt

fname = '../data_raw/bg501c_starazagora.shp'
outfile = 'try.shp'
shp = gp.GeoDataFrame.from_file(fname)

centroids = list()
index = list()

df = gp.GeoDataFrame()

for i,r in shp.iterrows():
    index.append(i)
    centroid = load_wkt(str(r['geometry'])).centroid.wkt
    centroids.append(centroid)

df['geometry'] = centroids
df['INDEX'] = index

gp.GeoDataFrame.to_file(df,outfile)

When I run the script I end up with raise ValueError("Geometry column cannot contain mutiple " ValueError: Geometry column cannot contain mutiple geometry types when writing to file. I cannot understand what is wrong. Any help?

Upvotes: 1

Views: 1594

Answers (1)

AJG519
AJG519

Reputation: 3379

The issue is that you're populating the geometry field with a string representation of the geometry rather than a shapely geometry object.

No need to convert to wkt. Your loop could instead be:

for i,r in shp.iterrows():
    index.append(i)
    centroid = r['geometry'].centroid
    centroids.append(centroid)

However, there's no need to loop through the geodataframe at all. You could create a new one of shapefile centroids as follows:

df=gp.GeoDataFrame(data=shp, geometry=shp['geometry'].centroid)
df.to_file(outfile)

Upvotes: 1

Related Questions