You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拼接/合并相邻的两个RasterStack栅格地图?

问题描述

尝试合并两个相邻区域的Sentinel卫星RasterStack数据,已将坐标系设置为EPSG:3857,希望合并后在同一张图中展示。

使用的代码:

MergedMap<-merge(StackedBands1,StackedBands3,tolerance=0.05, filename="MergedMap",overlap=FALSE,ext=NULL,overwrite=TRUE)

其中StackedBands1为区域1的4个不同Sentinel波段图层,StackedBands3为区域2的4个不同Sentinel波段图层。

执行代码后生成了RasterBrick,但绘图时出现错误,同时有50条以上警告,具体报错信息如下:

MergedMap<-merge(StackedBands1,StackedBands3,tolerance=0.05,filename="MergedMap",overlap=FALSE,ext=NULL,overwrite=TRUE)
There were 50 or more warnings (use warnings() to see the first 50)

> plotRGB(MergedMap, r=4,g=3,b=2, axes = TRUE, stretch = "lin", main = "False Color Composite")
Error in if (x@file@nodatavalue < 0) { : 
  missing value where TRUE/FALSE needed

> warning(MergedMap)
Warning message:
brick(ncol=10980, nrow=10980, nl=4, xmn=0, xmx=10980, ymn=0, ymx=10980, crs='+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs') 

原本考虑用QGIS处理,但希望能在R中解决问题。请问是否需要修改栅格的范围?或者我的代码存在什么问题?


解决方案

从报错和警告来看,核心问题是合并后的栅格缺失NoData值定义,导致plotRGB进行逻辑判断时出现值缺失错误;而合并时的大量警告,大概率是两个栅格的对齐精度设置不合理导致的。可以按以下步骤修复:

  1. 检查并统一输入栅格的NoData值
    Sentinel数据默认NoData值一般为0或-9999,先确认两个RasterStack的NoData设置:

    # 查看两个栅格的NoData值
    StackedBands1@file@nodatavalue
    StackedBands3@file@nodatavalue
    

    如果其中某一个栅格未设置NoData,用setNA()统一配置:

    # 替换为你的实际NoData值,比如0
    StackedBands1 <- setNA(StackedBands1, value=0)
    StackedBands3 <- setNA(StackedBands3, value=0)
    
  2. 调整merge参数,优化栅格对齐与范围
    你设置的tolerance=0.05在EPSG:3857坐标系下仅为0.05米,精度过高会触发大量对齐警告。可以适当调大tolerance(比如1米,匹配Sentinel-2的分辨率精度),同时显式指定合并后的范围,避免默认范围异常:

    # 获取两个栅格的联合范围
    combined_ext <- extend(extent(StackedBands1), extent(StackedBands3))
    # 重新执行合并
    MergedMap <- merge(StackedBands1, StackedBands3, 
                       tolerance=1, 
                       filename="MergedMap",
                       overlap=FALSE,
                       ext=combined_ext,
                       overwrite=TRUE)
    
  3. 修复合并后栅格的NoData值
    如果合并后的MergedMap仍未定义NoData,手动设置或重新写入文件时指定:

    # 方法1:直接修改对象属性
    MergedMap@file@nodatavalue <- 0 # 对应你之前设置的NoData值
    
    # 方法2:重新写入文件并指定NA标记
    writeRaster(MergedMap, filename="MergedMap_fixed.tif", 
                overwrite=TRUE, 
                NAflag=0)
    # 读取修复后的文件
    MergedMap <- brick("MergedMap_fixed.tif")
    
  4. 验证并绘图
    先确认合并后栅格的信息是否正常:

    print(MergedMap)
    

    确认NoData值存在后,再执行绘图命令:

    plotRGB(MergedMap, r=4,g=3,b=2, axes=TRUE, stretch="lin", main="False Color Composite")
    

另外,合并前可以检查两个栅格的分辨率是否完全一致:

res(StackedBands1)
res(StackedBands3)

如果分辨率有细微差异,先用resample()统一分辨率后再合并。

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:13:30