SunCalc — это крошечная библиотека JavaScript под лицензией BSD для расчета положения солнца, фаз солнечного света (время восхода, заката, сумерек и т. д.), положения луны и лунной фазы для заданного места и времени, созданная Владимиром Агафонкиным (@mourner) как часть проекта SunCalc.net.
Большинство расчетов основано на формулах, приведенных в превосходных статьях Astronomy Answers о положении Солнца и планет. Вы можете прочитать о различных фазах сумерек, рассчитанных SunCalc, в статье «Сумерки» в Википедии.
// 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 также доступен в виде пакета NPM:
$ npm install suncalc
var SunCalc = require ( 'suncalc' ) ;
SunCalc . getTimes ( /*Date*/ date , /*Number*/ latitude , /*Number*/ longitude , /*Number (default=0)*/ height )
Возвращает объект со следующими свойствами (каждый из которых является объектом Date
):
Свойство | Описание |
---|---|
sunrise | восход солнца (верхний край солнца появляется на горизонте) |
sunriseEnd | восход солнца заканчивается (нижний край солнца касается горизонта) |
goldenHourEnd | Утренний золотой час (мягкий свет, лучшее время для фотографии) заканчивается |
solarNoon | солнечный полдень (солнце находится в самом высоком положении) |
goldenHour | наступает вечерний золотой час |
sunsetStart | начинается закат (нижний край солнца касается горизонта) |
sunset | закат (солнце уходит за горизонт, наступают вечерние гражданские сумерки) |
dusk | сумерки (начинаются вечерние морские сумерки) |
nauticalDusk | морские сумерки (начинаются вечерние астрономические сумерки) |
night | начинается ночь (достаточно темно для астрономических наблюдений) |
nadir | надир (самый темный момент ночи, солнце находится в самом низком положении) |
nightEnd | ночь заканчивается (начинаются утренние астрономические сумерки) |
nauticalDawn | морской рассвет (начинаются утренние морские сумерки) |
dawn | рассвет (утренние морские сумерки заканчиваются, начинаются утренние гражданские сумерки) |
SunCalc . addTime ( /*Number*/ angleInDegrees , /*String*/ morningName , /*String*/ eveningName )
Добавляет пользовательское время, когда солнце достигает заданного угла, к результатам, возвращаемым SunCalc.getTimes
.
Свойство SunCalc.times
содержит все текущие значения времени.
SunCalc . getPosition ( /*Date*/ timeAndDate , /*Number*/ latitude , /*Number*/ longitude )
Возвращает объект со следующими свойствами:
altitude
: высота солнца над горизонтом в радианах, например 0
на горизонте и PI/2
в зените (прямо над головой).azimuth
: азимут солнца в радианах (направление вдоль горизонта, измеренное с юга на запад), например 0
— юг, а Math.PI * 3/4
— северо-запад. SunCalc . getMoonPosition ( /*Date*/ timeAndDate , /*Number*/ latitude , /*Number*/ longitude )
Возвращает объект со следующими свойствами:
altitude
: высота луны над горизонтом в радианах.azimuth
: азимут луны в радианахdistance
: расстояние до Луны в километрахparallacticAngle
: параллактический угол Луны в радианах. SunCalc . getMoonIllumination ( /*Date*/ timeAndDate )
Возвращает объект со следующими свойствами:
fraction
: освещенная часть Луны; варьируется от 0.0
(новолуние) до 1.0
(полнолуние)phase
: фаза луны; варьируется от 0.0
до 1.0
, описано нижеangle
: средний угол в радианах освещенного края Луны, отсчитываемый к востоку от северной точки диска; Луна растущая, если угол отрицательный, и убывающая, если положительный.Значение фазы Луны следует интерпретировать следующим образом:
Фаза | Имя |
---|---|
0 | Новолуние |
Растущий полумесяц | |
0,25 | Первый квартал |
Растущая луна | |
0,5 | Полнолуние |
Убывающая Луна | |
0,75 | Последний квартал |
Убывающий полумесяц |
Вычитая из angle
parallacticAngle
, можно получить зенитный угол яркого лимба Луны (против часовой стрелки). Зенитный угол можно использовать, чтобы нарисовать форму луны с точки зрения наблюдателя (например, луна лежит на спине).
SunCalc . getMoonTimes ( /*Date*/ date , /*Number*/ latitude , /*Number*/ longitude [ , inUTC ] )
Возвращает объект со следующими свойствами:
rise
: время восхода луны как Date
set
: время захода луны как Date
alwaysUp
: true
, если луна никогда не восходит/заходит и всегда находится над горизонтом в течение дня.alwaysDown
: true
если луна всегда находится ниже горизонта. По умолчанию он будет искать восход и заход луны в течение дня местного пользователя (от 0 до 24 часов). Если для inUTC
установлено значение true, вместо этого будет выполняться поиск указанной даты в диапазоне от 0 до 24 часов UTC.
parallacticAngle
для getMoonPosition
.getMoonIllumination
используется сегодняшняя дата.inUTC
для getMoonTimes
. SunCalc.getMoonTimes
для расчета времени восхода и захода луны. SunCalc.times
с определенным временем летнего времени.SunCalc.getTimes
. SunCalc.getMoonIllumination
добавлена phase
(фаза луны).SunCalc.getMoonIllumination
(вместо getMoonFraction
), который возвращает объект с fraction
и angle
(угол освещенного края Луны). SunCalc.getMoonFraction
, возвращающая освещенную долю Луны. SunCalc.getMoonPosition
.SunCalc.addTime
.