如何更改R中栅格图层的分辨率

NRP*_*NRP 10 r resolution raster utm

我在R中使用了几个高分辨率栅格图层.对于我正在运行的一些分析,细节水平过高,因此我希望通过降低分辨率来加快速度.

坐标系是UTM,因此单位是米.决议说它是30,30(x,y).所以这里的分辨率似乎是30米.

有人可以告诉我如何将分辨率改为120米吗?我已经阅读了resample()和projectRaster()函数的帮助,但它们似乎需要一个具有所需分辨率的模板栅格,这是我没有的.

以下是我的一个栅格图层的示例:

alt.utm
类:RasterLayer
尺寸:4572,2495,11407140(nrow,ncol,ncell)
分辨率:30,30(x,y)
范围:421661,496511,4402939,4540099(xmin,xmax,ymin,ymax)
coord.REF.:+ proj = utm + zone = 13 + ellps = GRS80 + towgs84 = 0,0,0,0,0,0,0 + units = m + no_defs
数据源:在内存
名称中:图层
值:1485.127,4275.202(分钟,最大)

jhh*_*ams 26

您可以使用聚合分解.

library(raster)

#get some sample data
data(meuse.grid)
gridded(meuse.grid) <- ~x+y
meuse.raster <- raster(meuse.grid)
res(meuse.raster)
#[1] 40 40

#aggregate from 40x40 resolution to 120x120 (factor = 3)
meuse.raster.aggregate <- aggregate(meuse.raster, fact=3)
res(meuse.raster.aggregate)
#[1] 120 120

#disaggregate from 40x40 resolution to 10x10 (factor = 4)
meuse.raster.disaggregate <- disaggregate(meuse.raster, fact=4)
res(meuse.raster.disaggregate)
#[1] 10 10
Run Code Online (Sandbox Code Playgroud)


Rob*_*ans 13

这些天我们可以使用terra,替换raster

示例数据

library(terra)
f <- system.file("ex/elev.tif", package="terra")
r <- rast(f)
Run Code Online (Sandbox Code Playgroud)

聚合栅格单元。从 30 到 120m 的距离是 4 倍

a1 <- aggregate(r, 4)
Run Code Online (Sandbox Code Playgroud)

您可以对行和列使用不同的因子,也可以使用不同的聚合函数(默认为“平均值”)

a2 <- aggregate(r, c(2,3), fun=sum)
Run Code Online (Sandbox Code Playgroud)

您也可以采取另一种方式进行分解:

d <- disagg(a2, 2)
Run Code Online (Sandbox Code Playgroud)

聚合只能组合整个细胞。但要组合来自不同源的栅格数据,您可能需要匹配未对齐的栅格的几何形状。在这种情况下你可以使用resample

不对齐的示例SpatRaster

x <- rast(r)
res(x) <- 0.01
Run Code Online (Sandbox Code Playgroud)

解决方案

x <- resample(r, x)
Run Code Online (Sandbox Code Playgroud)

您也可能希望将栅格数据转换为具有另一个坐标参考系统(“地图投影”)的几何图形。你可以这样做:

u1 <- project(r, "+proj=utm +zone=32")
Run Code Online (Sandbox Code Playgroud)

但是,与矢量数据不同,栅格数据的转换没有明确定义。因此,首选方法是提供一个您希望输出与之对齐的模板。这通常是SpatRaster您已经从其他数据源获得的数据。但在这里我创建了一个示例:

temp <- rast(xmin=264000, xmax=324000, ymin=5479000, ymax=5565000, res=100, crs="+proj=utm +zone=32")
Run Code Online (Sandbox Code Playgroud)

现在使用它

u2 <- project(r, temp)
Run Code Online (Sandbox Code Playgroud)

进一步阅读


nor*_*ega 8

我尝试了 3 种不同的选项来放大 DEM 文件。首先我gdal_translate是这样使用的:

from CMD:
gdal_translate -tr 0.1 0.1 "C:\dem.tif" "C:\dem_0.1.tif"
Run Code Online (Sandbox Code Playgroud)

在 R 中:

res(raster('C:\dem_0.1.tif')
[1] 0.1 0.1
Run Code Online (Sandbox Code Playgroud)

然后我尝试了R 中包中的aggregateresample命令raster

#
r <- raster("dem.tif")
> res(r)
[1] 0.0002777778 0.0002777778 # original dem resolution
#
r_up_0.1 <- aggregate(r, fact = 0.1/res(r)) # aggregate output
> res(r_up_0.1)
[1] 0.1 0.1
#
s <- raster(nrow = 10, ncol = 10)
extent(s) <- extent(r)
s <- resample(r, s, method = 'bilinear') # resample output
> res(s)
[1] 0.1000278 0.1000278
Run Code Online (Sandbox Code Playgroud)

这些是输出: 3 个输出被放大为 a res = 0.1x0.1,它们之间存在一些差异,但我打算使用 gdal 输出。

希望这可以帮助。


use*_*042 5

以下是如何执行此操作的示例。(原文链接)

  #########################################################################
# SubsampleImageRaster.r
#  
# This function demonstrates resampling of raster images to a new
# spatial resolution using the R raster package.
# 
# Author: Rick Reeves
# Date created: 6-October- 2010
# Date modified:                                                             
# NCEAS
#
#########################################################################
#
SubsampleImageRaster <- function()
{
   library(raster)

   sOutFile <- ""
   resampleFactor <- 4  # For test, subsample incoming image by factor of 10

# Read the mosaic components, stored in a subfolder, into a raster object list.
# Within the same loop, obtain the (geographic) extent of each component.
# Note: these images do not have same spatial extent, so they cant be stored
# in a rasterStack. Instead, use a list of rasterLayers.

   setwd("./ForUseCase")
   inFiles <- list.files(pattern="*.tif")
   nFiles <-  length(inFiles)
   inputRaster <- raster()
   CoarseResampRaster <- raster()   
   FineResampRaster <- raster()   
   for (iCtr in 1 : nFiles)
   {
      message(sprintf("resampling file: %s",inFiles[iCtr]))
      inputRaster <- raster(inFiles[iCtr])

# The aggregate() / disaggregate methods resample rasters to COARSER (bigger cells)
# and FINER (smaller cells) resolutions, respectively

      CoarseResampRaster <- aggregate(inputRaster,fact=resampleFactor,fun=mean) 
      sOutFile <- sprintf("CoarseSubsamp%s",inFiles[iCtr]) 
      writeRaster(CoarseResampRaster,filename=sOutFile,format="GTiff",datatype="INT1U",overwrite=TRUE)      
      FineResampRaster <- disaggregate(inputRaster,fact=resampleFactor,fun=mean) 
      sOutFile <- sprintf("FineSubsamp%s",inFiles[iCtr]) 
      writeRaster(FineResampRaster,filename=sOutFile,format="GTiff",datatype="INT1U",overwrite=TRUE)            
   }   

   message("resample demo")
   browser()

# second method: use the resample() method from raster package

# Simple example:
# This code produces a resampled raster, 's',
# with correct resampled values. e.g.; 
# s[] prints a vector of resampled cell values.

   r <- raster(nrow=3, ncol=3)
   r[] <- 1:ncell(r)
   s <- raster(nrow=10, ncol=10)
   s <- resample(r, s, method='bilinear')

# Useful example:
# Resample a satellite image, stored in a GeoTiff file
# into a NEW raster with 2x spatial resolution in 
# both dimensions (four times the number of cells)
# Here is the technique: 
#  1) Create a new raster object with the correct 'resampled' number of cells.
#  2) Set the extent (geographic 'bounding box') of the new raster 
#     to the extent of the original raster
#  3) Generate the resampled raster.

   resampleFactor <- .5  # reduce the cell size by 50% and double the number of rows and columns.      
   inputRaster <- raster("TmB50MosaicImg1.tif")      
   inCols <- ncol(inputRaster)
   inRows <- nrow(inputRaster)
   resampledRaster <- raster(ncol=(inCols / resampleFactor), nrow=(inRows / resampleFactor))
   extent(resampledRaster) <- extent(inputRaster)

# The resample method will write the resampled raster image to a NEW disk file..

   resampledRaster <- resample(inputRaster,resampledRaster,datatype="INT1U",method='bilinear',filename="testOutResamp.tif",overwrite=TRUE)

# Or, use writeRaster method to create the output file.

   writeRaster(resampledRaster,filename="ResampleProduct.tif",format="GTiff",datatype="INT1U",overwrite=TRUE)   


# end
}
Run Code Online (Sandbox Code Playgroud)