簡體   English   中英

在兩個柵格對象R之間復制元數據

[英]Copy metadata between two raster objects R

我有兩個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

謝謝!

我認為之所以會這樣,是因為您在更改范圍之前先更改了分辨率,因為這樣,范圍受您為其分配的分辨率的約束。 通過更改流程順序,我能夠重現您的問題並解決問題。 希望這對你有用!

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)

我只是重新分配將保留元數據的值,然后重新寫入文件:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM