使用Cartopy绘制nc文件空间图出现URLError名称解析临时失败如何解决
问题原因
该报错为网络访问故障导致,与代码逻辑无关:
Cartopy调用cfeature.COASTLINE、cfeature.BORDERS、NaturalEarthFeature等内置矢量要素时,会默认从Natural Earth官方CDN下载对应资源。你当前运行环境的DNS解析失败,无法连接资源服务器,因此抛出域名解析失败报错。
之前能正常运行是因为首次运行时资源已经缓存到本地,后续若更换运行环境、清理缓存或网络策略变动,都会触发重新下载导致报错。
可行解决方案
方案1:预下载资源到本地缓存(最稳定)
提前在可正常联网的设备上下载所需的3个资源包:
ne_110m_coastline.zipne_110m_admin_0_boundary_lines_land.zipne_50m_admin_1_states_provinces.zip
将资源按对应分类放到Cartopy缓存目录即可,Linux/Colab环境默认缓存路径为/root/.local/share/cartopy/shapefiles/natural_earth/,对应physical目录下放海岸线资源,cultural目录下放国界、省界资源。Cartopy检测到本地已有资源就不会触发远程下载。
方案2:直接加载本地SHP文件(无需依赖网络)
你已有本地SHP文件的情况下,直接替换内置feature加载逻辑即可,完全避开网络请求:
from cartopy.io.shapereader import Reader from cartopy.feature import ShapelyFeature # 替换原有cfeature.COASTLINE加载逻辑 coastline = ShapelyFeature(Reader('本地海岸线SHP文件路径').geometries(), ccrs.PlateCarree(), facecolor='none', edgecolor='k') ax.add_feature(coastline) # 国界、省界按同样逻辑替换即可,无需调用NaturalEarthFeature
方案3:更换国内下载源(适合可联网但无法访问官方CDN的场景)
在代码最开头添加配置,将Cartopy默认下载源替换为国内镜像:
import cartopy.config cartopy.config['downloaders']['natural_earth']['url'] = 'https://mirrors.aliyun.com/natural-earth/'
代码附带问题修复
你当前代码还存在非致命的语法问题,同步修改即可:
- 变量名错误:你定义的选择后变量为
prec_sel,后续调用时写为prec_as,统一变量名即可 - 警告消除:将
g1.ylabels_right = False改为g1.right_labels = False,g1.xlabels_top = False改为g1.top_labels = False,删除contourf的linewidths参数即可消除所有警告
内容的提问来源于stack exchange,提问作者Iuri Valerio
相关产品推荐
相关产品推荐

