mod/myd04_3k的数据有个不好的地方,动态的过境情况,如果你要批量镶嵌一个区域里的影像,有个小问题,他们的数量是不确定的。例如我的范围
大约是中国大陆的1/4,有时候可能一天有4景,有时候可能是5景。
废话不多说吧,问题出现了,然后就是解决办法。
前几期有提到如何把HDF文件转为wgs的tif,所以这部分就不重述了。
直接来:
import subprocess
subprocess.call('D:/Anaconda3/python.exe' ' ' 'gdal_merge.py ' '-of GTiff ' '-o D:/minxinan/merge3.tif ' 'D:/Thesis/aodrepair/wgsmod04tif/MOD04_3K.A2018001.0140.061.2018003202505.hdf.tif ' 'D:/Thesis/aodrepair/wgsmod04tif/MOD04_3K.A2018001.0315.061.2018003202246.hdf.tif ' 'D:/Thesis/aodrepair/wgsmod04tif/MOD04_3K.A2018001.0320.061.2018003202214.hdf.tif ' 'D:/Thesis/aodrepair/wgsmod04tif/MOD04_3K.A2018001.0455.061.2018003202451.hdf.tif')
'''
D:/Anaconda3/python.exe gdal_merge.py -of GTiff -o D:/minxinan/merge.tif C:/pytemp/modismosictemp/modis3kre/MOD04_3K.A2018278.0335.061.2018282175910.hdf.tif.tif C:/pytemp/modismosictemp/modis3kre/MOD04_3K.A2018278.0340.061.2018282175739.hdf.tif.tif
'''
def merge4(inp1,inp2,inp3,inp4,oup):
subprocess.call('D:/Anaconda3/python.exe' ' ' 'gdal_merge.py ' '-of GTiff ' '-o ' str(oup) ' ' str(inp1) ' ' str(inp2) ' ' str(inp3) ' ' str(inp4))
def merge5(inp1,inp2,inp3,inp4,inp5,oup):
subprocess.call('D:/Anaconda3/python.exe' ' ' 'gdal_merge.py ' '-of GTiff ' '-o ' str(oup) ' ' str(inp1) ' ' str(inp2) ' ' str(inp3) ' ' str(inp4) ' ' str(inp5))
###这是mod04的合并
import os
files=os.listdir('D:/Thesis/aodrepair/wgsmod04tif')
path='D:/Thesis/aodrepair/wgsmod04tif'
outpath='D:/Thesis/aodrepair/wgsmod04tifmerge'
namefiles=[]
for i in files:
namefiles.append(i[10:17])###把同一天的标识取出
name=pd.Series(namefiles)
namenum=name.value_counts()##唯一值频数
nameuni=name.unique()###获得同一天的频数标识,如果后续有其他的话还要取最大值和最小值,同时def函数要新增不同的数目
for iname in nameuni:
templist=[]
ouptemp=outpath '/' iname '.tif'
for flist in files:
if flist[10:17]==iname:
templist.append(path '/' flist)
if len(templist)<5:
merge4(templist[0],templist[1],templist[2],templist[3],ouptemp)
else:
merge5(templist[0],templist[1],templist[2],templist[3],templist[4],ouptemp)
###这是myd04的合并
files=os.listdir('D:/Thesis/aodrepair/wgsmyd04tif')
path='D:/Thesis/aodrepair/wgsmyd04tif'
outpath='D:/Thesis/aodrepair/wgsmyd04tifmerge'###还好myd和mod一样频数都是4和5
namefiles=[]
for i in files:
namefiles.append(i[10:17])###把同一天的标识取出
name=pd.Series(namefiles)
namenum=name.value_counts()##唯一值频数
nameuni=name.unique()###获得同一天的频数标识,如果后续有其他的话还要取最大值和最小值,同时def函数要新增不同的数目
for iname in nameuni:
templist=[]
ouptemp=outpath '/' iname '.tif'
for flist in files:
if flist[10:17]==iname:
templist.append(path '/' flist)
if len(templist)<5:
merge4(templist[0],templist[1],templist[2],templist[3],ouptemp)
else:
merge5(templist[0],templist[1],templist[2],templist[3],templist[4],ouptemp)
镶嵌前
镶嵌后