This very smol TypeScript library implements rough calculations for the azimuth and elevation of the sun for any location on Earth at a particular time, as well as providing times for rise, set, and noon.
import {SunSector} from 'sun-sector';
const sun = SunSector.from(31.34635, -93.82015)
.at("2003-02-01T08:59:00-06:00");
console.log("Azimuth º:", sun.azimuth);
console.log("Elevation º:", sun.elevation);
console.log("Sunrise:", sun.rise);
console.log("Noon:", sun.noon);
console.log("Sunset:", sun.set);
SunSector.from() takes two arguments, a latitude and a longitude. Both
should be in decimal degrees, with latitude south and longitude west given as
negative numbers. This function returns a View object for the given location
at the current time.
.at(date) returns another View for the same location at the given date and
time. It takes a single argument that can be a Date object, or any string that
the built-in Date constructor accepts.
The .elevation property returns the number of degrees above the horizon.
.azimuth returns degrees, clockwise from due north (0º).
The .rise, .noon, and .set properties all return Date objects.
This code basically implements Louis Strous's excellent tutorial on computing the position of the Sun from his Astronomy Answers site.
When compared to online solar position calculators like nrel.gov or gml.noaa.gov, this code returns azimuth and elevation that are within 0.5º, noon within a minute, and rise/set times that are within 2 minutes. So it's not perfect, but it's close enough for my purposes.
You should probably check out Volodymyr Agafonkin's more fully-featured SunCalc library. Slava Ukraini! 🇺🇦
(c) Copyright 2022 Schuyler Erle.
It's Free Software, yo. See LICENSE.md for the full (3-clause BSD) license.