P-robot - 1 year ago 188

Python Question

I am trying to find the union of two polygons in GeoPandas and output a single geometry that encompasses points from both polygons as its vertices. The

`geopandas.overlay`

For context, I'm using this to combine two administrative areas together into a single area (i.e. include a town district within a country).

The following example is from the geopandas website and illustrates what I'd like:

`from matplotlib import pyplot as plt`

import geopandas as gpd

from shapely.geometry import Polygon

polys1 = gpd.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]),

Polygon([(2,2), (4,2), (4,4), (2,4)])])

polys2 = gpd.GeoSeries([Polygon([(1,1), (3,1), (3,3), (1,3)]),

Polygon([(3,3), (5,3), (5,5), (3,5)])])

df1 = gpd.GeoDataFrame({'geometry': polys1, 'df1':[1,2]})

df2 = gpd.GeoDataFrame({'geometry': polys2, 'df2':[1,2]})

res_union = gpd.overlay(df1, df2, how='union')

res_union.plot()

None of the output geometries are what I was expected, which is the following:

`poly_union = gpd.GeoSeries([Polygon([(0,0), (0,2), (1,2), (1,3), \`

(2,3), (2,4), (3, 4), (3, 5), (5, 5), (5, 3), (4, 3), (4, 2), \

(3,2), (3,1), (2, 1), (2, 0), (0, 0)])])

poly_union.plot(color = 'red')

plt.show()

Firstly, how do I output the above polygon (

`poly_union`

`df1`

`df2`

Secondly, what is the correct nomenclature associated with the geometry (

`poly_union`

Note: This example does not seem to output a single polygon either:

`poly1 = df1['geometry']; poly2 = df2['geometry']`

mergedpoly = poly1.union(poly2)

mergedpoly.plot()

Answer Source

From the question/answer here, it seems this is called a `cascaded_union`

within `shapely`

:

```
from shapely.ops import cascaded_union
polygons = [poly1[0], poly1[1], poly2[0], poly2[1]]
boundary = gpd.GeoSeries(cascaded_union(polygons))
boundary.plot(color = 'red')
plt.show()
```