Python遥感开发之解决TIF数据之间行列不一致的问题

Python遥感开发之解决TIF数据之间行列不一致的问题


前言:主要解决在同一分辨率的情况下,遥感数据之间行和列数据不一致的问题。


1.问题如图所示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们发现这两个TIF的分辨率是一样的,都是0.01x0.01,但是tasmax数据比lucc多出一个行和列,我们通过对比发现是多出了第一行和最后一列,只需要把tasmax的数据的第一行和最后一列删除即可。可以使用这两行代码解决问题。

data = np.delete(data, 0, axis=0)#行
data = np.delete(data, 554, axis=1)#列

2.完整代码如下所示

import os

import numpy as np
from osgeo import gdal, gdalnumeric

def read_tif02(filepath):
    data = gdalnumeric.LoadFile(filepath)
    data = data.astype(np.float32)
    a = data[0][0]
    data[data == a] = np.nan
    return data


def save_tif(data, file, output):
    ds = gdal.Open(file)
    shape = data.shape
    driver = gdal.GetDriverByName("GTiff")
    dataset = driver.Create(output, shape[1], shape[0], 1, gdal.GDT_Float32)#以float类型进行存储
    dataset.SetGeoTransform(ds.GetGeoTransform())
    dataset.SetProjection(ds.GetProjection())
    dataset.GetRasterBand(1).WriteArray(data)

def get_data_list(file_path, out = ""):
    list1 = []  # 文件的完整路径
    if os.path.isdir(file_path):
        fileList = os.listdir(file_path)
        if out != "":
            for f in fileList:
                out_data = out + "\\" + f
                list1.append(out_data)
        else:
            for f in fileList:
                pre_data = file_path + '\\' + f  # 文件的完整路径
                list1.append(pre_data)
        return list1

if __name__ == '__main__':
    file_in_list = get_data_list(r"E:\AAWORK\work\yu\tasmax")
    file_out_list = get_data_list(r"E:\AAWORK\work\yu\tasmax",r"E:\AAWORK\work\yu\tasmax01")

    for file_in, file_out in zip(file_in_list,file_out_list):
        print(file_in)
        print(file_out)
        data = read_tif02(file_in)
        print(data.shape)
        data = np.delete(data, 0, axis=0)#行
        data = np.delete(data, 554, axis=1)#列
        print(data.shape)
        # 生成新的tif
        save_tif(data,file_in,file_out)#可以自己指定文件目录

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等待着冬天的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值