使用stars::read_stars与raster::raster读取同一.nc文件投影不一致求助
解决stars::read_stars读取NetCDF文件时的投影异常问题
问题背景
使用raster::raster()可正常读取CHAP_PM2.5_Y1K_2020_V4.nc文件,绘图投影显示正常;但用stars::read_stars()读取同一文件后,绘图出现投影异常,读取过程还弹出关于矢量字段的警告信息。
原因分析
该NetCDF文件包含多组变量,其中部分变量的维度定义与主PM2.5数据变量不统一,导致GDAL解析投影信息时出现偏差;另外raster::raster()默认仅读取第一个变量,而stars::read_stars()默认读取所有变量,这也是两者表现差异的核心原因。
解决方案
1. 指定读取目标变量
明确指定要读取的PM2.5变量(文件中对应变量名为GWRPM25),避免GDAL处理无关变量时干扰投影解析:
library(stars) library(raster) # 仅读取目标变量GWRPM25 pm_stars = stars::read_stars('CHAP_PM2.5_Y1K_2020_V4.nc', var = 'GWRPM25')
2. 手动校正投影信息
若指定变量后投影仍异常,可从raster对象中提取正确投影信息,赋值给stars对象:
pm_raster = raster::raster('CHAP_PM2.5_Y1K_2020_V4.nc') pm_stars = stars::read_stars('CHAP_PM2.5_Y1K_2020_V4.nc', var = 'GWRPM25') # 将raster对象的投影信息同步给stars对象 st_crs(pm_stars) = st_crs(pm_raster)
3. 验证修复效果
通过绘图确认投影是否恢复正常:
plot(pm_raster, main = 'raster::raster') plot(pm_stars, main = 'stars::read_stars (fixed)')
额外说明
读取时的警告源于文件中存在维度不统一的矢量字段变量,指定目标变量后该警告会自动消失,且不影响主数据的读取与投影校正。
内容的提问来源于stack exchange,提问作者Miao Cai
相关产品推荐
相关产品推荐

