generated from ztimson/template
init
This commit is contained in:
+233
@@ -0,0 +1,233 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.json2satrec = json2satrec;
|
||||
exports.twoline2satrec = twoline2satrec;
|
||||
var _constants = require("./constants");
|
||||
var _ext = require("./ext");
|
||||
var _sgp4init = _interopRequireDefault(require("./propagation/sgp4init"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
||||
/* -----------------------------------------------------------------------------
|
||||
*
|
||||
* function twoline2satrec
|
||||
*
|
||||
* this function converts the two line element set character string data to
|
||||
* variables and initializes the sgp4 variables. several intermediate varaibles
|
||||
* and quantities are determined. note that the result is a structure so multiple
|
||||
* satellites can be processed simultaneously without having to reinitialize. the
|
||||
* verification mode is an important option that permits quick checks of any
|
||||
* changes to the underlying technical theory. this option works using a
|
||||
* modified tle file in which the start, stop, and delta time values are
|
||||
* included at the end of the second line of data. this only works with the
|
||||
* verification mode. the catalog mode simply propagates from -1440 to 1440 min
|
||||
* from epoch and is useful when performing entire catalog runs.
|
||||
*
|
||||
* author : david vallado 719-573-2600 1 mar 2001
|
||||
*
|
||||
* inputs :
|
||||
* longstr1 - first line of the tle
|
||||
* longstr2 - second line of the tle
|
||||
* typerun - type of run verification 'v', catalog 'c',
|
||||
* manual 'm'
|
||||
* typeinput - type of manual input mfe 'm', epoch 'e', dayofyr 'd'
|
||||
* opsmode - mode of operation afspc or improved 'a', 'i'
|
||||
* whichconst - which set of constants to use 72, 84
|
||||
*
|
||||
* outputs :
|
||||
* satrec - structure containing all the sgp4 satellite information
|
||||
*
|
||||
* coupling :
|
||||
* getgravconst-
|
||||
* days2mdhms - conversion of days to month, day, hour, minute, second
|
||||
* jday - convert day month year hour minute second into julian date
|
||||
* sgp4init - initialize the sgp4 variables
|
||||
*
|
||||
* references :
|
||||
* norad spacetrack report #3
|
||||
* vallado, crawford, hujsak, kelso 2006
|
||||
--------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Return a Satellite imported from two lines of TLE data.
|
||||
*
|
||||
* Provide the two TLE lines as strings `tleLine1` and `tleLine2`,
|
||||
* and select which standard set of gravitational constants you want
|
||||
* by providing `gravity_constants`:
|
||||
*
|
||||
* `sgp4.propagation.wgs72` - Standard WGS 72 model
|
||||
* `sgp4.propagation.wgs84` - More recent WGS 84 model
|
||||
* `sgp4.propagation.wgs72old` - Legacy support for old SGP4 behavior
|
||||
*
|
||||
* Normally, computations are made using letious recent improvements
|
||||
* to the algorithm. If you want to turn some of these off and go
|
||||
* back into "afspc" mode, then set `afspc_mode` to `True`.
|
||||
*/
|
||||
function twoline2satrec(longstr1, longstr2) {
|
||||
var opsmode = 'i';
|
||||
var error = 0;
|
||||
var satnum = longstr1.substring(2, 7);
|
||||
var epochyr = parseInt(longstr1.substring(18, 20), 10);
|
||||
var epochdays = parseFloat(longstr1.substring(20, 32));
|
||||
var ndot = parseFloat(longstr1.substring(33, 43));
|
||||
var nddot = parseFloat("".concat(longstr1.substring(44, 45), ".").concat(longstr1.substring(45, 50), "E").concat(longstr1.substring(50, 52)));
|
||||
var bstar = parseFloat("".concat(longstr1.substring(53, 54), ".").concat(longstr1.substring(54, 59), "E").concat(longstr1.substring(59, 61)));
|
||||
// satrec.satnum = longstr2.substring(2, 7);
|
||||
// ---- find standard orbital elements ----
|
||||
var inclo = parseFloat(longstr2.substring(8, 16)) * _constants.deg2rad;
|
||||
var nodeo = parseFloat(longstr2.substring(17, 25)) * _constants.deg2rad;
|
||||
var ecco = parseFloat(".".concat(longstr2.substring(26, 33).replace(/\s/g, '0')));
|
||||
var argpo = parseFloat(longstr2.substring(34, 42)) * _constants.deg2rad;
|
||||
var mo = parseFloat(longstr2.substring(43, 51)) * _constants.deg2rad;
|
||||
// ---- find no, ndot, nddot ----
|
||||
var no = parseFloat(longstr2.substring(52, 63)) / _constants.xpdotp;
|
||||
// satrec.nddot= satrec.nddot * Math.pow(10.0, nexp);
|
||||
// satrec.bstar= satrec.bstar * Math.pow(10.0, ibexp);
|
||||
// ---- convert to sgp4 units ----
|
||||
// satrec.ndot /= (xpdotp * 1440.0); // ? * minperday
|
||||
// satrec.nddot /= (xpdotp * 1440.0 * 1440);
|
||||
// ----------------------------------------------------------------
|
||||
// find sgp4epoch time of element set
|
||||
// remember that sgp4 uses units of days from 0 jan 1950 (sgp4epoch)
|
||||
// and minutes from the epoch (time)
|
||||
// ----------------------------------------------------------------
|
||||
// ---------------- temp fix for years from 1957-2056 -------------------
|
||||
// --------- correct fix will occur when year is 4-digit in tle ---------
|
||||
var year = epochyr < 57 ? epochyr + 2000 : epochyr + 1900;
|
||||
var mdhmsResult = (0, _ext.days2mdhms)(year, epochdays);
|
||||
var mon = mdhmsResult.mon,
|
||||
day = mdhmsResult.day,
|
||||
hr = mdhmsResult.hr,
|
||||
minute = mdhmsResult.minute,
|
||||
sec = mdhmsResult.sec;
|
||||
var jdsatepoch = (0, _ext.jday)(year, mon, day, hr, minute, sec);
|
||||
var satrec = {
|
||||
error: error,
|
||||
satnum: satnum,
|
||||
epochyr: epochyr,
|
||||
epochdays: epochdays,
|
||||
ndot: ndot,
|
||||
nddot: nddot,
|
||||
bstar: bstar,
|
||||
inclo: inclo,
|
||||
nodeo: nodeo,
|
||||
ecco: ecco,
|
||||
argpo: argpo,
|
||||
mo: mo,
|
||||
no: no,
|
||||
jdsatepoch: jdsatepoch
|
||||
};
|
||||
// ---------------- initialize the orbit at sgp4epoch -------------------
|
||||
(0, _sgp4init["default"])(satrec, {
|
||||
opsmode: opsmode,
|
||||
satn: satrec.satnum,
|
||||
epoch: satrec.jdsatepoch - 2433281.5,
|
||||
xbstar: satrec.bstar,
|
||||
xecco: satrec.ecco,
|
||||
xargpo: satrec.argpo,
|
||||
xinclo: satrec.inclo,
|
||||
xmo: satrec.mo,
|
||||
xno: satrec.no,
|
||||
xnodeo: satrec.nodeo
|
||||
});
|
||||
return satrec;
|
||||
}
|
||||
/* -----------------------------------------------------------------------------
|
||||
*
|
||||
* function json2satrec
|
||||
*
|
||||
* this function converts the OMM json data to variables and initializes the sgp4
|
||||
* variables. several intermediate varaibles and quantities are determined. note
|
||||
* that the result is a structure so multiple satellites can be processed
|
||||
* simultaneously without having to reinitialize. the verification mode is an
|
||||
* important option that permits quick checks of any changes to the underlying
|
||||
* technical theory. this option works using a modified tle file in which the
|
||||
* start, stop, and delta time values are included at the end of the second line
|
||||
* of data. this only works with the verification mode. the catalog mode simply
|
||||
* propagates from -1440 to 1440 min from epoch and is useful when performing
|
||||
* entire catalog runs.
|
||||
*
|
||||
* author : Hariharan Vitaladevuni 18 Aug 2023
|
||||
* Theodore Kruczek 19 Aug 2023
|
||||
*
|
||||
* inputs :
|
||||
* jsonobj - OMM json data
|
||||
* opsmode - mode of operation afspc or improved 'a', 'i'. Default: 'i'.
|
||||
*
|
||||
* outputs :
|
||||
* satrec - structure containing all the sgp4 satellite information
|
||||
*
|
||||
* coupling :
|
||||
* days2mdhms - conversion of days to month, day, hour, minute, second
|
||||
* jday - convert day month year hour minute second into julian date
|
||||
* sgp4init - initialize the sgp4 variables
|
||||
*
|
||||
* warning : the epoch date in OMM format is more accurate than TLE format!
|
||||
* this will result in extremely close, but different
|
||||
* position/velocity values. Depending on your use case, it may
|
||||
* be better to use twoline2satrec, but for the average user this
|
||||
* will provide comparable results.
|
||||
*
|
||||
* references :
|
||||
* https://celestrak.org/NORAD/documentation/gp-data-formats.php
|
||||
--------------------------------------------------------------------------- */
|
||||
function json2satrec(jsonobj) {
|
||||
var opsmode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'i';
|
||||
var error = 0;
|
||||
var satnum = jsonobj.NORAD_CAT_ID.toString();
|
||||
var epoch = new Date(jsonobj.EPOCH.endsWith('Z') ? jsonobj.EPOCH : jsonobj.EPOCH + 'Z');
|
||||
var year = epoch.getUTCFullYear();
|
||||
var epochyr = Number(year.toString().slice(-2));
|
||||
var epochdays = (epoch.valueOf() - new Date(Date.UTC(year, 0, 1, 0, 0, 0)).valueOf()) / (86400 * 1000) + 1;
|
||||
var ndot = Number(jsonobj.MEAN_MOTION_DOT);
|
||||
var nddot = Number(jsonobj.MEAN_MOTION_DDOT);
|
||||
var bstar = Number(jsonobj.BSTAR);
|
||||
var inclo = Number(jsonobj.INCLINATION) * _constants.deg2rad;
|
||||
var nodeo = Number(jsonobj.RA_OF_ASC_NODE) * _constants.deg2rad;
|
||||
var ecco = Number(jsonobj.ECCENTRICITY);
|
||||
var argpo = Number(jsonobj.ARG_OF_PERICENTER) * _constants.deg2rad;
|
||||
var mo = Number(jsonobj.MEAN_ANOMALY) * _constants.deg2rad;
|
||||
var no = Number(jsonobj.MEAN_MOTION) / _constants.xpdotp;
|
||||
// ----------------------------------------------------------------
|
||||
// find sgp4epoch time of element set
|
||||
// remember that sgp4 uses units of days from 0 jan 1950 (sgp4epoch)
|
||||
// and minutes from the epoch (time)
|
||||
// ----------------------------------------------------------------
|
||||
var mdhmsResult = (0, _ext.days2mdhms)(year, epochdays);
|
||||
var mon = mdhmsResult.mon,
|
||||
day = mdhmsResult.day,
|
||||
hr = mdhmsResult.hr,
|
||||
minute = mdhmsResult.minute,
|
||||
sec = mdhmsResult.sec;
|
||||
var jdsatepoch = (0, _ext.jday)(year, mon, day, hr, minute, sec);
|
||||
var satrec = {
|
||||
error: error,
|
||||
satnum: satnum,
|
||||
epochyr: epochyr,
|
||||
epochdays: epochdays,
|
||||
ndot: ndot,
|
||||
nddot: nddot,
|
||||
bstar: bstar,
|
||||
inclo: inclo,
|
||||
nodeo: nodeo,
|
||||
ecco: ecco,
|
||||
argpo: argpo,
|
||||
mo: mo,
|
||||
no: no,
|
||||
jdsatepoch: jdsatepoch
|
||||
};
|
||||
// ---------------- initialize the orbit at sgp4epoch -------------------
|
||||
(0, _sgp4init["default"])(satrec, {
|
||||
opsmode: opsmode,
|
||||
satn: satrec.satnum,
|
||||
epoch: satrec.jdsatepoch - 2433281.5,
|
||||
xbstar: satrec.bstar,
|
||||
xecco: satrec.ecco,
|
||||
xargpo: satrec.argpo,
|
||||
xinclo: satrec.inclo,
|
||||
xmo: satrec.mo,
|
||||
xno: satrec.no,
|
||||
xnodeo: satrec.nodeo
|
||||
});
|
||||
return satrec;
|
||||
}
|
||||
Reference in New Issue
Block a user