Python遥感开发之解决TIF数据之间行列不一致的问题
- 1.问题如图所示
- 2.完整代码如下所示
前言:主要解决在同一分辨率的情况下,遥感数据之间行和列数据不一致的问题。
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)#可以自己指定文件目录