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

如何在Matplotlib的笛卡尔网格上绘制海岸线?

在笛卡尔网格上绘制海岸线的解决方案

当然可以不用转换你的气象数据到经纬度网格,直接在米单位的笛卡尔坐标系上画海岸线——核心思路是把海岸线的经纬度点转换成你的局部笛卡尔坐标,而非反过来动你的气象数据。以下是具体实现步骤:

1. 明确投影关系

你已知网格中心经纬度(lon0, lat0),且x/y单位为米,说明你的网格是以中心为原点的局部平面直角坐标系。我们只需要把全球海岸线的经纬度点,通过投影转换到这个坐标系下即可。

2. 获取海岸线数据

用cartopy自带的开源海岸线数据就行,按需选择精度:

import cartopy.feature as cfeature
# 110m=低精度(全球范围),50m=中精度,10m=高精度(局部小范围)
coastline = cfeature.NaturalEarthFeature('physical', 'coastline', scale='10m')

3. 搭建坐标转换器

用pyproj(cartopy底层依赖的投影库)构建经纬度到局部笛卡尔坐标的转换器:

from pyproj import Transformer

# WGS84经纬度坐标系(EPSG:4326)
crs_geo = "EPSG:4326"
# 以你的网格中心为原点的横墨卡托投影(单位米)
crs_local = f"+proj=tmerc +lat_0={lat0} +lon_0={lon0} +units=m +ellps=WGS84"

# 创建转换工具:经纬度 → 局部笛卡尔坐标
transformer = Transformer.from_crs(crs_geo, crs_local, always_xy=True)

4. 转换并绘制海岸线

先画你的气象数据,再把海岸线坐标转换后叠加上去:

import matplotlib.pyplot as plt

# 绘制你的气象等值面
plt.contourf(x, y, meteorological_data)

# 遍历海岸线的每个几何图形,转换坐标后绘制
for geom in coastline.geometries():
    lon, lat = geom.xy
    x_coast, y_coast = transformer.transform(lon, lat)
    # 自定义海岸线样式(颜色、线宽等)
    plt.plot(x_coast, y_coast, color='k', lw=0.8)

# 锁定你的网格范围,避免海岸线数据超出显示
plt.xlim(x.min(), x.max())
plt.ylim(y.min(), y.max())
plt.show()

实用提示

  • 如果你的网格范围很大(跨多个经度/纬度),横墨卡托投影可能有变形,建议改用对应区域的UTM分区投影(需要先确定网格所在的UTM带)
  • 不想用cartopy的话,也可以用geopandas加载公开的海岸线SHP文件,再用同样的转换器处理坐标
  • 小范围地图选10m精度的海岸线,大范围选110m,避免数据量过大拖慢绘图速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:20:37