太阳计算器 - 计算日出、日落和最大太阳辐射






4.79/5 (33投票s)
一个用于计算日出、日落和最大太阳辐射的 C# 程序集

引言
我一直在寻找一个 .NET 库来计算太阳升起和落下的时间。有一些库可用,包括 Code Project 上的,但它们存在一些问题。尝试了一些后,我决定自己创建一个。我需要日出、日落和最大太阳辐射来用于我博客上的 WordPress 插件。该插件显示了荷兰的地图以及当前的天气状况。这篇文章的顶部显示了该插件的屏幕截图。该地图显示了实时温度,包括一个图标。该图标是将测量的太阳辐射与最大太阳辐射进行转换的结果。
背景
可以使用一些已知的算法来计算日出、日落和最大太阳辐射。对于那些对这些算法感兴趣的人,请查看维基百科上的以下页面:太阳的赤纬,日出,日落。如果您只想计算日出、日落和最大太阳辐射,请查看下面关于如何使用代码的信息。
Using the Code
代码被打包在 Visual Studio 2008 解决方案中。它包含两个程序集:Astronomy
和 AstronomyTest
。 程序集 Astronomy
包含执行实际计算的 SunCalculator
类。 程序集 AstronomyTest
包含几个单元测试,用于针对外部来源验证计算。
SunCalculator
是一个不依赖于外部类的单类。 虽然这在某种程度上违背了单一职责原则,但它使这个类的重用更容易。 SunCalculator
类需要您所在位置的经度、纬度和时区。 您还应该指示是否使用夏令时。 可以像这样创建 SolarCalculator
的实例
const Double Longitute = 5.127869;
const Double Latitude = 52.108192;
const int LongituteTimeZone = 15;
const bool UseSummerTime = true;
SunCalculator sunCalculator = new SunCalculator(Longitute, Latitude,
LongituteTimeZone, UseSummerTime);
您必须提供要计算日出和日落时间的地点经度和纬度。 这些是构造函数的前两个参数。 对于使用夏令时的地点,您应该将 UseSummerTime
设置为实际的夏令时状态。 对于不使用夏令时的地点,将其设置为 false
。
下面可以看到日出、日落和最大太阳辐射的实际计算
DateTime sunRise = sunCalculator.CalculateSunRise(new DateTime(2010, 4, 1));
DateTime sunSet = sunCalculator.CalculateSunSet(new DateTime(2010, 4, 1));
Double maximumSolarRadiation =
sunCalculator.CalculateMaximumSolarRadiation(new DateTime(2010, 1, 26, 16, 30, 0));
从 CalculateSunRise
和 CalculateSunSet
返回的 DateTime
包括日出和日落时间。 有关更多信息,请查看程序集 AstronomyTest
中的单元测试。
关注点
该代码首先计算太阳的赤纬、太阳位置的余弦、太阳位置的正弦以及太阳时和实际时间之间的差异。 所有这些参数都用于计算日出和日落时间。
如果您想实时查看该插件,请访问我的博客 www.semanticarchitecture.net。 在地图上检索和显示的数据来自 LetsGrow.com,我所在的公司。
历史
- v1.0 02/04/2010:初始版本和第一个版本
- v1.1 28/05/2010:为洛杉矶添加了一个测试用例,以及一个演示源代码中库的控制台应用程序
- v1.2 08/11/2011:修复了失败的测试