一个modis遥感影像批量镶嵌的小方法

2020-09-15 12:34:16 浏览数 (1)

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)

镶嵌前

镶嵌后

0 人点赞