django-vue3-admin-web/node_modules/astronomia/lib/vsop87.cjs
2025-10-20 21:21:14 +08:00

135 lines
3.4 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var fs = require('fs');
var path = require('path');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
/**
* @copyright 2016 commenthol
* @license MIT
* @module vsop87
*/
const REGVSOP = /^\sVSOP87.*VARIABLE (\d) \((LBR|XYZ)\).{1,20}\*T\*\*(\d)\s{1,20}(\d{1,20}) TERMS/;
// planet names in VSOP87 files
const planets = [
'mercury',
'venus',
'earth',
'mars',
'jupiter',
'saturn',
'uranus',
'neptune'
];
// VSOP planet extension names
const exts = ['mer', 'ven', 'ear', 'mar', 'jup', 'sat', 'ura', 'nep'];
const toFloat = function (f) {
return parseFloat(f, 10)
};
class VSOP {
/**
* load VSOP87 planet data from VSOP87 files
* Data can be obtained from ftp://cdsarc.u-strasbg.fr/pub/cats/VI%2F81/
* @throws {Error}
* @param {String} planet - MERCURY VENUS EARTH MARS JUPITER SATURN URANUS NEPTUNE
* @param {String} dirname - folder containing VSOP87 files
* @param {Object} [opts]
* @param {String} [opts.type] - file type A, B, C, D - See vsop87.txt
*/
constructor (planet, dirname, opts) {
planet = planet.toLowerCase();
if (~planets.indexOf(planet)) {
opts = opts || {};
this.planet = planet;
this.dirname = dirname;
this.type = opts.type || 'B'; // HELIOCENTRIC DYNAMICAL ECLIPTIC AND EQUINOX J2000
} else {
throw (new Error('Invalid planet ' + planet))
}
}
/** get file extension for planet */
_getExt () {
return exts[planets.indexOf(this.planet)]
}
/** load data from file */
load (cb) {
const ext = this._getExt();
const filename = path__default["default"].resolve(this.dirname, 'VSOP87' + this.type + '.' + ext);
fs__default["default"].readFile(filename, 'utf8', (err, data) => {
if (!err) {
this.parse(data);
}
cb(err);
});
}
/** sync loading */
loadSync () {
const ext = this._getExt();
const filename = path__default["default"].resolve(this.dirname, 'VSOP87' + this.type + '.' + ext);
const data = fs__default["default"].readFileSync(filename, 'utf8');
this.parse(data);
}
/**
* parse data
* @param {String} data - content of VSOP file
*/
parse (data) {
this.data = {};
const lines = data.split(/\n/);
let varName;
let ref;
lines.forEach((line) => {
if (REGVSOP.test(line)) {
const [, varCnt, type, pos] = line.match(REGVSOP);
varName = type.split('')[varCnt - 1];
if (!this.data[varName]) this.data[varName] = {};
ref = this.data[varName][pos] = [];
} else {
if (line.length > 79) {
ref.push([
toFloat(line.substr(79, 97).trim()),
toFloat(line.substr(98, 111).trim()),
toFloat(line.substr(111, 131).trim())
]);
}
}
});
}
/**
* get parsed data
* @return {Object}
* ```js
* { L: { '0': [[<A>, <B>, <C>], ...], '1': [], '2': [], '3': [], '4': [], '5': [] },
* B: { '0': [], '1': [], '2': [], '3': [], '4': [], '5': [] },
* R: { '0': [], '1': [], '2': [], '3': [], '4': [], '5': [] } }
* ```
*/
getData () {
return this.data
}
}
var vsop87 = {
VSOP
};
exports.VSOP = VSOP;
exports["default"] = vsop87;