在使用Python GDAL将MODIS的HDF数据转换为tif之后,可使用Python中的ArcGIS Mosaic to New Raster工具来拼接多幅影像。或者也可继续使用GDAL 来拼接。数据文件名如:MOD11A2.A2000049.h23v04.006.2015058135050.tif
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 8 22:05:41 2019
@author: zoe
"""
import arcpy
import glob
import os
#指定影像所在目录
inws =r'E:\MOD11A2_LandSurfaceTem\2000_0208\try' #输入路径
outws = r'E:\MOD11A2_LandSurfaceTem\2000_0208\out' #输出路径
mask = r"E:\map\A_TLM_2\unionCopy2.prj" #投影文件,虽然在转换HDF为tif时已经重新投影过
#判断日期函数,由于MODIS数据文件是以年内天数命名,为了将其转为日期,并给镶嵌后的文件重新命名,如2001001变为2001_01_01
def out_date(year,day):
fir_day = datetime.datetime(year,1,1)
zone = datetime.timedelta(days=day-1)
return datetime.datetime.strftime(fir_day + zone, "%Y_%m_%d")
#利用glob包,将inws下的所有tif文件读存放到rasters中
rasters = glob.glob(os.path.join(inws, "*.tif"))
raser_list=[]
#循环rasters中的所有影像,进行按掩模提取操作
for ras in rasters:
info=os.path.basename(ras).split('.')[1]
if info[5:]=='049': #文件内属于当年某天的数据
#将栅格数据添加至列表
raser_list.append(ras)
print info
year_info=info[1:5]
days_info=info[5:]
print 'year%s,days%s'%(year_info,days_info)
#删除日期天数开头0
if days_info[0]=='0':
days=days_info.lstrip('0')
print days
#生成文件名日期
finame_1=out_date(int(year_info),int(days))
print finame_1
#完整文件名
outname=os.path.basename(ras).split('.')[0]+'1km_'+finame_1+'.tif'
print outname
try:
##Mosaic several TIFF images to a new TIFF image
arcpy.MosaicToNewRaster_management(raser_list,outws, outname, mask,\
"32_BIT_UNSIGNED", "", "1", "LAST","FIRST")
except:
print "Mosaic To New Raster example failed."
print arcpy.GetMessages()
print 'mosaic finish'
结果比较:
1 使用ArcGIS 拼接,白色为Nodata,与MRT拼接区别在于,直接将nodata范围的值设置了Nodata,而MRT拼接的好像还需要在ARCGIS中再设置,否则直接打开就是如图3一样
2 使用 Python 调用arcpy 拼接
3 使用MRT拼接