Skip to content

Solar Positioning Algorithm - Calculate the position of the sun at an arbitrary longitude / latitude

License

Notifications You must be signed in to change notification settings

pingbird/dart-spa

Repository files navigation

Solar Positioning Algorithm - Calculate the position of the sun at arbitrary coordinates.

About

This is a Dart implementation of the Solar Position Algorithm (SPA) by Ibrahim Reda and Afshin Andreas which is used by the U.S. government for radiology and energy purposes. See the paper here: https://www.nrel.gov/docs/fy08osti/34302.pdf

Given an observers coordinates and DateTime it can calculate the position of the sun and other information such as when the sun rises and sets.

Installation

Add the package to your pubspec.yaml:

dependencies:
  spa: ^1.2.0

Example

For a better example, see https://github.com/PixelToast/dart-spa/tree/master/example/cities

main() {
  var output = spaCalculate(SPAParams(
    time: DateTime(2019, 7, 2, 22),
    longitude: -83.045753,
    latitude: 42.331429,
    elevation: 191,
  ));

  print('zenith: ${output.zenith}');
  print('azimuth_astro: ${output.azimuthAstro}');
  print('azimuth: ${output.azimuth}');
  print('incidence: ${output.incidence}');
  print('suntransit: ${output.sunTransit}');
  print('sunrise: ${output.sunrise}');
  print('sunset: ${output.sunset}');
}
zenith: 97.83236091904035
azimuth_astro: 131.18876481734603
azimuth: 311.18876481734605
incidence: 97.83236091904035
suntransit: 13.604235957046416
sunrise: 5.994654066296624
sunset: 21.21272791301299

Zenith will be less than 90 degrees when it's daytime.

Documentation

Documentation can be found at https://pub.dev/documentation/spa/latest/

Accuracy

Guaranteed accuracy of +/- 0.0003 degrees.

This library is tested against the C implementation by NREL using 1,000,000 random inputs, see test/spa_test.dart for more information.

Performance

Benchmarks are done using benchmark/spa_benchmark.dart.

On my desktop with a Ryzen 5 1600 @ 3.2Ghz I get:

         [vm] Result: 16529 spa/s |  60 μs/spa
        [DDC] Result:  8077 spa/s | 123 μs/spa
[dart2js -O4] Result: 25316 spa/s |  39 μs/spa

On an LG K10 with a Snapdragon 410 @ 1.2Ghz I get:

Result: 1149 spa/s | 869 μs/spa

About

Solar Positioning Algorithm - Calculate the position of the sun at an arbitrary longitude / latitude

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages