Calculate sunrise, sunset and maximum solar radiation

Posted by on January 24, 2012 in Software Architecture | 0 comments

Calculate sunrise, sunset and maximum solar radiation

I got some requests for releasing the library that calculates the sunrise, sunset and maximum solar radiation of the LetsGrow WordPress Weather plug-in. I extracted the algorithms from the implementation on the platform LetsGrow.com and decided to release it.

It is possible to calculate the sunrise, sunset and maximum solar radiation using some well-known formulas. For those of you who are interested in these formulas take a look at the following pages at Wikipedia (Declination of the Sun, Sunrise, Sunset). If you just want to calculate the sunrise, sunset and maximum solar radiation take a look below on how to use the code.

I wrote the code in C# and packed it in a Visual Studio 2008 solution. It has two assemblies, Astronomy and AstronomyTest. The assembly Astronomy has the SolarCalculator class which performs the real calculation. The assembly AstronomyTest has several unit-tests that validates the calculations against external sources. The SolarCalculator class needs the longitude, latitude, time-zone and whether to use daylight savings. You can create  an instance of the SolarCalculator like this:

const Double Longitute = 5.127869;
const Double Latitude = 52.108192;
const int LongituteTimeZone = 15;
const bool UseSummerTime = true;
SunCalculator calculator = new
  SunCalculator(Longitute, Latitude,
  LongituteTimeZone, UseSummerTime);

The actual calculation of sunrise, sunset and maximum solar radiation can be seen below.

DateTime sunRise = calculator.CalculateSunRise(
   new DateTime(2010, 4, 1));
DateTime sunSet = calculator.CalculateSunSet(
   new DateTime(2010, 4, 1));
Double maximumSolarRadiation =
   calculator.CalculateMaximumSolarRadiation(
      new DateTime(2010, 1, 1, 1, 3, 0));

The DateTime returned from CalculateSunRise and CalculateSunSet includes the sunrise and sunset time. For more information take a look at the unit-tests in the assembly AstronomyTest which explain the usage in more detail.

I added an article to The Code Project which also explains the usage of the library including a download link of the source code.

Code Project Logo