【问题标题】:How can I stack rasters that have nearly exactly the same extent in R如何堆叠在 R 中具有几乎完全相同范围的栅格
【发布时间】:2020-12-03 07:43:57
【问题描述】:

我正在尝试堆叠多波段栅格。它们是通过 ESA Sentinel 1 预处理工具 SNAP 创建的。每个 tif 文件都必须分层。

我加载了两个光栅堆栈并尝试将它们堆叠起来:

rs1 <- raster::stack("example/rs1.tif")
rs2 <- raster::stack("example/rs2.tif")
rsstack <- stack(rs1,rs2)

然后我收到以下错误消息:

compareRaster(x) 中的错误:不同程度

光栅堆栈的范围几乎相同:

> rs1
class      : RasterBrick 
dimensions : 2273, 2100, 4773300, 2  (nrow, ncol, ncell, nlayers)
resolution : 8.983153e-05, 8.983153e-05  (x, y)
extent     : 8.183134, 8.37178, 48.49076, 48.69495  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : S1A_IW_GRDH_1SDV_20180110T053421_20180110T053446_020088_0223E7_69E7_10.1, S1A_IW_GRDH_1SDV_20180110T053421_20180110T053446_020088_0223E7_69E7_10.2 
min values :                                                             1.729380e-07,                                                             1.077101e-06 
max values :                                                                 11.63158,                                                                109.76797 

> rs2
class      : RasterBrick 
dimensions : 2273, 2100, 4773300, 2  (nrow, ncol, ncell, nlayers)
resolution : 8.983153e-05, 8.983153e-05  (x, y)
extent     : 8.183171, 8.371817, 48.49071, 48.6949  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : S1A_IW_GRDH_1SDV_20180106T171534_20180106T171559_020037_02223E_CE2A_10.1, S1A_IW_GRDH_1SDV_20180106T171534_20180106T171559_020037_02223E_CE2A_10.2 
min values :                                                             8.244981e-08,                                                             5.691331e-06 
max values :                                                                 6.012002,                                                                64.965996 

如何将两者叠加在一起?如何调整范围到另一个?

我尝试了什么: 我也有一个感兴趣的领域。所以我尝试将两个堆栈裁剪到感兴趣的区域并尝试再次堆叠它们:

shp <- readOGR(dsn=path.expand(example/area.shp)))
shp <- sp::spTransform(shp, CRS(proj4string(rs[[1]]))) 
rs1 <- raster::crop(rs1,shp)
rs2 <- raster::crop(rs2,shp)
rsstack <- stack(rsstack,r2)

compareRaster(x) 中的错误:不同程度

shp
class       : SpatialPolygonsDataFrame 
features    : 16 
extent      : 8.183144, 8.371817, 48.49075, 48.69491  (xmin, xmax, ymin, ymax)
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 14
names       : fid,           Area,    BoundLen,         CentX,         CentY,       AreaIncI,  BoundNotIn,    CentXNotIn,    CentYNotIn,    PointInPol,    PointInPo1, CompactRat, CompactRa1, rast 
min values  :   1,     1440.64063,   168.67161, 3442255.57469, 5377418.66407,     1440.64063,   168.67161, 3442255.57469, 5377418.66407, 3442259.72286,  5377409.4208,    1.14669,    1.14669,    1 
max values  :  16, 76089100.06641, 89693.52095, 3451427.74745, 5393682.39749, 76858585.26953, 76662.07157, 3451427.74745, 5393682.39749, 3451416.96957, 5393687.75063,    2.57399,    2.90065,    1

有人有解决办法吗?

【问题讨论】:

    标签: r gis r-raster extent satellite-image


    【解决方案1】:

    我可以看到您的栅格具有相同的坐标系(crs : +proj=longlat +datum=WGS84 +no_defs),只是范围不同。首先,您可以裁剪它,然后您可以使用 raster 包中的 resample 函数,如

    library(raster)
    
    #Crop the raster
    rs1 <- raster::crop(rs1,shp)
    rs2 <- raster::crop(rs2,shp)
    
    #Conversion of rasters into same extent
    rs2_resampled <- resample(rs2, rs1, method='bilinear')
    
    #Stack the rasters
    rsstack <- stack(rs1,rs2_resampled)
    

    【讨论】:

      【解决方案2】:

      我猜这很容易实现。让我们试试吧:

      library(caret)
      
      setwd("Your File Path")
      # Open your reference Raster
      Reference_Raster <- list.files(paste(getwd()), pattern = "Reference.tif$")
      Reference_Raster <- raster(Reference_Raster)
      # Open the other raster
      Raster <- list.files(paste(getwd()), pattern = "Raster.tif$")
      Raster <- raster(Raster)
      
      # Now Let's Resample
      Raster <- resample(Raster , Reference_Raster, method = "ngb")
      
      # Let's Check the extent of both rasters, They are supposed to be the same.
      extent(Raster)
      extent(Reference_Raster)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多