Skip to content

Instantly share code, notes, and snippets.

@mhweber
Forked from debboutr/explode.py
Created July 25, 2016 17:45
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mhweber/cf36bb4e09df9deee5eb54dc6be74d26 to your computer and use it in GitHub Desktop.
Save mhweber/cf36bb4e09df9deee5eb54dc6be74d26 to your computer and use it in GitHub Desktop.
Explode MultiPolygon geometry into individual Polygon geometries in a shapefile using GeoPandas and Shapely
import geopands as gpd
from shapely.geometry.polygon import Polygon
from shapely.geometry.multipolygon import MultiPolygon
def explode(indata):
indf = gpd.GeoDataFrame.from_file(indata)
outdf = gpd.GeoDataFrame(columns=indf.columns)
for idx, row in indf.iterrows():
if type(row.geometry) == Polygon:
outdf = outdf.append(row,ignore_index=True)
if type(row.geometry) == MultiPolygon:
multdf = gpd.GeoDataFrame(columns=indf.columns)
recs = len(row.geometry)
multdf = multdf.append([row]*recs,ignore_index=True)
for geom in range(recs):
multdf.loc[geom,'geometry'] = row.geometry[geom]
outdf = outdf.append(multdf,ignore_index=True)
return outdf
@andresjcuberli
Copy link

Thanks a lot!

@wxyang007
Copy link

Thanks so much!

@owvarley
Copy link

Thank you for this, very helpful! Thanks @keithfma for the info on it being included in geopanda. I couldn't find anything but dissolve in their docs when searching.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment