Created
June 9, 2017 16:42
-
-
Save yassineAlouini/0df01309e091809b7027ae97f1d81133 to your computer and use it in GitHub Desktop.
Buffer a GeoDataFrame then break Multi-polygons to Polygons.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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