I am currently performing a bioclimatic analysis using monthly averaged climate grids. One particular calculation, Growing Degree Days, relies on daily maximum/minimum temperature and a threshold temperature that is surpassed (0, 5, 10, etc. Celsius). For instance, Winkler's GDD calculation is as follows

Σ [April 1, October 31] : [ ((Max Temp + Min Temp)/2) - 10 ]

My approach to date has been to perform this calculation using the monthly values and then multiply the sum by the number of days in the month for each month. This leads to a rough, step-funtion-like estimate and is not ideal.

In a paper by Coops et al. (2001, International Journal of Geographical Information Science, 15:4, 345-361, DOI: 10.1080/13658810010011401), the authors describe using Singular Value Decomposition to solve the following equation able to provide daily value estimations from monthly climate values:

enter image description here

Where the result is 12 equations per variable (Max and Min Monthly Temperature) with 5 unknowns each (p and q) and X pertains to the Julian Day. The paper goes on to claim that they were able to solve the unknowns and apply this equation to their climate rasters, performing calculations similar to the degree-day calculation listed above. The end result would resemble this curve:

enter image description here

I would like to know how I could possibly perform this type of analysis spatially, solving for p and q for individual climate variables for sets of raster images representing monthly average values (Max, Min, Mean Temp, etc.) and translate these values either to individual grids representing daily values or outputting to a grid of summed growing degree days above a base temperature.

If possible, I am curious to know if there are any Open Source tools which may already do this (Python, R, PyQGIS etc.) or a way of setting this up through the QGIS Model Builder for performing these calculations on multiple sets of climate data.

I realize this might be better suited to the Math or Earth Science SE's, but given that the solution needs to be performed using raster images, people here likely have much more experience with this type of problem.


Followed up with the authors and found out that the original code to perform this type of analysis is long gone. They likely approached this using NetCDF files and IDL/Matlab. PyClimate (Link) seems to have capabilities for using SVD to solve curves for coupled data sets, but the documentation is not very clear, and the tools seems to be abandoned (last update in 2004).

  • Did you manage to interpolate monthly to daily values in Saga GIS or using Python codes? I also need to do exactly the same, can you please let me know about this? – nawaraj Jun 8 '18 at 8:15

In 2017, SAGA GIS (GUI) has now Growing Degree Days Tool - by Dr. Dirk N. Karger (under Tool Libraries | Climate | Tools | Growing Degree Days).

Tool Growing Degree Days (linked to SAGA 6.0 but I think it became available in SAGA 4.1. ?)

According to the documentation this tool calculates Number of Days above Base Temp. and Growing Degree Days (plus option to calculate First/Last GDD).

You already have grids (Mean monthly temperatures), then this tool interpolates "daily" temperature by spline interpolation.

I have no knowledge in this area, but looks like it fits to your requirement (slightly different approach, though).

  • 1
    Wasn't expecting an answer to this, but this is certainly worth looking at. I'll return to this and see if this would technically work. Thanks! – Trevor J. Smith Dec 6 '17 at 21:02
  • 1
    I finally checked this out and it's essentially what I had in mind, so thanks! There are some more scripted solutions in Python and Julia that can also perform what I had in mind as well. It's unfortunate that QGIS (to date) doesn't integrate the more recent SAGA versions/algorithms. – Trevor J. Smith Apr 19 '18 at 21:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.