NC文件不规则裁剪(利用shp文件裁剪)(三)

本文介绍了如何使用rioxarray库简化地理数据处理过程,通过实例展示了如何将坐标信息写入NC文件并裁剪SHP数据,同时提到了处理NCEP数据时可能遇到的经度范围问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改日志

2025.4.12 第一次修改
修正ERA5的数据裁剪后经纬度异常的问题

鸣谢

感谢优快云博友:2301_81644139提出的BUG修改意见

前言

Hello大家好呀,最近正好需要用到多个SHP去裁剪NC,按照我以前的两种办法(办法1办法2)操作的话,我自己都会破防,在偶然的情况下发现了rioxarray这个库。这个库可以将坐标信息直接写入到NC之中,从而直接使用shp裁剪,比原先的方法更为简单明了。

实例数据

本次测试数据采用2m气温数据,下载链接:点我直接下载
NC数据打开后如下图所示,该数据为逐月的三维数据。
在这里插入图片描述

SHP数据我就直接采用NOAA公开的海岸线数据吧,主要是涉及到中国的SHP极大可能性会被平台封文章。下载链接:点我直接下载。数据如下图所示,我用的文件是GSHHS_i_L1.shp

在这里插入图片描述

代码部分

需要的库

本次我们需要用到以下四个库,这几个库都可以直接用pip安装比较方便。

import xarray as xr
import rioxarray
import geopandas as gpd
from shapely.geometry import mapping

加载文件

# 读取数据集
ds = xr.open_dataset(r'air.2m.mon.mean.nc')
if ds.lon.max() > 180:
    ds.coords['lon'] = (ds.coords['lon'] + 180) % 360 - 180
    ds = ds.sortby(ds.lon)

写入地理信息

shp = gpd.read_file(r"gshhg-shp-2.3.7/GSHHS_shp/i/GSHHS_i_L1.shp")
ds.rio.write_crs("epsg:4326", inplace=True)
ds.rio.set_spatial_dims(x_dim="lon", y_dim="lat", inplace=True)

裁剪&保存NC

ds = ds.rio.clip(shp.geometry.apply(mapping), shp.crs, drop=False)
ds.to_netcdf(r'air.2m.mon.mean_clip.nc')

结果

在这里插入图片描述

完整代码奉上

import xarray as xr
import rioxarray
import geopandas as gpd
from shapely.geometry import mapping

# 读取数据集
ds = xr.open_dataset(r'air.2m.mon.mean.nc')
if ds.lon.max() > 180:
    ds.coords['lon'] = (ds.coords['lon'] + 180) % 360 - 180
    ds = ds.sortby(ds.lon)

# 读取形状文件
shp = gpd.read_file(r"gshhg-shp-2.3.7/GSHHS_shp/i/GSHHS_i_L1.shp")
ds.rio.write_crs("epsg:4326", inplace=True)
ds.rio.set_spatial_dims(x_dim="lon", y_dim="lat", inplace=True)
ds = ds.rio.clip(shp.geometry.apply(mapping), shp.crs, drop=False)
ds.to_netcdf(r'air.2m.mon.mean_clip.nc') # 保存NC文件
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷心没有菜

你若晌饭便是义父!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值