使用xarray读取GeoTIFF时出现module 'xarray' has no attribute 'open_rasterio'错误
问题解决:module 'xarray' has no attribute 'open_rasterio'
错误原因
xarray从0.20.0版本开始,已将open_rasterio从核心模块移除,该功能现在由rioxarray库单独提供,直接通过xr.open_rasterio()调用必然报错。
修复步骤
- 安装rioxarray库(未安装的话执行以下命令):
pip install rioxarray
- 修改代码中读取GeoTIFF的逻辑:
- 新增导入rioxarray模块
- 替换原有的
xr.open_rasterio调用为rioxarray的读取方法
修改后的完整代码:
import xarray as xr import geemap import numpy as np from mayavi import mlab import rioxarray # 新增导入rioxarray # Step 1: 下载NetCDF文件 url = 'https://github.com/giswqs/leafmap/raw/master/examples/data/wind_global.nc' filename = 'wind_global.nc' data = geemap.read_netcdf(filename) # Step 2: 将NetCDF转换为GeoTIFF tif = 'wind_global.tif' geemap.netcdf_to_tif(filename, tif, variables=['u_wind', 'v_wind'], shift_lon=True) print(data) # Step 3: 使用rioxarray读取GeoTIFF data = rioxarray.open_rasterio(tif) # 替换原xr.open_rasterio调用 # 提取经纬度值 latitude = data.y.values longitude = data.x.values # 将U/V风分量转换为风速和风向 u_wind = data.values[0] v_wind = data.values[1] wind_magnitude = np.sqrt(u_wind**2 + v_wind**2) # 修正:此处应为平方运算,而非乘2 wind_direction = np.degrees(np.arctan2(u_wind, v_wind)) # 创建经纬度网格 lon_grid, lat_grid = np.meshgrid(longitude, latitude)
额外提示
原代码计算风速时存在逻辑错误:u_wind*2和v_wind*2是数值乘2,正确的平方运算应该用u_wind**2和v_wind**2,已在修复后的代码中纠正。
内容的提问来源于stack exchange,提问作者rajiv
相关产品推荐
相关产品推荐

