1)定义tiff转csv的函数
from osgeo import gdal
import pandas as pd
import numpy as np
gdal.AllRegister()
def tifftocsv(path):
filePath = path
dataset = gdal.Open(filePath)
adfGeoTransform = dataset.GetGeoTransform()
nXSize = dataset.RasterXSize
nYSize = dataset.RasterYSize
im_data = dataset.ReadAsArray(0,0,nXSize,nYSize)
index = []
columns = []
for j in range(nYSize):
lat = adfGeoTransform[3] + j * adfGeoTransform[5]
index.append(lat)
for i in range(nXSize):
lon = adfGeoTransform[0] + i * adfGeoTransform[1]
columns.append(lon)
data = pd.DataFrame(im_data, index=index, columns=columns)
data_np=np.array(data)
data_np=data_np.reshape(5254,1)
data=pd.DataFrame(data_np)
return data
2)计算得到一个DataFrame(作为后续合并的基础文件)
aod_ab_num=6
for i in range(1,aod_ab_num+1):
AODpath='D:\\research\\5_AOD\\results\\AODresults\\nmf'+str(aod_ab_num)+'\\Abundance'+str(i)+'.tif'
AOD=tifftocsv(AODpath)
AOD.columns=['AOD'+str(i)]
if(i==1):
result=AOD
else:
frames=[result,AOD]
result = pd.concat(frames,axis=1)
3)批量计算其余所有的变量
VARlist=['NDVI','VOC','SO2','Precipitation','PM2.5','OC','NOX','LST','EVI','BC']
ab_num=6
for i in range(0,len(VARlist)):
var=str(VARlist[i])
print(var)
for j in range(1,ab_num+1):
VARpath='D:\\research\\5_AOD\\results\\'+var+'results\\nmf'+str(ab_num)+'\\Abundance'+str(j)+'.tif'
VAR=tifftocsv(VARpath)
VAR.columns=[var+str(j)]
frame=[result,VAR]
result=pd.concat(frame,axis=1)
result=result.fillna(0)