读取 Netcdf 子类别并转换为网格

Read Netcdf sub categories and convert to grid

我也在 stack gis 上发布了这个问题 1。从具有子类别的 netcdf4 数据中,我希望能够读取 "Retrieval/fs" 变量。我也想阅读它们并转换为栅格网格,但栅格似乎不支持 netcdf4。我很感激任何建议。

library(ncdf4)
library(raster)
file <- "http://140906_B7101Ar_150909171225s.nc4"

names(file$var)
"latitude" ... "longitude"... "Retrieval/fs"

lat <- raster(file, varname="latitude")
lon <- raster(file, varname="longitude")

Error in (function (classes, fdef, mtable)  :
unable to find an inherited method for function ‘raster’ for signature ‘"ncdf4"’

raster 确实适用于 ncdf4 您现在展示的是实际代码。 file 是一个字符向量。你不能用那个做 names(file$var)(至少你不会得到 "latitude" ... "longitude"... "Retrieval/fs"。所以 file 可能是 ncdf4 对象(参见错误消息),而 raster 函数需要一个文件名(但不是 url)。

如果你下载文件然后做

library(raster)
x <- brick(filename, var="Retrieval/fs")

如果 ncdf 文件具有常规栅格数据,则一切正常

但是,它没有,因此您不能直接将其作为光栅导入。相反,您可以从文件中获取经纬度和值,将它们视为点,然后栅格化(插值)它们以获得常规栅格。

这是我提出的问题的答案。由于数据未网格化,我检索经度和纬度信息以及变量以创建数据框。

fs <- ncvar_get(ncfile, "Retrieval/fs")
xlon <- ncvar_get(ncfile, "longitude")
xlat <- ncvar_get(ncfile, "latitude")
d <- data.frame( as.vector(xlon),as.vector(xlat), as.vector(fs))# create a dataframe
coordinates(d) <- c("xlon","xlat")
proj4string(d) <- CRS("+proj=longlat") 
spoint <- SpatialPoints(coords = d) #create a spatial point object