如何使用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
相关产品推荐
相关产品推荐

