UNPKG

adhan-extended

Version:

High precision Islamic prayer time library (extended)

32 lines (29 loc) 2.23 kB
import Astronomical from './Astronomical'; import { degreesToRadians, radiansToDegrees } from './MathUtils'; import SolarCoordinates from './SolarCoordinates'; export default class SolarTime { constructor(date, coordinates) { const julianDay = Astronomical.julianDay(date.getFullYear(), date.getMonth() + 1, date.getDate(), 0); this.observer = coordinates; this.solar = new SolarCoordinates(julianDay); this.prevSolar = new SolarCoordinates(julianDay - 1); this.nextSolar = new SolarCoordinates(julianDay + 1); const m0 = Astronomical.approximateTransit(coordinates.longitude, this.solar.apparentSiderealTime, this.solar.rightAscension); const solarAltitude = -50.0 / 60.0; this.approxTransit = m0; this.transit = Astronomical.correctedTransit(m0, coordinates.longitude, this.solar.apparentSiderealTime, this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension); this.sunrise = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, false, this.solar.apparentSiderealTime, this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, this.solar.declination, this.prevSolar.declination, this.nextSolar.declination); this.sunset = Astronomical.correctedHourAngle(m0, solarAltitude, coordinates, true, this.solar.apparentSiderealTime, this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, this.solar.declination, this.prevSolar.declination, this.nextSolar.declination); } hourAngle(angle, afterTransit) { return Astronomical.correctedHourAngle(this.approxTransit, angle, this.observer, afterTransit, this.solar.apparentSiderealTime, this.solar.rightAscension, this.prevSolar.rightAscension, this.nextSolar.rightAscension, this.solar.declination, this.prevSolar.declination, this.nextSolar.declination); } afternoon(shadowLength) { // TODO source shadow angle calculation const tangent = Math.abs(this.observer.latitude - this.solar.declination); const inverse = shadowLength + Math.tan(degreesToRadians(tangent)); const angle = radiansToDegrees(Math.atan(1.0 / inverse)); return this.hourAngle(angle, true); } } //# sourceMappingURL=SolarTime.js.map