r - 在 r 中使用 nc 数据写入栅格
问题描述
我正在使用https://ldas.gsfc.nasa.gov/gldas GLDAS_NOAH10_M:GLDAS 诺亚地表模型(netcdf4 格式)来提取雪水当量和土壤水分。
雪水当量显示 3 个维度(纬度、经度和时间),我可以轻松编写其栅格(tiff 格式),如照片和代码所示。
土壤水分包含 4 个维度(纬度、经度、深度、时间),很难导出。在这种情况下,任何人都可以知道如何以 tiff 格式编写光栅吗?谢谢。
图书馆:
library(raster)
library(sp)
library(rgdal)
library(ncdf4)
library(tiff)
小路 :
ncpath <- "D:\\GLDAS Data\\2002_GLDAS\\"
ncname <- "GLDAS_NOAH10_M.A200201.001.grb.SUB"
情况1
ncfname <- paste(ncpath, ncname, ".nc4", sep="")
ncin <- nc_open(ncfname)
检查:打印(NCIN)
变量:
lon <- ncvar_get(ncin, "lon")
lat <- ncvar_get(ncin, "lat")
b_unit <- ncatt_get(ncin,"SWE","units")
swe.array <- ncvar_get(ncin, "SWE")
dim(swe.array)
fillvalue <- ncatt_get(ncin, "SWE", "_FillValue")
nc_close(ncin)
出口 :
b <- raster(swe.array, xmn=min(lon), xmx=max(lon), ymn=min(lat), ymx=max(lat), crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0"))
b <- flip (b, direction = 'y')
writeRaster(b, file = paste0("D:\\GLDAS Data\\2002_GLDAS\\SWE_mm_month_200201",".tif"), overwrite = TRUE)
案例2
ncfname <- paste(ncpath, ncname, ".nc4", sep="")
ncin <- nc_open(ncfname)
print(ncin)
lon <- ncvar_get(ncin, "lon")
lat <- ncvar_get(ncin, "lat")
c_unit <- ncatt_get(ncin,"SoilMoist","units")
sm.array <- ncvar_get(ncin, "SoilMoist")
dim(sm.array)
fillvalue <- ncatt_get(ncin, "SoilMoist", "_FillValue")
nc_close(ncin)
出口 :
c <- raster(sm.array, xmn=min(lon), xmx=max(lon), ymn=min(lat), ymx=max(lat),
crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0"))
c <- flip (c, direction = 'y')
writeRaster(c, file = paste0("D:\\GLDAS Data\\2002_GLDAS\\SM_mm_month_200201",".tif"),overwrite = TRUE)
解决方案
您可以使用 raster() 将 nc 文件作为光栅对象直接读取。要在土壤湿度的 4D 数据中提取某个级别的数据,您可以通过使用 level 参数指定单个级别来提取单个级别。
c <- raster(ncfname, level = 1)
writeRaster(c, file = paste0("D:\\GLDAS Data\\2002_GLDAS\\SM_mm_month_200201",".tif"),overwrite = TRUE)
推荐阅读
- excel - 如何在 Excel VBA 中获取宽度元素的值
- azure-devops - 下载工件时 Azure devops 超时
- azure - Azure 数据工厂 - 使用它加载 SharePoint 列表时 Webhook 逻辑应用程序超时
- javascript - 如何使用 JsAction 事件处理程序更改 innerHTML
- extjs - Checkcolumn checkchange 检查总是假的
- mysql - MySQL查询中的所有内容都是这样的“☐”我无法查看其中的任何查询
- python - Flask 渲染 html 文件
- javascript - JavaScript - 无法将 JSON 值添加到数组中
- amazon-web-services - “AWS::Include”的大小限制
- php - PHP 查询在一台服务器上运行,但不在另一台服务器上运行。迁移问题