下载了天尺度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 2 3 4 5
| library(ncdf4) library(raster) library(rgdal) study_area = "A:/my_research/Studyarea.shp" extent <- shapefile(study_area)
|
- 读取文件并拆分,循环写入
- 说明(可以自行输出中间过程文件查看):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边界形状裁剪?