You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Cartopy修改Patch边界以排除陆地区域?

用Cartopy实现仅包含海洋区域的自定义框

完全可以实现,核心是通过多边形差集运算,把初始矩形框和陆地区域做减法,只保留海洋部分的形状,同时陆地正常显示。具体步骤和代码示例如下:

实现思路

  1. 获取陆地的多边形集合:利用Cartopy自带的自然地理数据或者外部shapefile,提取非洲、欧洲等陆地的多边形,并合并成一个统一的陆地几何对象。
  2. 创建初始矩形的地理多边形:把你原来的矩形范围转换成Shapely多边形(要匹配地图的地理坐标系)。
  3. 差集运算:用Shapely的difference方法,让矩形多边形减去陆地多边形,得到仅包含海洋的区域形状。
  4. 绘制结果:将运算后的海洋多边形转换成Cartopy支持的Patch,添加到地图轴上。

示例代码

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from shapely.geometry import Polygon
from shapely.ops import unary_union
from cartopy.mpl.patch import geos_to_path
import matplotlib.patches as mpatches

# 1. 创建地图轴,指定投影
ax = plt.axes(projection=ccrs.PlateCarree())

# 2. 获取并合并陆地多边形(用10m分辨率的陆地数据,精度更高)
land_feature = cfeature.NaturalEarthFeature(
    category='physical',
    name='land',
    scale='10m',
    facecolor='lightgray'
)
# 提取所有陆地的几何对象,合并成一个整体
land_geometries = list(land_feature.geometries())
unified_land = unary_union(land_geometries)

# 3. 定义你要的东大西洋初始矩形范围(根据需求调整坐标)
rect_lon_min, rect_lat_min = -20, 0
rect_lon_max, rect_lat_max = 20, 40
rect_polygon = Polygon([
    (rect_lon_min, rect_lat_min),
    (rect_lon_max, rect_lat_min),
    (rect_lon_max, rect_lat_max),
    (rect_lon_min, rect_lat_max)
])

# 4. 执行差集运算:矩形减去陆地,得到海洋区域
ocean_area = rect_polygon.difference(unified_land)

# 5. 将海洋区域转换成Cartopy Patch并添加到地图
for path in geos_to_path(ocean_area):
    ocean_patch = mpatches.PathPatch(
        path,
        facecolor='rgba(0, 0, 255, 0.3)',  # 半透明蓝色,可自定义
        edgecolor='darkblue',
        linewidth=1,
        transform=ccrs.PlateCarree()
    )
    ax.add_patch(ocean_patch)

# 6. 添加陆地、海岸线等基础元素(陆地正常显示)
ax.add_feature(land_feature)
ax.add_feature(cfeature.COASTLINE, linewidth=0.5)

# 设置地图显示范围
ax.set_extent([-30, 30, -10, 50])

plt.show()

注意事项

  • 数据分辨率:代码里用的是10m分辨率的陆地数据,精度较高但运算稍慢;如果对精度要求不高,可以换成50m或110m,速度更快。
  • 多区域处理:差集运算后可能得到多个独立的多边形(比如矩形内的岛屿周围区域),代码中的循环会自动遍历并绘制所有海洋部分。
  • 坐标系一致性:确保所有多边形的坐标系和地图投影一致(示例用的是PlateCarree,即经纬度坐标系)。

内容的提问来源于stack exchange,提问作者Logan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:36:24