SunCalc 是一个小型 BSD 许可的 JavaScript 库,用于计算给定位置和时间的太阳位置、日照相位(日出、日落、黄昏等时间)、月亮位置和月相,由 Vladimir Agafonkin (@mourner) 创建,如下所示SunCalc.net 项目的一部分。
大多数计算都是基于有关太阳和行星位置的优秀天文学答案文章中给出的公式。您可以在 Wikipedia 上的暮光文章中了解 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 | 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 小时之间的指定日期。
getMoonPosition
添加了parallacticAngle
计算。getMoonIllumination
中默认为今天的日期。getMoonTimes
添加了inUTC
参数。 SunCalc.getMoonTimes
用于计算月亮升起和落下时间。 SunCalc.times
属性。SunCalc.getTimes
性能。 SunCalc.getMoonIllumination
结果添加了phase
(月相)。SunCalc.getMoonIllumination
(代替getMoonFraction
),它返回带有fraction
和angle
(月亮被照亮的边缘的角度)的对象。 SunCalc.getMoonFraction
函数,该函数返回月球的照亮部分。 SunCalc.getMoonPosition
函数。SunCalc.addTime
函数。