You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Sentinel_5_L2级ncdf文件转换为GeoTIFF格式?

Sentinel-5P L2级NC文件转GeoTIFF实现方法

报错原因

触发unused arguments (xmin = ..., ymin = ...)报错的核心原因有两个:

  1. 构造raster对象时ymin参数错误传入了完整的纬度数组,未取纬度最小值
  2. CRS("+init=epsg:4326")的写法已被raster包废弃,会引发参数匹配异常

修正后可用代码

推荐使用raster包的官方替代包terra处理,兼容性和效率更高:

library(ncdf4)
library(terra)

# 读取NC文件变量
nc_data <- nc_open("TROPOSIF_L2B_2018-06-01.nc")
lon <- ncvar_get(nc_data, "PRODUCT/longitude", verbose = TRUE)
lat <- ncvar_get(nc_data, "PRODUCT/latitude", verbose = TRUE)
SIF_743 <- ncvar_get(nc_data, "PRODUCT/SIF_743", verbose = TRUE)
nc_close(nc_data)

# 方案1:规则网格数据直接构造栅格
r <- rast(t(SIF_743), 
          xmin = min(lon, na.rm = TRUE), 
          xmax = max(lon, na.rm = TRUE), 
          ymin = min(lat, na.rm = TRUE), 
          ymax = max(lat, na.rm = TRUE),
          crs = "EPSG:4326")
r <- flip(r, direction = "y")

# 方案2:Sentinel-5 L2不规则条带数据使用点转栅格,避免坐标错位
# df <- data.frame(
#   lon = as.vector(lon),
#   lat = as.vector(lat),
#   sif = as.vector(SIF_743)
# )
# df <- na.omit(df)
# pts <- vect(df, geom = c("lon", "lat"), crs = "EPSG:4326")
# r <- rasterize(pts, rast(res=0.05, ext(pts), crs="EPSG:4326"), field = "sif")

# 可视化
plot(r, main = "SIF_743 2018-06-01")

# 导出GeoTIFF
writeRaster(r, "SIF_743_20180601.tif", overwrite = TRUE)

原有代码快速修复方案

如果要保留原raster包的写法,仅需修改raster构造行的两个参数即可:

# 把原来的构造行替换为以下内容即可
r <- raster(t(SIF_743), 
            xmin=min(lon, na.rm = T), 
            xmx=max(lon, na.rm = T), 
            ymin=min(lat, na.rm = T), 
            ymx=max(lat, na.rm = T), 
            crs=CRS("+proj=longlat +datum=WGS84 +no_defs"))

内容的提问来源于stack exchange,提问作者Bryan Alemán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:03