首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetCDF to Raster Brick“无法找到”ncdf4“的功能‘砖块’的继承方法”

NetCDF to Raster Brick“无法找到”ncdf4“的功能‘砖块’的继承方法”
EN

Stack Overflow用户
提问于 2017-03-23 17:07:15
回答 1查看 3.5K关注 0票数 2

非常简单的问题与光栅包,也使用ncdf4加载在ECMWF时代-过渡Netcdf文件。

只需这样做:

代码语言:javascript
复制
a <- nc_open("SSTs.nc")
B <- brick(a, varname="sst")

返回以下内容:

代码语言:javascript
复制
    Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘brick’ for signature ‘"ncdf4"’

该文件仅为全球范围的SST数据,为期1个月(Jan2016)。当我将其转换为数组(即提取维度/变量,并将时间转换为UTC,将其插入数组)时,我不会得到相同的错误,但是光栅包表示它直接支持.nc文件(只要它们兼容cf-1,哪个时代-临时的..nc是)

任何帮助非常感谢,已经尝试了与许多Netcdf文件(非时代过渡)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-06 02:26:08

感谢勒诺·兰斯洛特,他们给出了清晰的源代码。我已经修改了他的代码以符合你的数据

代码语言:javascript
复制
 # load package
 library(sp)
 library(raster)
 library(ncdf4)

 # read ncdf file
 nc<-nc_open('D:/SSTs.nc')

 # extract variable name, size and dimension
 v <- nc$var[[1]]
 size <- v$varsize
 dims <- v$ndims
 nt <- size[dims]              # length of time dimension
 lat <- nc$dim$latitude$vals   # latitude position
 lon <- nc$dim$longitude$vals  # longitude position

 # read sst variable
 r<-list()
 for (i in 1:nt) {
   start <- rep(1,dims)     # begin with start=(1,1,...,1)
   start[dims] <- i             # change to start=(1,1,...,i) to read    timestep i
   count <- size                # begin with count=(nx,ny,...,nt), reads entire var
   count[dims] <- 1             # change to count=(nx,ny,...,1) to read 1 tstep

   dt<-ncvar_get(nc, varid = 'sst', start = start, count = count)

   # convert to raster
   r[i]<-raster(dt)
 }

 # create layer stack with time dimension
 r<-stack(r)

 # transpose the raster to have correct orientation
 rt<-t(r)
 extent(rt)<-extent(c(range(lon), range(lat)))

 # plot the result
 spplot(rt)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42982599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档