ootk 1.2.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{asc → .asc}/asconfig.json +0 -0
- package/{asc → .asc}/assembly/index.ts +0 -0
- package/{asc → .asc}/ex/asconfig.json +0 -0
- package/{asc → .asc}/ex/assembly/index.ts +0 -0
- package/{asc → .asc}/ex/index.html +0 -0
- package/{asc → .asc}/ex/package.json +0 -0
- package/{asc → .asc}/ex/tests/index.js +0 -0
- package/{asc → .asc}/package.json +0 -0
- package/{asc → .asc}/tests/index.js +0 -0
- package/.eslintrc.json +5 -5
- package/LICENSE.MD +299 -21
- package/README.md +17 -22
- package/dist/ootk.d.ts +16 -23
- package/dist/ootk.js +2 -1
- package/dist/ootk.js.LICENSE.txt +77 -0
- package/lib/objects/base-object.d.ts +40 -0
- package/lib/objects/base-object.js +109 -0
- package/lib/objects/base-object.js.map +1 -0
- package/lib/objects/detailed-sat.d.ts +66 -0
- package/lib/objects/detailed-sat.js +149 -0
- package/lib/objects/detailed-sat.js.map +1 -0
- package/lib/objects/index.d.ts +4 -0
- package/lib/objects/index.js +5 -0
- package/lib/objects/index.js.map +1 -0
- package/lib/objects/sat.d.ts +88 -0
- package/lib/objects/sat.js +141 -0
- package/lib/objects/sat.js.map +1 -0
- package/lib/objects/sensor.d.ts +40 -0
- package/lib/objects/sensor.js +88 -0
- package/lib/objects/sensor.js.map +1 -0
- package/lib/objects/space-object.d.ts +38 -0
- package/lib/objects/space-object.js +60 -0
- package/lib/objects/space-object.js.map +1 -0
- package/lib/objects/star.d.ts +46 -0
- package/lib/objects/star.js +91 -0
- package/lib/objects/star.js.map +1 -0
- package/lib/ootk.d.ts +16 -23
- package/lib/ootk.js +16 -23
- package/lib/ootk.js.map +1 -1
- package/{dist → lib/sgp4}/sgp4.d.ts +14 -21
- package/lib/{sgp4.js → sgp4/sgp4.js} +35 -27
- package/lib/sgp4/sgp4.js.map +1 -0
- package/lib/{utils/TleFormatData.d.ts → tle/tle-format-data.d.ts} +0 -0
- package/lib/{utils/TleFormatData.js → tle/tle-format-data.js} +1 -1
- package/lib/tle/tle-format-data.js.map +1 -0
- package/{dist → lib/tle}/tle.d.ts +12 -16
- package/lib/{tle.js → tle/tle.js} +13 -17
- package/lib/tle/tle.js.map +1 -0
- package/lib/{transforms.d.ts → transforms/transforms.d.ts} +12 -16
- package/lib/{transforms.js → transforms/transforms.js} +12 -16
- package/lib/transforms/transforms.js.map +1 -0
- package/{dist → lib/types}/types.d.ts +68 -0
- package/lib/types/types.js +34 -0
- package/lib/types/types.js.map +1 -0
- package/lib/utils/constants.d.ts +13 -16
- package/lib/utils/constants.js +13 -16
- package/lib/utils/constants.js.map +1 -1
- package/lib/utils/moon-math.d.ts +104 -0
- package/lib/utils/moon-math.js +387 -0
- package/lib/utils/moon-math.js.map +1 -0
- package/lib/utils/sun-math.d.ts +230 -0
- package/lib/utils/sun-math.js +421 -0
- package/lib/utils/sun-math.js.map +1 -0
- package/lib/utils/utils.d.ts +36 -0
- package/lib/{utils.js → utils/utils.js} +18 -18
- package/lib/utils/utils.js.map +1 -0
- package/package.json +2 -1
- package/dist/sat.d.ts +0 -51
- package/dist/transforms.d.ts +0 -59
- package/dist/utils.d.ts +0 -36
- package/lib/sat.d.ts +0 -51
- package/lib/sat.js +0 -81
- package/lib/sat.js.map +0 -1
- package/lib/sgp4.d.ts +0 -89
- package/lib/sgp4.js.map +0 -1
- package/lib/tle.d.ts +0 -378
- package/lib/tle.js.map +0 -1
- package/lib/transforms.js.map +0 -1
- package/lib/types.d.ts +0 -204
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/lib/utils/TleFormatData.js.map +0 -1
- package/lib/utils.d.ts +0 -36
- package/lib/utils.js.map +0 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek.
|
|
3
|
+
* @description Orbital Object ToolKit (OOTK) is a collection of tools for working
|
|
4
|
+
* with satellites and other orbital objects.
|
|
5
|
+
*
|
|
6
|
+
* @file SunMath is a collection of functions for calculating the position of the sun
|
|
7
|
+
* and other stars. This was originally created by Vladimir Agafonkin. Robert Gester's
|
|
8
|
+
* update was referenced for documentation. There were a couple of bugs in both versions
|
|
9
|
+
* so there will be some differences if you are migrating from either to this library.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* @license AGPL-3.0-or-later
|
|
13
|
+
* @Copyright (c) 2020-2022 Theodore Kruczek
|
|
14
|
+
*
|
|
15
|
+
* @Copyright (c) 2011-2015, Vladimir Agafonkin
|
|
16
|
+
* SunCalc is a JavaScript library for calculating sun/moon position and light phases.
|
|
17
|
+
* https://github.com/mourner/suncalc
|
|
18
|
+
*
|
|
19
|
+
* Reworked and enhanced by Robert Gester
|
|
20
|
+
* @Copyright (c) 2022 Robert Gester
|
|
21
|
+
* https://github.com/hypnos3/suncalc3
|
|
22
|
+
*
|
|
23
|
+
* sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas
|
|
24
|
+
*
|
|
25
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
26
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
27
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
28
|
+
*
|
|
29
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
30
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
31
|
+
* See the GNU Affero General Public License for more details.
|
|
32
|
+
*
|
|
33
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
34
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
35
|
+
*/
|
|
36
|
+
import { AzEl, Meters, SunTime } from '../types/types';
|
|
37
|
+
import { Degrees, Radians } from '../ootk';
|
|
38
|
+
export declare class SunMath {
|
|
39
|
+
private static readonly J1970;
|
|
40
|
+
private static readonly J2000;
|
|
41
|
+
private static readonly J0;
|
|
42
|
+
private static readonly e;
|
|
43
|
+
private static times;
|
|
44
|
+
private static julianCycle;
|
|
45
|
+
/**
|
|
46
|
+
* calculates the obderver angle
|
|
47
|
+
* @param {number} alt the observer altitude (in meters) relative to the horizon
|
|
48
|
+
* @returns {number} height for further calculations
|
|
49
|
+
*/
|
|
50
|
+
private static observerAngle;
|
|
51
|
+
/**
|
|
52
|
+
* get solar mean anomaly
|
|
53
|
+
* @param {number} d - julian day
|
|
54
|
+
* @returns {number} solar mean anomaly
|
|
55
|
+
*/
|
|
56
|
+
private static solarMeanAnomaly;
|
|
57
|
+
/**
|
|
58
|
+
* convert Julian calendar to date object
|
|
59
|
+
* @param {number} julian day number in Julian calendar to convert
|
|
60
|
+
* @return {number} result date as timestamp
|
|
61
|
+
*/
|
|
62
|
+
static julian2date(julian: number): Date;
|
|
63
|
+
/**
|
|
64
|
+
* get number of days for a dateValue since 2000
|
|
65
|
+
*
|
|
66
|
+
* See: https://en.wikipedia.org/wiki/Epoch_(astronomy)
|
|
67
|
+
*
|
|
68
|
+
* @param {number} date date as timestamp to get days
|
|
69
|
+
* @return {number} count of days
|
|
70
|
+
*/
|
|
71
|
+
static date2jSince2000(date: Date): number;
|
|
72
|
+
/**
|
|
73
|
+
* get right ascension
|
|
74
|
+
* @param {number} l - ecliptic longitude
|
|
75
|
+
* @param {number} b - ecliptic latitude
|
|
76
|
+
* @returns {number} right ascension
|
|
77
|
+
*/
|
|
78
|
+
static rightAscension(l: number, b: number): Radians;
|
|
79
|
+
/**
|
|
80
|
+
* get declination
|
|
81
|
+
* @param {number} l - ecliptic longitude
|
|
82
|
+
* @param {number} b - ecliptic latitude
|
|
83
|
+
* @returns {number} declination
|
|
84
|
+
*/
|
|
85
|
+
static declination(l: number, b: number): Radians;
|
|
86
|
+
/**
|
|
87
|
+
* get azimuth
|
|
88
|
+
* @param {number} H - siderealTime
|
|
89
|
+
* @param {Radians} phi - latitude
|
|
90
|
+
* @param {Radians} dec - The declination of the sun
|
|
91
|
+
* @returns {Radians} azimuth in rad
|
|
92
|
+
*/
|
|
93
|
+
static azimuth(H: number, phi: Radians, dec: Radians): Radians;
|
|
94
|
+
/**
|
|
95
|
+
* get elevation (sometimes called altitude)
|
|
96
|
+
* @param {number} H - siderealTime
|
|
97
|
+
* @param {Radians} phi - latitude
|
|
98
|
+
* @param {Radians} dec - The declination of the sun
|
|
99
|
+
* @returns {Radians} elevation
|
|
100
|
+
*/
|
|
101
|
+
static elevation(H: number, phi: Radians, dec: Radians): Radians;
|
|
102
|
+
/**
|
|
103
|
+
* side real time
|
|
104
|
+
* @param {number} d - julian day
|
|
105
|
+
* @param {Radians} lw - longitude of the observer
|
|
106
|
+
* @returns {number} sidereal time
|
|
107
|
+
*/
|
|
108
|
+
static siderealTime(d: number, lw: Radians): number;
|
|
109
|
+
/**
|
|
110
|
+
* get astro refraction
|
|
111
|
+
* @param {Radians} h - elevation
|
|
112
|
+
* @returns {number} refraction
|
|
113
|
+
*/
|
|
114
|
+
static astroRefraction(h: Degrees): Radians;
|
|
115
|
+
/**
|
|
116
|
+
* ecliptic longitude
|
|
117
|
+
* @param {number} M - solar mean anomaly
|
|
118
|
+
* @returns {number} ecliptic longitude
|
|
119
|
+
*/
|
|
120
|
+
static eclipticLongitude(M: number): number;
|
|
121
|
+
/**
|
|
122
|
+
* ecliptic latitude
|
|
123
|
+
* @param {number} B - ?
|
|
124
|
+
* @returns {number} ecliptic latitude
|
|
125
|
+
*/
|
|
126
|
+
static eclipticLatitude(B: number): number;
|
|
127
|
+
/**
|
|
128
|
+
* Julian cycle
|
|
129
|
+
* @param {number} d - number of days
|
|
130
|
+
* @param {number} lw - rad * -lng;
|
|
131
|
+
* @returns {number} julian cycle
|
|
132
|
+
*/
|
|
133
|
+
static julianCyle(d: number, lw: number): number;
|
|
134
|
+
/**
|
|
135
|
+
* approx transit
|
|
136
|
+
* @param {number} Ht - hourAngle
|
|
137
|
+
* @param {number} lw - rad * -lng
|
|
138
|
+
* @param {number} n - Julian cycle
|
|
139
|
+
* @returns {number} approx transit
|
|
140
|
+
*/
|
|
141
|
+
static approxTransit(Ht: number, lw: number, n: number): number;
|
|
142
|
+
/**
|
|
143
|
+
* solar transit in Julian
|
|
144
|
+
* @param {number} ds - approxTransit
|
|
145
|
+
* @param {number} M - solar mean anomal
|
|
146
|
+
* @param {number} L - ecliptic longitude
|
|
147
|
+
* @returns {number} solar transit in Julian
|
|
148
|
+
*/
|
|
149
|
+
static solarTransitJulian(ds: number, M: number, L: number): number;
|
|
150
|
+
/**
|
|
151
|
+
* hour angle
|
|
152
|
+
* @param {number} h - heigh at 0
|
|
153
|
+
* @param {number} phi - rad * lat;
|
|
154
|
+
* @param {number} dec - declination
|
|
155
|
+
* @returns {number} hour angle
|
|
156
|
+
*/
|
|
157
|
+
static hourAngle(h: number, phi: number, dec: number): number;
|
|
158
|
+
/**
|
|
159
|
+
* returns set time for the given sun altitude
|
|
160
|
+
* @param {number} h - heigh at 0
|
|
161
|
+
* @param {number} lw - rad * -lng
|
|
162
|
+
* @param {number} phi - rad * lat;
|
|
163
|
+
* @param {number} dec - declination
|
|
164
|
+
* @param {number} n - Julian cycle
|
|
165
|
+
* @param {number} M - solar mean anomal
|
|
166
|
+
* @param {number} L - ecliptic longitude
|
|
167
|
+
* @returns {number} set time
|
|
168
|
+
*/
|
|
169
|
+
static getSetJulian(h: number, lw: number, phi: number, dec: number, n: number, M: number, L: number): number;
|
|
170
|
+
/**
|
|
171
|
+
* returns set time for the given sun altitude
|
|
172
|
+
* @param {Meters} alt - altitude at 0
|
|
173
|
+
* @param {Radians} lw - -lng
|
|
174
|
+
* @param {Radians} phi - lat;
|
|
175
|
+
* @param {Radians} dec - declination
|
|
176
|
+
* @param {number} n - Julian cycle
|
|
177
|
+
* @param {number} M - solar mean anomal
|
|
178
|
+
* @param {number} L - ecliptic longitude
|
|
179
|
+
* @return {J2000Value} sunset time in days since 2000
|
|
180
|
+
*/
|
|
181
|
+
private static getSetJ;
|
|
182
|
+
/**
|
|
183
|
+
* calculates sun times for a given date and latitude/longitude
|
|
184
|
+
* @param {Date|number} dateVal Date object for calculating sun-times
|
|
185
|
+
* @param {number} lat latitude for calculating sun-times
|
|
186
|
+
* @param {number} lon longitude for calculating sun-times
|
|
187
|
+
* @param {number} [alt=0] the observer height (in meters) relative to the horizon
|
|
188
|
+
* @param {boolean} [isUtc=false] defines if the calculation should be in utc or local time (default is local)
|
|
189
|
+
* @return {SunTime} result object of sunTime
|
|
190
|
+
*/
|
|
191
|
+
static getTimes(dateVal: Date, lat: Degrees, lon: Degrees, alt?: Meters, isUtc?: boolean): SunTime;
|
|
192
|
+
private static calculateJnoon;
|
|
193
|
+
/**
|
|
194
|
+
* calculates time for a given azimuth angle for a given date and latitude/longitude
|
|
195
|
+
* @param {number|Date} dateValue Date object or timestamp for calculating sun-time
|
|
196
|
+
* @param {Degrees} lat latitude for calculating sun-time
|
|
197
|
+
* @param {Degrees} lon longitude for calculating sun-time
|
|
198
|
+
* @param {Radians | Degrees} az azimuth for calculating sun-time
|
|
199
|
+
* @param {boolean} [isDegrees] true if the az angle is in degree and not in rad
|
|
200
|
+
* @return {Date} result time of sun-time
|
|
201
|
+
*/
|
|
202
|
+
static getSunTimeByAzimuth(dateValue: any, lat: Degrees, lon: Degrees, az: Radians | Degrees, isDegrees?: boolean): Date;
|
|
203
|
+
/**
|
|
204
|
+
* get azimuth
|
|
205
|
+
* @param {number} H - siderealTime
|
|
206
|
+
* @param {Radians} phi - latitude
|
|
207
|
+
* @param {Radians} dec - The declination of the sun
|
|
208
|
+
* @returns {Radians} azimuth
|
|
209
|
+
*/
|
|
210
|
+
private static getAzimuth;
|
|
211
|
+
/**
|
|
212
|
+
* Convert Date to Solar Date/Time
|
|
213
|
+
*
|
|
214
|
+
* Based on https://www.pveducation.org/pvcdrom/properties-of-sunlight/solar-time
|
|
215
|
+
*
|
|
216
|
+
* See: https://github.com/mourner/suncalc/pull/156
|
|
217
|
+
*
|
|
218
|
+
* @param {date} date - Date to calculate for
|
|
219
|
+
* @param {number} utcOffset - UTC offset in hours
|
|
220
|
+
* @param {Degrees} lon - Longitude in degrees
|
|
221
|
+
* @returns {Date} - Date Object in Solar Time
|
|
222
|
+
*/
|
|
223
|
+
static getSolarTime(date: Date, utcOffset: number, lon: number): Date;
|
|
224
|
+
static getStarAzEl(date: Date, lat: Degrees, lon: Degrees, ra: number, dec: number): AzEl;
|
|
225
|
+
static getSunAzEl(date: Date, lat: Degrees, lon: Degrees): AzEl;
|
|
226
|
+
static getSunRaDec(d: number): {
|
|
227
|
+
dec: number;
|
|
228
|
+
ra: number;
|
|
229
|
+
};
|
|
230
|
+
}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Theodore Kruczek.
|
|
3
|
+
* @description Orbital Object ToolKit (OOTK) is a collection of tools for working
|
|
4
|
+
* with satellites and other orbital objects.
|
|
5
|
+
*
|
|
6
|
+
* @file SunMath is a collection of functions for calculating the position of the sun
|
|
7
|
+
* and other stars. This was originally created by Vladimir Agafonkin. Robert Gester's
|
|
8
|
+
* update was referenced for documentation. There were a couple of bugs in both versions
|
|
9
|
+
* so there will be some differences if you are migrating from either to this library.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* @license AGPL-3.0-or-later
|
|
13
|
+
* @Copyright (c) 2020-2022 Theodore Kruczek
|
|
14
|
+
*
|
|
15
|
+
* @Copyright (c) 2011-2015, Vladimir Agafonkin
|
|
16
|
+
* SunCalc is a JavaScript library for calculating sun/moon position and light phases.
|
|
17
|
+
* https://github.com/mourner/suncalc
|
|
18
|
+
*
|
|
19
|
+
* Reworked and enhanced by Robert Gester
|
|
20
|
+
* @Copyright (c) 2022 Robert Gester
|
|
21
|
+
* https://github.com/hypnos3/suncalc3
|
|
22
|
+
*
|
|
23
|
+
* sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas
|
|
24
|
+
*
|
|
25
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
26
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
27
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
28
|
+
*
|
|
29
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
30
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
31
|
+
* See the GNU Affero General Public License for more details.
|
|
32
|
+
*
|
|
33
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
34
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
35
|
+
*/
|
|
36
|
+
import { DEG2RAD, MS_PER_DAY } from './constants';
|
|
37
|
+
var TAU = Math.PI * 2; // https://tauday.com/tau-manifesto
|
|
38
|
+
var SunMath = /** @class */ (function () {
|
|
39
|
+
function SunMath() {
|
|
40
|
+
}
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
42
|
+
SunMath.julianCycle = function (d, lw) {
|
|
43
|
+
var lonOffset = lw / TAU;
|
|
44
|
+
return Math.round(d - SunMath.J0 - lonOffset);
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* calculates the obderver angle
|
|
48
|
+
* @param {number} alt the observer altitude (in meters) relative to the horizon
|
|
49
|
+
* @returns {number} height for further calculations
|
|
50
|
+
*/
|
|
51
|
+
SunMath.observerAngle = function (alt) {
|
|
52
|
+
return (-2.076 * Math.sqrt(alt)) / 60;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* get solar mean anomaly
|
|
56
|
+
* @param {number} d - julian day
|
|
57
|
+
* @returns {number} solar mean anomaly
|
|
58
|
+
*/
|
|
59
|
+
SunMath.solarMeanAnomaly = function (d) {
|
|
60
|
+
return DEG2RAD * (357.5291 + 0.98560028 * d);
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* convert Julian calendar to date object
|
|
64
|
+
* @param {number} julian day number in Julian calendar to convert
|
|
65
|
+
* @return {number} result date as timestamp
|
|
66
|
+
*/
|
|
67
|
+
SunMath.julian2date = function (julian) {
|
|
68
|
+
return new Date((julian - SunMath.J1970) * MS_PER_DAY);
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* get number of days for a dateValue since 2000
|
|
72
|
+
*
|
|
73
|
+
* See: https://en.wikipedia.org/wiki/Epoch_(astronomy)
|
|
74
|
+
*
|
|
75
|
+
* @param {number} date date as timestamp to get days
|
|
76
|
+
* @return {number} count of days
|
|
77
|
+
*/
|
|
78
|
+
SunMath.date2jSince2000 = function (date) {
|
|
79
|
+
return date.getTime() / MS_PER_DAY + SunMath.J1970 - SunMath.J2000;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* get right ascension
|
|
83
|
+
* @param {number} l - ecliptic longitude
|
|
84
|
+
* @param {number} b - ecliptic latitude
|
|
85
|
+
* @returns {number} right ascension
|
|
86
|
+
*/
|
|
87
|
+
SunMath.rightAscension = function (l, b) {
|
|
88
|
+
return Math.atan2(Math.sin(l) * Math.cos(SunMath.e) - Math.tan(b) * Math.sin(SunMath.e), Math.cos(l));
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* get declination
|
|
92
|
+
* @param {number} l - ecliptic longitude
|
|
93
|
+
* @param {number} b - ecliptic latitude
|
|
94
|
+
* @returns {number} declination
|
|
95
|
+
*/
|
|
96
|
+
SunMath.declination = function (l, b) {
|
|
97
|
+
return Math.asin(Math.sin(b) * Math.cos(SunMath.e) + Math.cos(b) * Math.sin(SunMath.e) * Math.sin(l));
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* get azimuth
|
|
101
|
+
* @param {number} H - siderealTime
|
|
102
|
+
* @param {Radians} phi - latitude
|
|
103
|
+
* @param {Radians} dec - The declination of the sun
|
|
104
|
+
* @returns {Radians} azimuth in rad
|
|
105
|
+
*/
|
|
106
|
+
SunMath.azimuth = function (H, phi, dec) {
|
|
107
|
+
return Math.PI + Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(phi) - Math.tan(dec) * Math.cos(phi));
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* get elevation (sometimes called altitude)
|
|
111
|
+
* @param {number} H - siderealTime
|
|
112
|
+
* @param {Radians} phi - latitude
|
|
113
|
+
* @param {Radians} dec - The declination of the sun
|
|
114
|
+
* @returns {Radians} elevation
|
|
115
|
+
*/
|
|
116
|
+
SunMath.elevation = function (H, phi, dec) {
|
|
117
|
+
return Math.asin(Math.sin(phi) * Math.sin(dec) + Math.cos(phi) * Math.cos(dec) * Math.cos(H));
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* side real time
|
|
121
|
+
* @param {number} d - julian day
|
|
122
|
+
* @param {Radians} lw - longitude of the observer
|
|
123
|
+
* @returns {number} sidereal time
|
|
124
|
+
*/
|
|
125
|
+
SunMath.siderealTime = function (d, lw) {
|
|
126
|
+
return DEG2RAD * (280.16 + 360.9856235 * d) - lw;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* get astro refraction
|
|
130
|
+
* @param {Radians} h - elevation
|
|
131
|
+
* @returns {number} refraction
|
|
132
|
+
*/
|
|
133
|
+
SunMath.astroRefraction = function (h) {
|
|
134
|
+
if (h < 0) {
|
|
135
|
+
h = 0;
|
|
136
|
+
}
|
|
137
|
+
return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179));
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* ecliptic longitude
|
|
141
|
+
* @param {number} M - solar mean anomaly
|
|
142
|
+
* @returns {number} ecliptic longitude
|
|
143
|
+
*/
|
|
144
|
+
SunMath.eclipticLongitude = function (M) {
|
|
145
|
+
var C = DEG2RAD * (1.9148 * Math.sin(M) + 0.02 * Math.sin(2 * M) + 0.0003 * Math.sin(3 * M));
|
|
146
|
+
var P = DEG2RAD * 102.9372; // perihelion of Earth
|
|
147
|
+
return M + C + P + Math.PI; // Sun's mean longitude
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* ecliptic latitude
|
|
151
|
+
* @param {number} B - ?
|
|
152
|
+
* @returns {number} ecliptic latitude
|
|
153
|
+
*/
|
|
154
|
+
SunMath.eclipticLatitude = function (B) {
|
|
155
|
+
var C = TAU / 360;
|
|
156
|
+
var L = B - 0.00569 - 0.00478 * Math.sin(C * B);
|
|
157
|
+
return TAU * (L + 0.0003 * Math.sin(C * 2 * L));
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Julian cycle
|
|
161
|
+
* @param {number} d - number of days
|
|
162
|
+
* @param {number} lw - rad * -lng;
|
|
163
|
+
* @returns {number} julian cycle
|
|
164
|
+
*/
|
|
165
|
+
SunMath.julianCyle = function (d, lw) {
|
|
166
|
+
return Math.round(d - SunMath.J0 - lw / ((2 * TAU) / 2));
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* approx transit
|
|
170
|
+
* @param {number} Ht - hourAngle
|
|
171
|
+
* @param {number} lw - rad * -lng
|
|
172
|
+
* @param {number} n - Julian cycle
|
|
173
|
+
* @returns {number} approx transit
|
|
174
|
+
*/
|
|
175
|
+
SunMath.approxTransit = function (Ht, lw, n) {
|
|
176
|
+
return SunMath.J0 + (Ht + lw) / TAU + n;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* solar transit in Julian
|
|
180
|
+
* @param {number} ds - approxTransit
|
|
181
|
+
* @param {number} M - solar mean anomal
|
|
182
|
+
* @param {number} L - ecliptic longitude
|
|
183
|
+
* @returns {number} solar transit in Julian
|
|
184
|
+
*/
|
|
185
|
+
SunMath.solarTransitJulian = function (ds, M, L) {
|
|
186
|
+
return SunMath.J2000 + ds + 0.0053 * Math.sin(M) - 0.0069 * Math.sin(2 * L);
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* hour angle
|
|
190
|
+
* @param {number} h - heigh at 0
|
|
191
|
+
* @param {number} phi - rad * lat;
|
|
192
|
+
* @param {number} dec - declination
|
|
193
|
+
* @returns {number} hour angle
|
|
194
|
+
*/
|
|
195
|
+
SunMath.hourAngle = function (h, phi, dec) {
|
|
196
|
+
return Math.acos((Math.sin(h) - Math.sin(phi) * Math.sin(dec)) / (Math.cos(phi) * Math.cos(dec)));
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* returns set time for the given sun altitude
|
|
200
|
+
* @param {number} h - heigh at 0
|
|
201
|
+
* @param {number} lw - rad * -lng
|
|
202
|
+
* @param {number} phi - rad * lat;
|
|
203
|
+
* @param {number} dec - declination
|
|
204
|
+
* @param {number} n - Julian cycle
|
|
205
|
+
* @param {number} M - solar mean anomal
|
|
206
|
+
* @param {number} L - ecliptic longitude
|
|
207
|
+
* @returns {number} set time
|
|
208
|
+
*/
|
|
209
|
+
SunMath.getSetJulian = function (h, lw, phi, dec, n, M, L) {
|
|
210
|
+
var w = SunMath.hourAngle(h, phi, dec);
|
|
211
|
+
var a = SunMath.approxTransit(w, lw, n);
|
|
212
|
+
return SunMath.solarTransitJulian(a, M, L);
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* returns set time for the given sun altitude
|
|
216
|
+
* @param {Meters} alt - altitude at 0
|
|
217
|
+
* @param {Radians} lw - -lng
|
|
218
|
+
* @param {Radians} phi - lat;
|
|
219
|
+
* @param {Radians} dec - declination
|
|
220
|
+
* @param {number} n - Julian cycle
|
|
221
|
+
* @param {number} M - solar mean anomal
|
|
222
|
+
* @param {number} L - ecliptic longitude
|
|
223
|
+
* @return {J2000Value} sunset time in days since 2000
|
|
224
|
+
*/
|
|
225
|
+
SunMath.getSetJ = function (alt, lw, phi, dec, n, M, L) {
|
|
226
|
+
var w = SunMath.hourAngle(alt, phi, dec);
|
|
227
|
+
var a = SunMath.approxTransit(w, lw, n);
|
|
228
|
+
return SunMath.solarTransitJulian(a, M, L);
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* calculates sun times for a given date and latitude/longitude
|
|
232
|
+
* @param {Date|number} dateVal Date object for calculating sun-times
|
|
233
|
+
* @param {number} lat latitude for calculating sun-times
|
|
234
|
+
* @param {number} lon longitude for calculating sun-times
|
|
235
|
+
* @param {number} [alt=0] the observer height (in meters) relative to the horizon
|
|
236
|
+
* @param {boolean} [isUtc=false] defines if the calculation should be in utc or local time (default is local)
|
|
237
|
+
* @return {SunTime} result object of sunTime
|
|
238
|
+
*/
|
|
239
|
+
SunMath.getTimes = function (dateVal, lat, lon, alt, isUtc) {
|
|
240
|
+
if (alt === void 0) { alt = 0; }
|
|
241
|
+
if (isUtc === void 0) { isUtc = false; }
|
|
242
|
+
if (isNaN(lat)) {
|
|
243
|
+
throw new Error('latitude missing');
|
|
244
|
+
}
|
|
245
|
+
if (isNaN(lon)) {
|
|
246
|
+
throw new Error('longitude missing');
|
|
247
|
+
}
|
|
248
|
+
var date = new Date(dateVal);
|
|
249
|
+
if (isUtc) {
|
|
250
|
+
date.setUTCHours(12, 0, 0, 0);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
date.setHours(12, 0, 0, 0);
|
|
254
|
+
}
|
|
255
|
+
var i = 0;
|
|
256
|
+
var len = 0;
|
|
257
|
+
var time = [];
|
|
258
|
+
var h0 = 0;
|
|
259
|
+
var Jset = 0;
|
|
260
|
+
var Jrise = 0;
|
|
261
|
+
var _a = SunMath.calculateJnoon(lon, lat, alt, date), Jnoon = _a.Jnoon, dh = _a.dh, lw = _a.lw, phi = _a.phi, dec = _a.dec, n = _a.n, M = _a.M, L = _a.L;
|
|
262
|
+
// Determine when the sun is at its highest and lowest (darkest) points.
|
|
263
|
+
var result = {
|
|
264
|
+
solarNoon: SunMath.julian2date(Jnoon),
|
|
265
|
+
nadir: SunMath.julian2date(Jnoon + 0.5), // https://github.com/mourner/suncalc/pull/125
|
|
266
|
+
};
|
|
267
|
+
// Add all other unique times using Jnoon as a reference
|
|
268
|
+
for (i = 0, len = SunMath.times.length; i < len; i += 1) {
|
|
269
|
+
time = SunMath.times[i];
|
|
270
|
+
h0 = (time[0] + dh) * DEG2RAD;
|
|
271
|
+
Jset = SunMath.getSetJ(h0, lw, phi, dec, n, M, L);
|
|
272
|
+
Jrise = Jnoon - (Jset - Jnoon);
|
|
273
|
+
result[time[1]] = SunMath.julian2date(Jrise);
|
|
274
|
+
result[time[2]] = SunMath.julian2date(Jset);
|
|
275
|
+
}
|
|
276
|
+
return result;
|
|
277
|
+
};
|
|
278
|
+
SunMath.calculateJnoon = function (lon, lat, alt, date) {
|
|
279
|
+
var lw = DEG2RAD * -lon;
|
|
280
|
+
var phi = DEG2RAD * lat;
|
|
281
|
+
var dh = SunMath.observerAngle(alt);
|
|
282
|
+
var d = SunMath.date2jSince2000(date);
|
|
283
|
+
var n = SunMath.julianCycle(d, lw);
|
|
284
|
+
var ds = SunMath.approxTransit(0, lw, n);
|
|
285
|
+
var M = SunMath.solarMeanAnomaly(ds);
|
|
286
|
+
var L = SunMath.eclipticLongitude(M);
|
|
287
|
+
var dec = SunMath.declination(L, 0);
|
|
288
|
+
var Jnoon = SunMath.solarTransitJulian(ds, M, L);
|
|
289
|
+
return { Jnoon: Jnoon, dh: dh, lw: lw, phi: phi, dec: dec, n: n, M: M, L: L };
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* calculates time for a given azimuth angle for a given date and latitude/longitude
|
|
293
|
+
* @param {number|Date} dateValue Date object or timestamp for calculating sun-time
|
|
294
|
+
* @param {Degrees} lat latitude for calculating sun-time
|
|
295
|
+
* @param {Degrees} lon longitude for calculating sun-time
|
|
296
|
+
* @param {Radians | Degrees} az azimuth for calculating sun-time
|
|
297
|
+
* @param {boolean} [isDegrees] true if the az angle is in degree and not in rad
|
|
298
|
+
* @return {Date} result time of sun-time
|
|
299
|
+
*/
|
|
300
|
+
SunMath.getSunTimeByAzimuth = function (dateValue, lat, lon, az, isDegrees) {
|
|
301
|
+
if (isDegrees === void 0) { isDegrees = false; }
|
|
302
|
+
if (isNaN(az)) {
|
|
303
|
+
throw new Error('azimuth missing');
|
|
304
|
+
}
|
|
305
|
+
if (isNaN(lat)) {
|
|
306
|
+
throw new Error('latitude missing');
|
|
307
|
+
}
|
|
308
|
+
if (isNaN(lon)) {
|
|
309
|
+
throw new Error('longitude missing');
|
|
310
|
+
}
|
|
311
|
+
if (isDegrees) {
|
|
312
|
+
az *= DEG2RAD;
|
|
313
|
+
}
|
|
314
|
+
var date = new Date(dateValue);
|
|
315
|
+
var lw = DEG2RAD * -lon;
|
|
316
|
+
var phi = DEG2RAD * lat;
|
|
317
|
+
var dateVal = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();
|
|
318
|
+
var addval = MS_PER_DAY; // / 2);
|
|
319
|
+
dateVal += addval;
|
|
320
|
+
while (addval > 200) {
|
|
321
|
+
// let nazi = this.getPosition(dateVal, lat, lng).azimuth;
|
|
322
|
+
var d = SunMath.date2jSince2000(new Date(dateVal));
|
|
323
|
+
var c = SunMath.getSunRaDec(d);
|
|
324
|
+
var H = SunMath.siderealTime(d, lw) - c.ra;
|
|
325
|
+
var newAz = SunMath.getAzimuth(H, phi, c.dec);
|
|
326
|
+
addval /= 2;
|
|
327
|
+
if (newAz < az) {
|
|
328
|
+
dateVal += addval;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
dateVal -= addval;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return new Date(Math.floor(dateVal));
|
|
335
|
+
};
|
|
336
|
+
/**
|
|
337
|
+
* get azimuth
|
|
338
|
+
* @param {number} H - siderealTime
|
|
339
|
+
* @param {Radians} phi - latitude
|
|
340
|
+
* @param {Radians} dec - The declination of the sun
|
|
341
|
+
* @returns {Radians} azimuth
|
|
342
|
+
*/
|
|
343
|
+
SunMath.getAzimuth = function (H, phi, dec) {
|
|
344
|
+
return Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(phi) - Math.tan(dec) * Math.cos(phi)) + Math.PI;
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* Convert Date to Solar Date/Time
|
|
348
|
+
*
|
|
349
|
+
* Based on https://www.pveducation.org/pvcdrom/properties-of-sunlight/solar-time
|
|
350
|
+
*
|
|
351
|
+
* See: https://github.com/mourner/suncalc/pull/156
|
|
352
|
+
*
|
|
353
|
+
* @param {date} date - Date to calculate for
|
|
354
|
+
* @param {number} utcOffset - UTC offset in hours
|
|
355
|
+
* @param {Degrees} lon - Longitude in degrees
|
|
356
|
+
* @returns {Date} - Date Object in Solar Time
|
|
357
|
+
*/
|
|
358
|
+
SunMath.getSolarTime = function (date, utcOffset, lon) {
|
|
359
|
+
// calculate the day of year
|
|
360
|
+
var start = new Date();
|
|
361
|
+
start.setUTCFullYear(date.getUTCFullYear(), 0, 1);
|
|
362
|
+
start.setUTCHours(0, 0, 0, 0);
|
|
363
|
+
var diff = date.getTime() - start.getTime();
|
|
364
|
+
var dayOfYear = Math.floor(diff / MS_PER_DAY);
|
|
365
|
+
var b = (360 / 365) * (dayOfYear - 81) * DEG2RAD;
|
|
366
|
+
var equationOfTime = 9.87 * Math.sin(2 * b) - 7.53 * Math.cos(b) - 1.5 * Math.sin(b);
|
|
367
|
+
var localSolarTimeMeridian = 15 * utcOffset;
|
|
368
|
+
var timeCorrection = equationOfTime + 4 * (lon - localSolarTimeMeridian);
|
|
369
|
+
return new Date(date.getTime() + timeCorrection * 60 * 1000);
|
|
370
|
+
};
|
|
371
|
+
SunMath.getStarAzEl = function (date, lat, lon, ra, dec) {
|
|
372
|
+
var lw = -lon * DEG2RAD;
|
|
373
|
+
var phi = lat * DEG2RAD;
|
|
374
|
+
var d = SunMath.date2jSince2000(date);
|
|
375
|
+
var H = SunMath.siderealTime(d, lw) - (ra / 12) * Math.PI;
|
|
376
|
+
var h = SunMath.elevation(H, phi, (dec / 180) * Math.PI);
|
|
377
|
+
h += SunMath.astroRefraction(h); // elevation correction for refraction
|
|
378
|
+
return {
|
|
379
|
+
az: SunMath.azimuth(H, phi, (dec / 180) * Math.PI),
|
|
380
|
+
el: h,
|
|
381
|
+
};
|
|
382
|
+
};
|
|
383
|
+
SunMath.getSunAzEl = function (date, lat, lon) {
|
|
384
|
+
var lw = -lon * DEG2RAD;
|
|
385
|
+
var phi = lat * DEG2RAD;
|
|
386
|
+
var d = SunMath.date2jSince2000(date);
|
|
387
|
+
var c = SunMath.getSunRaDec(d);
|
|
388
|
+
var H = SunMath.siderealTime(d, lw) - c.ra;
|
|
389
|
+
return {
|
|
390
|
+
az: SunMath.azimuth(H, phi, c.dec),
|
|
391
|
+
el: SunMath.elevation(H, phi, c.dec),
|
|
392
|
+
};
|
|
393
|
+
};
|
|
394
|
+
SunMath.getSunRaDec = function (d) {
|
|
395
|
+
var M = SunMath.solarMeanAnomaly(d);
|
|
396
|
+
var L = SunMath.eclipticLongitude(M);
|
|
397
|
+
return {
|
|
398
|
+
dec: SunMath.declination(L, 0),
|
|
399
|
+
ra: SunMath.rightAscension(L, 0),
|
|
400
|
+
};
|
|
401
|
+
};
|
|
402
|
+
SunMath.J1970 = 2440587.5;
|
|
403
|
+
SunMath.J2000 = 2451545;
|
|
404
|
+
SunMath.J0 = 0.0009;
|
|
405
|
+
SunMath.e = DEG2RAD * 23.4397;
|
|
406
|
+
SunMath.times = [
|
|
407
|
+
[6, 'goldenHourDawnEnd', 'goldenHourDuskStart'],
|
|
408
|
+
[-0.3, 'sunriseEnd', 'sunsetStart'],
|
|
409
|
+
[-0.833, 'sunriseStart', 'sunsetEnd'],
|
|
410
|
+
[-1, 'goldenHourDawnStart', 'goldenHourDuskEnd'],
|
|
411
|
+
[-4, 'blueHourDawnEnd', 'blueHourDuskStart'],
|
|
412
|
+
[-6, 'civilDawn', 'civilDusk'],
|
|
413
|
+
[-8, 'blueHourDawnStart', 'blueHourDuskEnd'],
|
|
414
|
+
[-12, 'nauticalDawn', 'nauticalDusk'],
|
|
415
|
+
[-15, 'amateurDawn', 'amateurDusk'],
|
|
416
|
+
[-18, 'astronomicalDawn', 'astronomicalDusk'], // ASTRO_DAWN
|
|
417
|
+
];
|
|
418
|
+
return SunMath;
|
|
419
|
+
}());
|
|
420
|
+
export { SunMath };
|
|
421
|
+
//# sourceMappingURL=sun-math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sun-math.js","sourceRoot":"","sources":["../../src/utils/sun-math.ts"],"names":[],"mappings":"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"}
|