一、nc介绍
NC文件,全称为"NetCDF"(Network Common Data Form)文件格式,是一种用于存储科学数据的通用、二进制文件格式,它由国际气象组织(International Organization for Standardization,简称ISO)开发,并作为其OMNIC(Open Multi-Content Information Distribution Network Consortium)项目的一部分,NC文件格式广泛应用于气候科学、地球科学、大气科学等领域,以便在不同的软件和平台上共享和交换数据。
二、读取nc
2.1 基本性质读取
#nc_open 将数据读入我称为 nc_data 的数据结构中
nc_data <- brick('surfout_d03_2020-07-01_00_00_00')
which(names(nc_data)=="T2_1")
class(nc_data)
T2_variable <- nc_data$T2_1
#由于此NC文件没有坐标系,定义栅格文件的坐标系为WGS1984
crs(nc_data)="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
names(nc_data$attr)
#获取维度变量
names(nc_data$dim)
#读取变量的维度,三列分别为.nc格式地区的经度、纬度、和时间维度
print(dim(T2))#150 150 24
#看看缺失数据的填充值这里value=0
fillvalue <- ncatt_get(nc_data, "T2", "_FillValue")
fillvalue
#完成读入数据,关闭netCDF文件
nc_close(nc_data)
#用R标准的“NA”替换所有的填充值
nc_data[nc_data== fillvalue$value] <- NA
dim(T2)
#保留第三维度第一个时间的数据
Time1 =T2[,,1]
dim(Time1)#150 150
View(T2)
#转成栅格数据
nc_data.variables
r <- raster((Time1), 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"))
# 大多数netCDF文件都从左下角记录空间数据,需要转置和翻转以正确定位数据
r <- flip(r, direction='y')
R语言处理气象数据:NetCDF格式数据的读写
ncdf4 | netCDF数据格式处理工具包(1):数据读取和查询
R语言netcdf格式数据读取与处理
2.2 nc转tif
2.2.1 R语言
(1)
library(raster)
tmpbr <- brick("cru_ts4.04.2001.2010.tmp.dat.nc", varname="tmp")
writeRaster(tmpbr, filename = tmpbr@data@names, bylayer=T, format="GTiff")
(2)
#读取单变量长时间序列nc数据
ncfile<-nc_open("surfout_d03_2020-07-01_00_00_00")
names(ncfile$var)
input_nc = 'surfout_d03_2020-07-01_00_00_00'
varname = 'T2'
raster1 = stack(input_nc, varname = varname)
#设置输出路径名
outpath<-"../../output/test/"
##为文件名设置做准备
x1<-c(1:24)
x2<-paste("2020_7_0_",x1,sep = "")
out_filename<-sapply(x2, function(x)paste(x,".tif",sep = "")) #输出tif格式
out_path<-sapply(out_filename, function(x){
paste(outpath,x,sep = "/")}) #输出路径名
#批量输出
for(i in 1:24){
writeRaster(raster1[[i]],out_path[i], format = 'GTiff', overwrite = T)
}
2.2.2 panoply
提取站点信息
根据经纬度利用R语言批量提取NC文件数据
R-如何在NC时间堆叠数据集中根据坐标提取数据并展示其趋势
经纬度和属性合并
library(ncdf4)
# 导入数据
nc <- nc_open("file_1.nc")
lonlat <- nc_open("file_2.nc")
# 经纬度和属性合并
Var <- ncvar_get(nc, "Var")[,,1]
LAT <- ncvar_get(lonlat, "LAT")
LON <- ncvar_get(lonlat, "LON")
data <- data.frame(var = c(Var),
lat = c(LAT),
lon = c(LON))
ata_sf <- st_as_sf(data, crs = 4326,
coords = c(x = "lon", y = "lat"))
栅格的属性数据和经纬度是分开的两个文件,将它们整合到同一个文件