从netcdf中提取特定经纬度的值

3
我正在尝试在R中读取一个netCDF文件。该netCDF文件名为chirps-v2.0.1981.days_p05.nc,可以从此处下载:

ftp://ftp.chg.ucsb.edu/pub/org/chg/products/CHIRPS-2.0/global_daily/netcdf/p05/

这个netCDF文件描述了全球每日降雨量与经度、纬度的关系,并且大小为1.1 GB。

我还有一组经纬度信息。

dat <- structure(list(locatioID = paste0('ID', 1:16), lon = c(73.73, 86, 73.45, 86.41, 85.36, 81.95, 82.57, 75.66, 82.03, 
                          81.73, 85.66, 85.31, 81.03, 81.70, 87.03, 73.38), 
                        lat = c(24.59, 20.08, 22.61, 23.33, 23.99, 19.09, 18.85, 15.25, 26.78, 
                          16.63, 25.98, 23.28, 24.5, 21.23, 25.08, 21.11)), 
                  row.names = c(1L, 3L, 5L, 8L, 11L, 14L, 17L, 18L, 19L, 21L, 
                              23L, 26L, 29L, 32L, 33L, 35L), class = "data.frame")

library(ncdf4)  
library(raster)
temp <- nc_open("chirps-v2.0.1981.days_p05.nc")

precip = list()
precip$x = ncvar_get(temp, "longitude")
precip$y = ncvar_get(temp, "latitude")
precip$z = ncvar_get(temp, "precip", start=c(1, 1, 1), count=c(-1, -1, 1))
precip.r = raster(precip)
plot(precip.r)

我有两个问题:

  • 有人能解释一下start和count参数是什么吗??ncvar_get让我感到困惑。如果我想创建一个儒略日为252的栅格,我需要改变哪个参数?

  • 如何提取dat中每个纬度经度的365天的每日降雨量值,以便我有一个16 * 365天的矩阵/数据框?

1个回答

2
您可以使用以下代码从.nc文件中提取数据。
dat <- structure(list(locatioID = paste0('ID', 1:16), lon = c(73.73, 86, 73.45, 86.41, 85.36, 81.95, 82.57, 75.66, 82.03, 
                                                              81.73, 85.66, 85.31, 81.03, 81.70, 87.03, 73.38), 
                      lat = c(24.59, 20.08, 22.61, 23.33, 23.99, 19.09, 18.85, 15.25, 26.78, 
                              16.63, 25.98, 23.28, 24.5, 21.23, 25.08, 21.11)), 
                 row.names = c(1L, 3L, 5L, 8L, 11L, 14L, 17L, 18L, 19L, 21L, 
                               23L, 26L, 29L, 32L, 33L, 35L), class = "data.frame")


temp <- brick("chirps-v2.0.1981.days_p05.nc")

xy <- dat[,2:3] #Column 1 is longitude and column 2 is latitude
xy
spts <- SpatialPoints(xy, proj4string=CRS("+proj=longlat +datum=WGS84"))
#Extract data by spatial point
temp2 <- extract(temp, spts)
temp3 <- t(temp2) #transpose raster object
colnames(temp3) <- dat[,1] #It would be better if you have the location names corresponding to the points
head(temp3)
write.csv(temp3, "Rainfall.csv")

好的。我已经提供了位置ID。 - undefined
1
你尝试过这段代码吗?它对你有效吗?如果你要将ID放在第一列,那么把xy部分改为 xy <- dat[,2:3] - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接