UNPKG

7.67 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.VSOP = undefined;
7
8var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
9
10var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**
11 * @copyright 2016 commenthol
12 * @license MIT
13 * @module vsop87
14 */
15/**
16 * Converts VSOP87 data files to javascript modules
17 */
18
19var _fs = require('fs');
20
21var _fs2 = _interopRequireDefault(_fs);
22
23var _path = require('path');
24
25var _path2 = _interopRequireDefault(_path);
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
30
31var REGVSOP = /^\sVSOP87.*VARIABLE (\d) \((LBR|XYZ)\).{1,20}\*T\*\*(\d)\s{1,20}(\d{1,20}) TERMS/;
32
33// planet names in VSOP87 files
34var planets = ['mercury', 'venus', 'earth', 'mars', 'jupiter', 'saturn', 'uranus', 'neptune'];
35
36// VSOP planet extension names
37var exts = ['mer', 'ven', 'ear', 'mar', 'jup', 'sat', 'ura', 'nep'];
38
39var toFloat = function toFloat(f) {
40 return parseFloat(f, 10);
41};
42
43var VSOP = exports.VSOP = function () {
44 /**
45 * load VSOP87 planet data from VSOP87 files
46 * Data can be obtained from ftp://cdsarc.u-strasbg.fr/pub/cats/VI%2F81/
47 * @throws {Error}
48 * @param {String} planet - MERCURY VENUS EARTH MARS JUPITER SATURN URANUS NEPTUNE
49 * @param {String} dirname - folder containing VSOP87 files
50 * @param {Object} [opts]
51 * @param {String} [opts.type] - file type A, B, C, D - See vsop87.txt
52 */
53 function VSOP(planet, dirname, opts) {
54 _classCallCheck(this, VSOP);
55
56 planet = planet.toLowerCase();
57 if (~planets.indexOf(planet)) {
58 opts = opts || {};
59 this.planet = planet;
60 this.dirname = dirname;
61 this.type = opts.type || 'B'; // HELIOCENTRIC DYNAMICAL ECLIPTIC AND EQUINOX J2000
62 } else {
63 throw new Error('Invalid planet ' + planet);
64 }
65 }
66
67 /** get file extension for planet */
68
69
70 _createClass(VSOP, [{
71 key: '_getExt',
72 value: function _getExt() {
73 return exts[planets.indexOf(this.planet)];
74 }
75
76 /** load data from file */
77
78 }, {
79 key: 'load',
80 value: function load(cb) {
81 var _this = this;
82
83 var ext = this._getExt();
84 var filename = _path2.default.resolve(this.dirname, 'VSOP87' + this.type + '.' + ext);
85 _fs2.default.readFile(filename, 'utf8', function (err, data) {
86 if (!err) {
87 _this.parse(data);
88 }
89 cb(err);
90 });
91 }
92
93 /** sync loading */
94
95 }, {
96 key: 'loadSync',
97 value: function loadSync() {
98 var ext = this._getExt();
99 var filename = _path2.default.resolve(this.dirname, 'VSOP87' + this.type + '.' + ext);
100 var data = _fs2.default.readFileSync(filename, 'utf8');
101 this.parse(data);
102 }
103
104 /**
105 * parse data
106 * @param {String} data - content of VSOP file
107 */
108
109 }, {
110 key: 'parse',
111 value: function parse(data) {
112 var _this2 = this;
113
114 this.data = {};
115 var lines = data.split(/\n/);
116 var varName = void 0;
117 var ref = void 0;
118
119 lines.forEach(function (line) {
120 if (REGVSOP.test(line)) {
121 var _line$match = line.match(REGVSOP),
122 _line$match2 = _slicedToArray(_line$match, 4),
123 varCnt = _line$match2[1],
124 type = _line$match2[2],
125 pos = _line$match2[3];
126
127 varName = type.split('')[varCnt - 1];
128 if (!_this2.data[varName]) _this2.data[varName] = {};
129 ref = _this2.data[varName][pos] = [];
130 } else {
131 if (line.length > 79) {
132 ref.push([toFloat(line.substr(79, 97).trim()), toFloat(line.substr(98, 111).trim()), toFloat(line.substr(111, 131).trim())]);
133 }
134 }
135 });
136 }
137
138 /**
139 * get parsed data
140 * @return {Object}
141 * ```js
142 * { L: { '0': [[<A>, <B>, <C>], ...], '1': [], '2': [], '3': [], '4': [], '5': [] },
143 * B: { '0': [], '1': [], '2': [], '3': [], '4': [], '5': [] },
144 * R: { '0': [], '1': [], '2': [], '3': [], '4': [], '5': [] } }
145 * ```
146 */
147
148 }, {
149 key: 'getData',
150 value: function getData() {
151 return this.data;
152 }
153 }]);
154
155 return VSOP;
156}();
157
158exports.default = {
159 VSOP: VSOP
160};
\No newline at end of file