Cartopy绘制地图无法下载NaturalEarth数据 报名称解析失败错误
报错原因
该错误是Cartopy首次调用内置cfeature地理要素时的默认下载逻辑触发的:首次使用cfeature.COASTLINE这类内置要素时,Cartopy会自动请求Natural Earth的官方服务器下载对应精度的矢量数据,当前运行环境的网络无法正常解析目标服务器域名,导致下载失败触发报错。
解决方案
方法1:手动下载离线数据放置到对应缓存目录
提前下载好对应精度的Natural Earth数据包(你报错里需要的是110m精度海岸线文件),解压后放置到Cartopy的本地缓存路径即可:- Windows缓存路径:
C:\Users\你的用户名\.local\share\cartopy\shapefiles\natural_earth\physical\ - Linux/macOS缓存路径:
~/.local/share/cartopy/shapefiles/natural_earth/physical/
放置完成后重新运行原代码即可,不会再触发下载请求。
- Windows缓存路径:
方法2:为运行环境配置网络代理
如果你有可用的代理服务,可以在代码开头添加全局代理配置,让Cartopy的下载请求走代理通道:import os # 替换为你自己的代理地址和端口 os.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890' os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890' import cartopy.crs as crs import cartopy.feature as cfeature import matplotlib.pyplot as plt fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(1,1,1, projection=crs.PlateCarree()) ax.add_feature(cfeature.COASTLINE) plt.show()方法3:直接读取本地矢量文件替代内置要素
如果你已经有本地的海岸线shp矢量文件,可以直接用Cartopy的接口读取本地文件添加到图上,完全绕过在线下载逻辑:import cartopy.crs as crs import matplotlib.pyplot as plt from cartopy.io.shapereader import Reader fig = plt.figure(figsize=(8,6)) ax = fig.add_subplot(1,1,1, projection=crs.PlateCarree()) # 替换为你本地的海岸线shp文件路径 ax.add_geometries(Reader('./ne_110m_coastline.shp').geometries(), crs=crs.PlateCarree(), facecolor='none', edgecolor='black') plt.show()
内容的提问来源于stack exchange,提问作者user9364978
相关产品推荐
相关产品推荐

