michunrong123的个人博客分享 http://blog.sciencenet.cn/u/michunrong123

博文

R 如何将NetCDF (nc)格式数据分层转存为asc格式

已有 9660 次阅读 2016-4-16 23:13 |个人分类:科研软件|系统分类:科研笔记| 编程, 数据处理, NetCDF, nc格式

######################################################            

#  This script is used R to read netcdf data        

#           and export to asc            

#              Author: Mcr                                  

#######################################################

#nc多层数据没能在GIS中打开,将nc转存为多个asc后可以使用。


rm(list=ls())

library(RNetCDF)
library(raster)
library(ncdf4)

library(lattice)


setwd("...") #设定nc数据所在位置路径


my.data<-open.nc("TH33.nc", write=FALSE)   #打开nc文件

print.nc(my.data)               #查看内部属性


#lon<-var.get.nc(my.data, "lon") #定义经度
#n.longitudes <- length(var.get.nc(my.data,"lon"))#经度单元格个数
lat<-var.get.nc(my.data, "lat") #定义纬度
#n.latitudes  <- length(var.get.nc(my.data, "lat"))#纬度单元格个数
#my.depth<-var.get.nc(my.data,"depth")  #深度, 第三变量
#n.depth <- trunc(length(my.depth))

#n.depth


r <- raster(ncol=7560, nrow=4320,xmn=73, xmx=136, ymn=18, ymx=54)

#建立一个空栅格图,7560列,4320行,经度73-136,纬度18-54


##=================读取输出第1层===================================##

TH33_01_tmp<-var.get.nc(my.data,"TH33",c(1,1,1),c(7560,4320,1))#读取第一层文件

#☆c(1,1,1) 表示c(读取nc栅格图起始单元格的行位置,读取nc栅格图起始单元格的列位置,读取nc栅格图

#起始单元格的层位置)

#☆c(7560,4320,1) 表示c(读取nc栅格图单元格总行数,读取nc栅格图单元格总列数,读取nc栅格图层数)


TH33_01_tmp<-TH33_01_tmp[,4320:1] #将列顺序倒置,这与输出图的方向有关。

values(r)<-as.vector(TH33_01_tmp) #将数据读并存储到刚才建立的r栅格图中

plot(r,asp=1) #展示r, 注意图的方向


TH33_01<-as.data.frame(r) #将r栅格内数据转为data.frame

TH33_01[is.na(TH33_01)]=-9999 #将NA替换为-9999,要不然asc数据读入到GIS会出错。


fileCon<-('TH33_01.asc')  #最终输出asc文件的文件名

writeLines('ncolstt7560nnrowstt4320tnxllcornert73.00417nyllcornert18.00417ncellsizet0.00833nNODATA_valuet-9999', fileCon)

#为要输出的asc文件写上表头,包括列数,行数,起始经度纬度,分辨率和空值数据用-9999表示。


write.table(TH33_01,'TH33_01.asc',append=TRUE,sep=" ",row.names=FALSE,col.names=FALSE)


#文中代码只输出了七层数据得第一层数据,第i层用c(1,1,i),c(7560,4320,1)。

#输出范围可以通过行列数进行调整,而相应的经纬度也需要调整。


###文中会有纰漏,请见谅指正。



https://blog.sciencenet.cn/blog-704337-970603.html

上一篇:最小二乘法线性回归拟合——R软件
下一篇:如何计算多个方位角(Cardinal direction)的均值--R
收藏 IP: 159.226.111.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-29 09:57

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部