Python實現CASA模型估算植被淨初級生產力——最適溫度篇

  在估算植被的NPP時,相信很多人都會選擇CASA模型,因爲它實在是一個參數少易實現且應用廣泛的光能利用率模型啊。

CASA模型估算NPP,公式就是NPP = APAR * E,APAR是植被吸收的光合有效輻射,E是植被的光能利用率。因爲今天要說最適溫度,暫不說APAR。

                                                           E = T *W *Emax,

T是溫度脅迫,W是水分脅迫,Emax是植被的最大光能利用率。最適溫度Topt主要是在計算溫度脅迫T的時候用到。

                                                                T = T1 * T2

 T1是指高溫和低溫對光能利用率的影響係數, T2是指溫度從最適溫度向高溫和低溫轉化對光能利用率的影響係數.

這裏的Topt就是所說的最適溫度啦。

Topt是指像元x處的最適溫度,即該像元的NDVI在一年中達到最大時當月的平均溫度。通俗一點說,就是在某個像元處,一年內的12個月的NDVI進行對比,比如8月份的NDVI是一年中最大的,那麼8月份的平均溫度就是此像元的最適溫度。

那麼Topt具體如何計算呢?其實就是進行比較。

下面附上python實現的具體過程:

Ntrans, Nproj, Narr = run.read_img(filelist[0])##讀圖像,filelist是包括12個月的NDVI的列表
NDVImaxValue = Narr  ##先假定第一個月的NDVI是最大的,然後跟後面的對比,不斷替換,找到最大值
NDVImaxMonth = np.ones((rows, cols), int)
NDVImaxMonthMeanTem = np.zeros((rows, cols))  ##定義最適溫度數組
for i in range(len(filelist)):   ##2001年的時候,i= 0時,代表的是1月
    Ntrans, Nproj, NDVIarr = run.read_img(filelist[i])
    (dir1,name1) = os.path.split(filelist[i])
    yy, yymm = findYM(name1)
    for row in range(rows):
        for col in range(cols):
            if NDVImaxValue[row,col] >= NDVIarr[row,col]:
                NDVImaxValue[row,col] = NDVImaxValue[row,col]  ## NDVImaxValue保持不變
                NDVImaxMonth[row,col] = NDVImaxMonth[row,col]  ## NDVImaxMonth保持不變
                # print(int(NDVImaxMonth[row,col]))
                NDVImaxMonthMeanTem[row, col] = MeanTemList[int(NDVImaxMonth[row, col]) - 1]  ##最適溫度
                # print(NDVImaxMonthMeanTem[row, col])
            else:
                NDVImaxValue[row, col] = NDVIarr[row,col]
                NDVImaxMonth[row,col] = int(yymm[5:7])
                NDVImaxMonthMeanTem[row, col] = MeanTemList[int(yymm[5:7]) - 1]   ##最適溫度

上面的過程就是在不斷對一年內12個月的NDVI進行比較,然後找到NDVI最大值的月份,並把此月份的平均溫度賦值到Topt數組的某個像元裏,完成一個像元的Topt的查找,直到所有的像元數循環完了,就完成了一年的Topt的查找。

PS:我對Topt的計算過程糾結了好久,纔想明白,歡迎指正錯誤,或者精簡代碼。

 

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章