geopandas.overlay#

geopandas.overlay(df1, df2, how='intersection', keep_geom_type=None, make_valid=True)#

在两个GeoDataFrame之间执行空间覆盖。

当前仅支持具有统一几何图形类型的数据GeoDataFrame,即仅包含(多个)多边形、仅包含(多个)点或(多个)线串和线环形状的组合。实现几个方法,这些方法都是联合的有效子集。

请参阅用户指南页面 集合-覆盖操作 有关详细信息,请参阅。

参数
df1GeoDataFrame
df2GeoDataFrame
how字符串

空间叠加方法:“交集”、“并集”、“同一性”、“对称差异”或“差异”。

keep_geom_type布尔尔

如果为True,则仅返回与df1具有相同几何图形类型的几何图形;如果为False,则返回所有生成的几何图形。默认设置为None,这会将KEEP_GEOM_TYPE设置为True,但会在删除几何图形时发出警告。

make_valid布尔值,默认为True

如果为True,则通过调用 buffer(0) ,如果为False,则为 ValueError 如果任何输入几何图形无效,则引发。

退货
dfGeoDataFrame

包含叠加生成的新面集和属性的GeoDataFrame

参见

sjoin

空间连接

GeoDataFrame.overlay

等效法

注意事项

GeoPandas中的每个操作都是平面的,即没有考虑潜在的第三维。

示例

>>> from shapely.geometry import Polygon
>>> polys1 = geopandas.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)]),
...                               Polygon([(2,2), (4,2), (4,4), (2,4)])])
>>> polys2 = geopandas.GeoSeries([Polygon([(1,1), (3,1), (3,3), (1,3)]),
...                               Polygon([(3,3), (5,3), (5,5), (3,5)])])
>>> df1 = geopandas.GeoDataFrame({'geometry': polys1, 'df1_data':[1,2]})
>>> df2 = geopandas.GeoDataFrame({'geometry': polys2, 'df2_data':[1,2]})
>>> geopandas.overlay(df1, df2, how='union')
   df1_data  df2_data                                           geometry
0       1.0       1.0  POLYGON ((2.00000 2.00000, 2.00000 1.00000, 1....
1       2.0       1.0  POLYGON ((2.00000 2.00000, 2.00000 3.00000, 3....
2       2.0       2.0  POLYGON ((4.00000 4.00000, 4.00000 3.00000, 3....
3       1.0       NaN  POLYGON ((2.00000 0.00000, 0.00000 0.00000, 0....
4       2.0       NaN  MULTIPOLYGON (((3.00000 3.00000, 4.00000 3.000...
5       NaN       1.0  MULTIPOLYGON (((2.00000 2.00000, 3.00000 2.000...
6       NaN       2.0  POLYGON ((3.00000 5.00000, 5.00000 5.00000, 5....
>>> geopandas.overlay(df1, df2, how='intersection')
   df1_data  df2_data                                           geometry
0         1         1  POLYGON ((2.00000 2.00000, 2.00000 1.00000, 1....
1         2         1  POLYGON ((2.00000 2.00000, 2.00000 3.00000, 3....
2         2         2  POLYGON ((4.00000 4.00000, 4.00000 3.00000, 3....
>>> geopandas.overlay(df1, df2, how='symmetric_difference')
   df1_data  df2_data                                           geometry
0       1.0       NaN  POLYGON ((2.00000 0.00000, 0.00000 0.00000, 0....
1       2.0       NaN  MULTIPOLYGON (((3.00000 3.00000, 4.00000 3.000...
2       NaN       1.0  MULTIPOLYGON (((2.00000 2.00000, 3.00000 2.000...
3       NaN       2.0  POLYGON ((3.00000 5.00000, 5.00000 5.00000, 5....
>>> geopandas.overlay(df1, df2, how='difference')
                                        geometry  df1_data
0  POLYGON ((2.00000 0.00000, 0.00000 0.00000, 0....         1
1  MULTIPOLYGON (((3.00000 3.00000, 4.00000 3.000...         2
>>> geopandas.overlay(df1, df2, how='identity')
   df1_data  df2_data                                           geometry
0       1.0       1.0  POLYGON ((2.00000 2.00000, 2.00000 1.00000, 1....
1       2.0       1.0  POLYGON ((2.00000 2.00000, 2.00000 3.00000, 3....
2       2.0       2.0  POLYGON ((4.00000 4.00000, 4.00000 3.00000, 3....
3       1.0       NaN  POLYGON ((2.00000 0.00000, 0.00000 0.00000, 0....
4       2.0       NaN  MULTIPOLYGON (((3.00000 3.00000, 4.00000 3.000...