在两个栅格对象R之间复制元数据

时间:2016-03-15 18:30:47

标签: r metadata raster

我有两个geotiff光栅文件,一个包含所有元数据信息,另一个元数据信息丢失。我知道所有元数据信息都完全相同,所以我想将它从一个文件复制到另一个文件。我试图使用栅格,因为我在R中进行了所有处理。

这是包含元数据的文件

af1_patch <-raster(a_files[6])

af1_patch

class       : RasterLayer 
dimensions  : 38400, 38400, 1474560000  (nrow, ncol, ncell)
resolution  : 231.656, 231.656  (x, y)
extent      : -2223901, 6671703, -4447802, 4447802  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs 
data source : Forest_patches_AF_1.tif 
names       : Forest_patches_AF_1
values      : 0, 255  (min, max)

这是没有元数据的文件

af1_area <-raster(a_files[1])

af1_area

class       : RasterLayer 
dimensions  : 38400, 38400, 1474560000  (nrow, ncol, ncell)
resolution  : 1, 1  (x, y)
extent      : 0, 38400, 0, 38400  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : africa_AF_1.tif 
names       : africa_AF_1 
values      : 0, 255  (min, max)

我尝试使用以下方法复制元数据:

res(af1_area) <- res(af1_patch)
crs(af1_area) <- crs(af1_patch)
extent(af1_area) <- extent(af1_patch)

但它不起作用,尺寸和分辨率不正确且数据值丢失:

af1_area

class       : RasterLayer 
dimensions  : 166, 166, 27556  (nrow, ncol, ncell)
resolution  : 53588, 53588  (x, y)
extent      : -2223901, 6671703, -4447802, 4447802  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs 


 hist(af1_area)

   Error in .hist1(x, maxpixels = maxpixels, main = main, plot = plot, ...) : 
   cannot make a histogram; need data on disk or in memory

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为这是因为您在更改范围之前更改分辨率,因此,范围受您分配给它的分辨率的约束。我能够重现您的问题并通过更改流程的顺序来解决它。希望它适合你!

library(raster)
x <- raster(matrix(1:10))
proj4string(x) <- CRS("+proj=longlat")
extent(x) <- extent(-10,10,-10,10)

y <- raster(matrix(1:10))
z <- raster(matrix(1:10))

#Current Process
res(y) <- res(x)
crs(y) <- crs(x)
extent(y) <- extent(x)

#Working Process
extent(z) <- extent(x)
res(z) <- res(x)
crs(z) <- crs(x)

输出:

> x
class       : RasterLayer 
dimensions  : 10, 1, 10  (nrow, ncol, ncell)
resolution  : 20, 2  (x, y)
extent      : -10, 10, -10, 10  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
data source : in memory
names       : layer 
values      : 1, 10  (min, max)

> y
class       : RasterLayer 
dimensions  : 1, 1, 1  (nrow, ncol, ncell)
resolution  : 20, 20  (x, y)
extent      : -10, 10, -10, 10  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 

> z
class       : RasterLayer 
dimensions  : 10, 1, 10  (nrow, ncol, ncell)
resolution  : 20, 2  (x, y)
extent      : -10, 10, -10, 10  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
data source : in memory
names       : layer 
values      : 1, 10  (min, max)

答案 1 :(得分:0)

我只是重新分配将保留元数据的值,并重新写入文件:

af1_patch <-raster(a_files[6])
af1_area <-raster(a_files[1])

af1_patch[] <- af1_area[]
#writeRaster(af1_patch, a_files[1], ...)