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

如何使用Rasterio保存含坐标系信息的栅格数据?代码修改求助

解决Rasterio保存栅格丢失坐标系的问题

你的代码丢失坐标系的原因可能是处理后的数据维度(通道数、宽/高)与原文件不一致,导致meta中的参数不匹配,进而影响元数据写入,或者在部分Rasterio版本中,meta.copy()未能完整保留坐标系信息。以下是修改后的代码:

for i in range(len(file_names)):
    file_name = file_names[i]
    image = process_tif(file_name)
    with rasterio.open(file_name) as src:
        # 复制原文件元数据
        meta = src.meta.copy()
        # 更新元数据以匹配处理后的数据
        # 处理后图像维度为 (高度, 宽度, 通道数),转置后为 (通道数, 高度, 宽度)
        meta['count'] = image.shape[2]
        meta['height'] = image.shape[0]
        meta['width'] = image.shape[1]
        # 显式保留原文件坐标系,确保不会丢失
        meta['crs'] = src.crs
    # 使用动态文件名避免循环中覆盖文件
    output_file = f"new_file_{i}.tif"
    with rasterio.open(output_file, 'w', **meta) as dst:
        dst.write(image.transpose((2,0,1)))

关键修改点说明:

  • 更新元数据参数:如果process_tif修改了图像的通道数、宽度或高度,必须同步更新meta中的count、width、height,否则写入时会因参数不匹配导致元数据(包括坐标系)无法正确写入。
  • 显式保留坐标系:直接从原文件src中获取crs并赋值给meta,避免因版本兼容问题导致meta.copy()未能完整保留坐标系信息。
  • 动态输出文件名:原代码中固定的new_file_name.tif会在循环中被多次覆盖,改为带索引的动态文件名确保每个输入文件对应一个输出文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:30:31