目录
摘要 1
1 引言 2
1.1 选题背景与意义 2
1.2 研究现状 2
1.3 研究目标、研究内容及技术路线 3
1.3.1 研究目标 3
1.3.2 研究内容 3
1.3.3 技术路线图 4
2 研究数据与研究方法 4
2.1 研究区域概况 4
2.2 数据来源 4
2.2.1 冬小麦生育期数据 4
2.2.2 遥感数据 5
2.2.3 非遥感数据 6
2.3 研究方法 6
2.3.1 对MODIS数据的处理 6
2.3.2 植被指数计算 7
2.3.3 作物长势遥感监测 8
3 冬小麦长势监测结果与分析 10
3.1 冬小麦长势年际变化特征 10
3.2 冬小麦长势空间变化特征 11
3.3 基于差值模型的冬小麦长势监测 12
4 冬小麦产量估算 15
4.1 冬小麦估产模型建立 15
4.2 模型精度检验 18
5 结论与展望 19
5.1 实验结论 19
5.2 问题与展望 19
参考文献 21
致 谢 22
附 录:关键程序代码 23
1.3 研究目标、研究内容及技术路线
1.3.1 研究目标
本文主要的目标为利用250m分辨率的MODIS数据对滁州市地区的冬小麦进行长势的监测以及产量的估测,在农作物产量这一方面提供预警。
1.3.2 研究内容
本研究选择滁州市作为研究区,采用MODIS数据和冬小麦生育期数据,用植被指数年际间的差值模型对冬小麦的生长情况进行实时监测以及分析,并对其进行估产,主要内容如下:
(1)确定研究范围,选定研究时间
本文研究的主要是滁州市地区的冬小麦长势,因此,需要通过查阅资料,来获取冬小麦一个生长周期内的生长发育情况,确定其生长的关键期,以便接下来对遥感数据进行获取。
(2)收集、处理数据
确定好冬小麦的生长关键期之后,收集所需数据,使用ENVI5.1、ARCGIS10.1和MRT等软件对遥感影像进行预处理,再将研究区内冬小麦种植范围数据作为矢量数据来裁剪前面的栅格数据,计算研究区的NDVI值。
(3)冬小麦的长势监测
计算2013年至2018年间滁州市地区的MODIS数据的NDVI值,得到一个时间序列函数,再利用NDVI时间序列曲线进行冬小麦生长状况的评价与分析;最后使用差值模型计算出2018年滁州市各个生育期的长势差值图,对作物长势进行等级划分。
(4)冬小麦的产量预估
通过SPSS软件,利用冬小麦关键生长期的NDVI与相应年份的产量信息进行回归分析,建立冬小麦产量估算的回归模型,使用2019年滁州市冬小麦实际产量来对模型的估产精度进行验证对比分析。
import os
def modis_mosaic():
#设置MRT的data目录环境变量
os.environ['MRT_DATA_DIR'] = "D:\ModisTools\MRT\data"
#设置mrt的bin路径
mrtpath = r"D:\ModisTools\MRT\bin"
#指定mrt的mosaic.exe的路径
mrtmosaic = os.path.join(mrtpath,"mrtmosaic.exe")
#MRT的mrtmosaic模块的全路径以‘/’连接
mrtmosaic = mrtmosaic.replace("\\","/")
#文件数据目录
datadir = r'E:\modis'
os.chdir(datadir)#os.chdir()方法用于改变当前工作目录到指定的路径
#指定要输出的波段
SPECTRAL_SUBEST = "1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
#指定输出路径并以/连接
outpath = r'E:\modis\Result'
outpath = outpath.replace("\\","/")
#获取当前文件夹下所有hdf文件
allFiles = os.listdir(datadir)
#创建allDays空列表,存储所有天数
allHDFfiles = []
allDays = []
#从文件中获取天数信息
for eachFiles in allFiles:
if os.path.splitext(eachFiles)[1] == ".hdf":#分离文件名和扩展名
allHDFfiles.append(eachFiles)
day = eachFiles.split('.')
allDays.append(day[1])
print("所有的hdf文件如下:")
print(len(allHDFfiles))
print(" " + "\n ".join(allHDFfiles))
#列表转为无重复的集合类型 保存了天数信息 即A2013091 A2013099
allDays = set(allDays)
#循环拼接每一天的数据
for eachDay in allDays:
try:
#调用cmd获取同一天的hdf数据文件
getFiles = "dir *{0}.*.hdf/a/b/s > MOSAICNPUT.TXT".format(eachDay)
os.system(getFiles)
#使用cmd调用MRT拼接图像
mosaicFiles = '{0} -i MOSAICNPUT.TXT -s "{1}" -o {2}.hdf'.format(mrtmosaic,SPECTRAL_SUBEST,eachDay)
os.system(mosaicFiles)
moveFile = 'move {0}.hdf {1}'.format(eachDay,outpath)
os.system(moveFile)
print(eachDay + " has finished")
except:
print(eachDay + " was wrong")
moveLogFile = 'move {0} ../'.format("resample.log")
os.system(moveLogFile)
moveInputsFile = 'move {0} ../'.format("MOSAICNPUT.TXT")
os.system(moveInputsFile)
print("ALL has Done")