如何用Geopandas获取GeoDataFrame边界框以实现地图反转?
实现地图反转(显示丹麦以外区域)的简便方法
嘿,你之前手动提取坐标创建边界框的方式确实有点繁琐,其实GeoPandas本身就提供了更简洁的工具来解决这个问题,下面分步骤帮你搞定:
一、快速获取丹麦的边界框
GeoDataFrame有个内置属性total_bounds,可以直接返回整个数据集的最小/最大经纬度,格式是(minx, miny, maxx, maxy),完全不用手动遍历坐标。用这个创建边界框多边形的代码如下:
import geopandas as gpd from shapely.geometry import Polygon # 读取数据并筛选丹麦 world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) denmark = world[world.name == 'Denmark'] # 获取丹麦的边界框坐标 minx, miny, maxx, maxy = denmark.total_bounds # 创建覆盖丹麦的矩形GeoDataFrame bbox_poly = Polygon([ (maxx, maxy), (maxx, miny), (minx, miny), (minx, maxy) ]) bbox_gdf = gpd.GeoDataFrame([{'geometry': bbox_poly}], crs=denmark.crs)
二、直接生成非丹麦区域(地图反转)
有了边界框之后,我们可以用差集运算(difference)直接得到边界框内丹麦以外的区域,这就是你需要的遮盖层:
# 合并丹麦的所有几何(因为丹麦是多岛屿的多边形集合) denmark_union = denmark.geometry.unary_union # 计算边界框减去丹麦区域的部分(即非丹麦区域) non_denmark = bbox_gdf.geometry.difference(denmark_union) non_denmark_gdf = gpd.GeoDataFrame({'geometry': non_denmark}, crs=denmark.crs)
三、绘图验证效果
用geoplot把结果画出来看看,就能看到只显示丹麦以外区域的反转地图了:
import geoplot as gplt import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8, 8)) # 绘制非丹麦区域(遮盖层) gplt.polyplot(non_denmark_gdf, ax=ax, color='lightgray') # 绘制丹麦区域 gplt.polyplot(denmark, ax=ax, color='darkred') plt.title('反转地图:仅显示丹麦以外区域') plt.show()
为什么这个方法更好?
- 相比手动遍历坐标,
total_bounds自动处理了多部分几何(比如丹麦的各个岛屿),不会遗漏任何区域 - 差集运算一步到位,不用手动计算坐标,代码更简洁易维护
- 保持了原数据的CRS(坐标系),避免坐标转换错误
内容的提问来源于stack exchange,提问作者576i
相关产品推荐
相关产品推荐

