Skip to content

Instantly share code, notes, and snippets.

@yassineAlouini
Created June 9, 2017 16:42
Show Gist options
  • Save yassineAlouini/0df01309e091809b7027ae97f1d81133 to your computer and use it in GitHub Desktop.
Save yassineAlouini/0df01309e091809b7027ae97f1d81133 to your computer and use it in GitHub Desktop.
Buffer a GeoDataFrame then break Multi-polygons to Polygons.
import geopandas as gpd
import pandas as pd
def multipolygon_to_polygon(input_gdf):
"""Break each MultiPolygon to its constituting Polygons, create a new polygons DataFrame and then
append it to the initial GeoDataFrame
"""
gdf = input_gdf.copy()
multipolygon_gdf = gdf.loc[lambda df: df.geometry.geom_type == 'MultiPolygon', :]
for row_index, row in multipolygon_gdf.iterrows():
polygons = [polygon for polygon in row['geometry']] # Extract polygons from multipolygon
data = row.to_dict()
data['geometry'] = polygons
polygons_df = pd.DataFrame(data, columns=list(row.index))
gdf = gdf.drop(row_index)
gdf = gdf.append(polygons_df)
return gdf
if __name__ == "__main__":
gdf.loc[lambda df: df.geometry == 'Polygon', 'geometry']=gdf.loc[
lambda df: df.geometry == 'Polygon', 'geometry'].buffer(0)
# Break each MultiPolygon to its constituting Polygons
gdf = multipolygon_to_polygon(gdf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment