kgu*_*uay 16 r raster netcdf geotiff
我有一个光栅堆栈,stk由R中的三个光栅图像组成.这是一个简单的例子
# set up a raster stack with three layers
> library(raster)
> r <- raster(nrows=10,ncols=10)
> r[] <- rnorm(100)
> stk <- stack(r,r,r)
# layer names are set by default
> names(stk)
[1] "layer.1" "layer.2" "layer.3"
Run Code Online (Sandbox Code Playgroud)
我为栅格图层指定了名称:
# set layer names to "one", "two" and "three"
> names(stk) <- c('one','two','three')
> names(stk)
[1] "one" "two" "three"
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令将RasterStack写入GeoTiff(多层)时:
writeRaster(stk,"myStack.tif", format="GTiff")
Run Code Online (Sandbox Code Playgroud)
根据文件名重命名图层(见> names(stk)下文).
当我读入光栅堆栈时:
> stk <- stack("myStack.tif")
# the layer names have been set automatically based on the filename
# they should be "one", "two" and "three"
> names(stk)
[1] "myStack.1" "myStack.2" "myStack.3"
Run Code Online (Sandbox Code Playgroud)
在R中编写RasterStacks时,您知道如何保留图层名称吗?我曾尝试将堆栈写入GeoTIFF和NetCDF格式.
谢谢,凯文
Ser*_*gio 13
如果将堆栈转换为包rast中的对象,则会保留名称terra
然后您可以使用 raster::writeRaster 或 terra::writeRaster,无论哪种方式,名称都会保留!
library(terra)
x <- rast(stk)
terra::writeRaster(x, "file.tif")
y <- raster::brick("file.tif")
#y <- terra::rast("file.tif")
#y <- stars::read_stars("file.tif")
names(y)
Run Code Online (Sandbox Code Playgroud)
library(stars)
x <- st_as_stars(stk)
write_stars(x, "file2.tif")
y <- raster::brick("file2.tif")
#y <- terra::rast("file2.tif")
#y <- stars::read_stars("file2.tif")
names(y)
Run Code Online (Sandbox Code Playgroud)
您可以使用本机栅格格式:
myRaster <- writeRaster(stk,"myStack.grd", format="raster")
Run Code Online (Sandbox Code Playgroud)
栅格网格格式由二进制.gri文件和.grd头文件组成.这将保留您的图层名称.但请注意,.gri二进制文件未压缩.
如果您需要在其他程序中打开raster grd文件,则很可能需要编写其他头文件.我通常使用ENVI标头格式来做到这一点.
hdr(myRaster, format = "ENVI")
Run Code Online (Sandbox Code Playgroud)
例如,要从qgis打开文件,您将选择.gri文件(二进制文件),它应该可以工作.
有点晚了,但可能会帮助其他人寻找可能的解决方案:
writeRaster(stk, filename=names(stk), bylayer=TRUE,format="GTiff")
Run Code Online (Sandbox Code Playgroud)