SunCalc es una pequeña biblioteca JavaScript con licencia BSD para calcular la posición del sol, las fases de la luz solar (horas de salida, puesta del sol, anochecer, etc.), posición de la luna y fase lunar para una ubicación y hora determinadas, creada por Vladimir Agafonkin (@mourner) como una parte del proyecto SunCalc.net.
La mayoría de los cálculos se basan en las fórmulas proporcionadas en los excelentes artículos de Astronomy Answers sobre la posición del sol y los planetas. Puedes leer sobre las diferentes fases del crepúsculo calculadas por SunCalc en el artículo Crepúsculo en Wikipedia.
// get today's sunlight times for London
var times = SunCalc . getTimes ( new Date ( ) , 51.5 , - 0.1 ) ;
// format sunrise time from the Date object
var sunriseStr = times . sunrise . getHours ( ) + ':' + times . sunrise . getMinutes ( ) ;
// get position of the sun (azimuth and altitude) at today's sunrise
var sunrisePos = SunCalc . getPosition ( times . sunrise , 51.5 , - 0.1 ) ;
// get sunrise azimuth in degrees
var sunriseAzimuth = sunrisePos . azimuth * 180 / Math . PI ;
SunCalc también está disponible como paquete NPM:
$ npm install suncalc
var SunCalc = require ( 'suncalc' ) ;
SunCalc . getTimes ( /*Date*/ date , /*Number*/ latitude , /*Number*/ longitude , /*Number (default=0)*/ height )
Devuelve un objeto con las siguientes propiedades (cada una es un objeto Date
):
Propiedad | Descripción |
---|---|
sunrise | amanecer (el borde superior del sol aparece en el horizonte) |
sunriseEnd | Termina el amanecer (el borde inferior del sol toca el horizonte) |
goldenHourEnd | Finaliza la hora dorada de la mañana (luz suave, mejor momento para fotografiar) |
solarNoon | Mediodía solar (el sol está en la posición más alta) |
goldenHour | Comienza la hora dorada de la tarde |
sunsetStart | Comienza el atardecer (el borde inferior del sol toca el horizonte) |
sunset | puesta de sol (el sol desaparece debajo del horizonte, comienza el crepúsculo civil vespertino) |
dusk | anochecer (comienza el crepúsculo náutico vespertino) |
nauticalDusk | Anochecer náutico (comienza el crepúsculo astronómico vespertino) |
night | Comienza de noche (lo suficientemente oscuro para observaciones astronómicas) |
nadir | nadir (momento más oscuro de la noche, el sol está en la posición más baja) |
nightEnd | termina la noche (comienza el crepúsculo astronómico de la mañana) |
nauticalDawn | amanecer náutico (comienza el crepúsculo náutico de la mañana) |
dawn | amanecer (termina el crepúsculo náutico de la mañana, comienza el crepúsculo civil de la mañana) |
SunCalc . addTime ( /*Number*/ angleInDegrees , /*String*/ morningName , /*String*/ eveningName )
Agrega una hora personalizada en la que el sol alcanza el ángulo dado a los resultados devueltos por SunCalc.getTimes
.
La propiedad SunCalc.times
contiene todos los tiempos definidos actualmente.
SunCalc . getPosition ( /*Date*/ timeAndDate , /*Number*/ latitude , /*Number*/ longitude )
Devuelve un objeto con las siguientes propiedades:
altitude
: altitud del sol sobre el horizonte en radianes, por ejemplo, 0
en el horizonte y PI/2
en el cenit (justo sobre su cabeza)azimuth
: azimut del sol en radianes (dirección a lo largo del horizonte, medido de sur a oeste), por ejemplo, 0
es sur y Math.PI * 3/4
es noroeste SunCalc . getMoonPosition ( /*Date*/ timeAndDate , /*Number*/ latitude , /*Number*/ longitude )
Devuelve un objeto con las siguientes propiedades:
altitude
: altitud de la luna sobre el horizonte en radianesazimuth
: azimut de la luna en radianesdistance
: distancia a la luna en kilómetrosparallacticAngle
: ángulo paraláctico de la luna en radianes SunCalc . getMoonIllumination ( /*Date*/ timeAndDate )
Devuelve un objeto con las siguientes propiedades:
fraction
: fracción iluminada de la luna; varía de 0.0
(luna nueva) a 1.0
(luna llena)phase
: fase lunar; varía de 0.0
a 1.0
, que se describe a continuaciónangle
: ángulo del punto medio en radianes del lado iluminado de la luna contado hacia el este desde el punto norte del disco; la luna es creciente si el ángulo es negativo y menguante si es positivoEl valor de la fase lunar debe interpretarse así:
Fase | Nombre |
---|---|
0 | Luna nueva |
Media luna creciente | |
0,25 | Primer trimestre |
Gibosa creciente | |
0,5 | Luna llena |
Gibosa menguante | |
0,75 | Último trimestre |
Media Luna Menguante |
Restando el parallacticAngle
del angle
se puede obtener el ángulo cenital del miembro brillante de la luna (en el sentido contrario a las agujas del reloj). El ángulo cenital se puede utilizar para dibujar la forma de la luna desde la perspectiva del observador (por ejemplo, la luna tumbada boca arriba).
SunCalc . getMoonTimes ( /*Date*/ date , /*Number*/ latitude , /*Number*/ longitude [ , inUTC ] )
Devuelve un objeto con las siguientes propiedades:
rise
: hora de salida de la luna como Date
set
: hora de puesta de la luna como Date
alwaysUp
: true
si la luna nunca sale/se pone y siempre está sobre el horizonte durante el día.alwaysDown
: true
si la luna siempre está debajo del horizonte. De forma predeterminada, buscará la salida y puesta de la luna durante el día del usuario local (de 0 a 24 horas). Si inUTC
se establece en verdadero, buscará la fecha especificada de 0 a 24 horas UTC.
parallacticAngle
a getMoonPosition
.getMoonIllumination
.inUTC
a getMoonTimes
. SunCalc.getMoonTimes
para calcular las horas de salida y puesta de la luna. SunCalc.times
expuesta con horas de luz diurnas definidas.SunCalc.getTimes
ligeramente mejorado. phase
a los resultados de SunCalc.getMoonIllumination
(fase lunar).SunCalc.getMoonIllumination
(en lugar de getMoonFraction
) que devuelve un objeto con fraction
y angle
(ángulo del miembro iluminado de la luna). SunCalc.getMoonFraction
que devuelve la fracción iluminada de la luna. SunCalc.getMoonPosition
.SunCalc.addTime
.