ArcGIS Python实现Modis NDVI批量化月最大合成
2015年11月6日
转自:http://blog.csdn.net/lucky51222/article/details/38922853
最大合成法(MVC)可以在Envi中的Band Math中进行,式子是B1>B2,但是无法批量化;本文实现在ArcGIS中利用Python代码批量进行,如下:
用到的Modis NDVI数据是在MRT中进行拼接与转投影后的月数据,一个月有两期,数据格式是.tif,文件名的格式如:20040101.1_km_16_days_NDVI.tif,20040102.1_km_16_days_NDVI.tif代表2004年1月份的两期数据。本次处理的为2004-2013年的10年的数据。
Python代码如下:
import arcpy
import time
arcpy.CheckOutExtension("spatial")
time1=time.strftime('%y-%m-%d-%H:%M:%S')
Sname1="F:\\Modis_16\\1Moasic\\"
Sname2=".1_km_16_days_NDVI.tif"
for i in range(2004,2014):
for j in range(1,13):
if j>9:
Year= str(i)+str(j)+"0"
else:
Year= str(i)+"0"+str(j)+"0"
print Sname1+Year+"1"+Sname2
print Sname1+Year+"2"+Sname2
out="F:\\Modis_16\\2MVC\\"+Year[0:6]
print out +" is being ........."
arcpy.gp.CellStatistics_sa((Sname1+Year+"1"+Sname2,Sname1+Year+"2"+Sname2) ,out, "MAXIMUM", "DATA")
print out +" has done.........."
print "-------------------------------------------------------"
print "<----------All are done !!!---------->"
print "Start time : "+time1
print "End time : "+time.strftime('%y-%m-%d-%H:%M:%S')
领悟:本次处理的核心部分是拼凑文件名字符串。
自己注释:
import arcpy
import time
arcpy.CheckOutExtension("spatial")
time1 = time.strftime('%y-%m-%d-%H:%M:%S') #只是为了用来输出数据处理所用时间
Sname1 = "E:\\test\\divide\\div_" #工作路径和前面共同的名字字段
for i in range(1984,2007): #末尾数要比实际大1
for j in range(1,13):
if j>9:
Year= str(i)+str(j) #处理大于九月份的
else:
Year= str(i)+"0"+str(j) #处理小于十月份的
print Sname1+Year+"01" #输出产生的名字,用于检查,是否和实际数据名字一样
print Sname1+Year+"16" #输出产生的名字,用于检查,是否和实际数据名字一样
out="E:\\test\\output\\"+Year[0:6]+"_UMD" #指定输出文件夹和输出文件名
print out +" is being ........."
arcpy.gp.CellStatistics_sa((Sname1+Year+"01",Sname1+Year+"16") ,out, "MAXIMUM", "DATA")
print out +" has done.........."
print "-------------------------------------------------------"
print "<----------All are done !!!---------->"
print "Start time : "+time1
print "End time : "+time.strftime('%y-%m-%d-%H:%M:%S')
转自:http://blog.csdn.net/lucky51222/article/details/38922853
最大合成法(MVC)可以在Envi中的Band Math中进行,式子是B1>B2,但是无法批量化;本文实现在ArcGIS中利用Python代码批量进行,如下:
用到的Modis NDVI数据是在MRT中进行拼接与转投影后的月数据,一个月有两期,数据格式是.tif,文件名的格式如:20040101.1_km_16_days_NDVI.tif,20040102.1_km_16_days_NDVI.tif代表2004年1月份的两期数据。本次处理的为2004-2013年的10年的数据。
Python代码如下:
import arcpy
import time
arcpy.CheckOutExtension("spatial")
time1=time.strftime('%y-%m-%d-%H:%M:%S')
Sname1="F:\\Modis_16\\1Moasic\\"
Sname2=".1_km_16_days_NDVI.tif"
for i in range(2004,2014):
for j in range(1,13):
if j>9:
Year= str(i)+str(j)+"0"
else:
Year= str(i)+"0"+str(j)+"0"
print Sname1+Year+"1"+Sname2
print Sname1+Year+"2"+Sname2
out="F:\\Modis_16\\2MVC\\"+Year[0:6]
print out +" is being ........."
arcpy.gp.CellStatistics_sa((Sname1+Year+"1"+Sname2,Sname1+Year+"2"+Sname2) ,out, "MAXIMUM", "DATA")
print out +" has done.........."
print "-------------------------------------------------------"
print "<----------All are done !!!---------->"
print "Start time : "+time1
print "End time : "+time.strftime('%y-%m-%d-%H:%M:%S')
领悟:本次处理的核心部分是拼凑文件名字符串。
自己注释:
import arcpy
import time
arcpy.CheckOutExtension("spatial")
time1 = time.strftime('%y-%m-%d-%H:%M:%S') #只是为了用来输出数据处理所用时间
Sname1 = "E:\\test\\divide\\div_" #工作路径和前面共同的名字字段
for i in range(1984,2007): #末尾数要比实际大1
for j in range(1,13):
if j>9:
Year= str(i)+str(j) #处理大于九月份的
else:
Year= str(i)+"0"+str(j) #处理小于十月份的
print Sname1+Year+"01" #输出产生的名字,用于检查,是否和实际数据名字一样
print Sname1+Year+"16" #输出产生的名字,用于检查,是否和实际数据名字一样
out="E:\\test\\output\\"+Year[0:6]+"_UMD" #指定输出文件夹和输出文件名
print out +" is being ........."
arcpy.gp.CellStatistics_sa((Sname1+Year+"01",Sname1+Year+"16") ,out, "MAXIMUM", "DATA")
print out +" has done.........."
print "-------------------------------------------------------"
print "<----------All are done !!!---------->"
print "Start time : "+time1
print "End time : "+time.strftime('%y-%m-%d-%H:%M:%S')