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

使用Rasterio合并重叠栅格时重叠区域出现NoData的问题

问题分析与解决方案

你的合并结果重叠区域显示NoData,核心问题出在NoData值的处理逻辑错误,同时代码存在一些潜在干扰项,以下是具体修正方案:

问题根源

  1. 反向的NoData替换逻辑:你当前代码是将值为-9999的像素替换为原栅格的NoData,而非将原栅格的NoData统一设置为-9999,导致rasterio.merge无法正确识别无效像素,合并时自然保留NoData。
  2. 目录遍历引入无关文件:使用path.iterdir()会读取/merged/下所有文件,包括后续生成的合并结果文件,可能干扰合并过程。
  3. 输出元数据未明确NoData:输出栅格时未指定NoData值,导致最终结果的NoData设置不匹配。

修正后的完整代码

import rasterio as rio
from rasterio.merge import merge
from pathlib import Path

# 明确指定要合并的栅格文件,避免混入无关文件
target_files = [
    "/merged/east_SSP1_2020_rent_hectare_filtered.tif",
    "/merged/north_SSP1_2020_rent_hectare_filtered.tif",
    "/merged/west_SSP1_2020_rent_hectare_filtered.tif",
    "/merged/south_SSP1_2020_rent_hectare_filtered.tif"
]
out_path = "/merged/merged_count.tif"

# 统一设置所有栅格的NoData为-9999
for filepath in target_files:
    with rio.open(filepath, "r+") as src:
        data = src.read(1)
        # 将原栅格的NoData值替换为-9999
        data[data == src.nodata] = -9999
        # 更新栅格的元数据,设置nodata为-9999
        src.nodata = -9999
        src.write(data, 1)
print("已将所有栅格的NoData统一设置为-9999")

# 加载要合并的栅格
raster_to_mosaic = [rio.open(fp) for fp in target_files]

# 执行合并,指定nodata为-9999
mosaic, output_transform = merge(raster_to_mosaic, method='first', nodata=-9999)

# 准备输出元数据
output_meta = raster_to_mosaic[0].meta.copy()
output_meta.update({
    "driver": "GTiff",
    "height": mosaic.shape[1],
    "width": mosaic.shape[2],
    "transform": output_transform,
    "nodata": -9999  # 明确指定输出的NoData值
})

# 写入合并结果
with rio.open(out_path, "w", **output_meta) as dst:
    dst.write(mosaic)

# 关闭所有打开的栅格文件
for raster in raster_to_mosaic:
    raster.close()

关键修正点说明

  • 明确目标文件列表:直接指定要合并的4个栅格,避免目录遍历引入无关文件(如已生成的合并文件)。
  • 正确的NoData替换:将原栅格中所有等于原NoData的像素替换为-9999,同时更新栅格元数据的nodata字段,确保rasterio.merge能正确识别无效像素。
  • 输出元数据指定NoData:在输出时明确设置nodata=-9999,保证最终结果的NoData值与合并时一致。
  • 手动关闭栅格文件:避免文件句柄泄漏,养成良好的资源管理习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:27:43