矢栅处理(5):R语言nc转多张Geotif

下载了天尺度1km格网的中国区域的温度数据,nc文件格式,需要先裁剪并输出为tif以便后续的提取工作,在Python里折腾老半天不得劲,最后用R语言完成

这几天的数据处理工作让我感觉Python对于栅格数据的支持不够友好,而且性能捉急,往后类似的工作尽量上手R语言做,R语言对栅格处理友好且速度更快

安装

1
2
3
install.packages("ncdf4")
install.packages("raster")
install.packages("rgdal")

文档查看:raster 包API文档rgdal

nc写tif

  1. 基于研究区裁剪数据
1
2
3
4
5
library(ncdf4)
library(raster)
library(rgdal)
study_area = "A:/my_research/Studyarea.shp"
extent <- shapefile(study_area)
  1. 读取文件并拆分,循环写入
  2. 说明(可以自行输出中间过程文件查看):ncbr输出即为读入的nc文件,包含其数据的维度及名称等等,自行查看
1
2
3
4
5
6
7
8
9
10
11
outdir = "E:/Datasets/temp/tif/prep/"
ncfile = "E:/Datasets/temp/China_1km_prep_2017.nc"
ncbr = brick(ncfile,varname = "prep",lvar=4)

filenames = paste0(outdir,ncbr@data@names,".tif")
nlayers = length(filenames)
for(i in 1:nlayers){
r = ncbr[[i]] #取一个图层
rc = crop(r,shp) # 范围筛选
writeRaster(rc, filenames[i], bylayer=TRUE, format = "GTiff",overwrite = TRUE,options="COMPRESS=LZW",NAflag=-1)
}

不过貌似不能直接按照shapefile边界形状裁剪?