swisseph-wasm
Version:
High-precision Swiss Ephemeris WebAssembly library for astronomical calculations in JavaScript
1,092 lines (980 loc) • 34.8 kB
JavaScript
import WasamSwissEph from '../wsam/swisseph.js';
class SwissEph {
// #region Constants
SE_AUNIT_TO_KM = 149597870.7;
SE_AUNIT_TO_LIGHTYEAR = 1.5812507409819728411242766893179e-5; // = 1.0 / 63241.07708427
SE_AUNIT_TO_PARSEC = 4.8481368110952742659276431719005e-6; // = 1.0 / 206264.8062471
SE_MAX_STNAME = 256;
SE_SIDBITS = 256;
SE_SIDBIT_ECL_T0 = 256;
SE_SIDBIT_SSY_PLANE = 512;
SE_SIDBIT_USER_UT = 1024;
SE_BIT_DISC_CENTER = 256;
SE_BIT_DISC_BOTTOM = 8192;
SE_BIT_GEOCTR_NO_ECL_LAT = 128;
SE_BIT_NO_REFRACTION = 512;
SE_BIT_CIVIL_TWILIGHT = 1024;
SE_BIT_NAUTIC_TWILIGHT = 2048;
SE_BIT_ASTRO_TWILIGHT = 4096;
SE_BIT_FIXED_DISC_SIZE = 16384; // = 16 * 1024
TJD_INVALID = 99999999.0;
SIMULATE_VICTORVB = 1;
SE_PHOTOPIC_FLAG = 0;
SE_SCOTOPIC_FLAG = 1;
SE_MIXEDOPIC_FLAG = 2;
ephemeris= {
swisseph: 2, // = SEFLG_SWIEPH
moshier: 4, // = SEFLG_MOSEPH
de200: "de200.eph",
de405: "de405.eph",
de406: "de406.eph",
de406e: "de406e.eph",
de414: "de414.eph",
de421: "de421.eph",
de422: "de422.eph",
de430: "de430.eph",
de431: "de431.eph",
};
// Calendar types
SE_JUL_CAL = 0;
SE_GREG_CAL = 1;
// Planet numbers
SE_SUN = 0;
SE_MOON = 1;
SE_MERCURY = 2;
SE_VENUS = 3;
SE_EARTH = 14;
SE_MARS = 4;
SE_JUPITER = 5;
SE_SATURN = 6;
SE_URANUS = 7;
SE_NEPTUNE = 8;
SE_PLUTO = 9;
// Moon nodes
SE_MEAN_NODE = 10;
SE_TRUE_NODE = 11;
SE_MEAN_APOG = 12;
SE_OSCU_APOG = 13;
SE_INTP_APOG = 21;
SE_INTP_PERG = 22;
// Base asteroids
SE_CHIRON = 15;
SE_PHOLUS = 16;
SE_CERES = 17;
SE_PALLAS = 18;
SE_JUNO = 19;
SE_VESTA = 20;
SE_NPLANETS = 23;
SE_AST_OFFSET = 10000;
SE_VARUNA = 30000; // = SE_AST_OFFSET + 20000
SE_FICT_OFFSET = 40;
SE_FICT_OFFSET_1 = 39;
SE_FICT_MAX = 999;
SE_NFICT_ELEM = 15;
SE_COMET_OFFSET = 1000;
SE_NALL_NAT_POINTS = 38; // = SE_NPLANETS + SE_NFICT_ELEM
// Hamburger or Uranian "planets"
SE_CUPIDO = 40;
SE_HADES = 41;
SE_ZEUS = 42;
SE_KRONOS = 43;
SE_APOLLON = 44;
SE_ADMETOS = 45;
SE_VULKANUS = 46;
SE_POSEIDON = 47;
// Other fictitious bodies
SE_ISIS = 48;
SE_NIBIRU = 49;
SE_HARRINGTON = 50;
SE_NEPTUNE_LEVERRIER = 51;
SE_NEPTUNE_ADAMS = 52;
SE_PLUTO_LOWELL = 53;
SE_PLUTO_PICKERING = 54;
SE_VULCAN = 55;
SE_WHITE_MOON = 56;
SE_PROSERPINA = 57;
SE_WALDEMATH = 58;
SE_FIXSTAR = -10;
SE_ASC = 0;
SE_MC = 1;
SE_ARMC = 2;
SE_VERTEX = 3;
SE_EQUASC = 4;
SE_COASC1 = 5;
SE_COASC2 = 6;
SE_POLASC = 7;
SE_NASCMC = 8;
// Flag bits for "iflag" parameter of the "swe_calc" functions
SEFLG_JPLEPH = 1;
SEFLG_SWIEPH = 2;
SEFLG_MOSEPH = 4;
SEFLG_HELCTR = 8;
SEFLG_TRUEPOS = 16;
SEFLG_J2000 = 32;
SEFLG_NONUT = 64;
SEFLG_SPEED3 = 128;
SEFLG_SPEED = 256;
SEFLG_NOGDEFL = 512;
SEFLG_NOABERR = 1024;
SEFLG_ASTROMETRIC = 1536; // = SEFLG_NOABERR | SEFLG_NOGDEFL
SEFLG_EQUATORIAL = 2048; // = 2 *1024
SEFLG_XYZ = 4096; // = 4 * 1024
SEFLG_RADIANS = 8192; // = 8 * 1024
SEFLG_BARYCTR = 16384; // = 16 * 1024
SEFLG_TOPOCTR = 32768; // = 32 * 1024
SEFLG_ORBEL_AA = 32768; // = SEFLG_TOPOCTR
SEFLG_SIDEREAL = 65536; // = 64 * 1024
SEFLG_ICRS = 131072; // = 128 * 1024
SEFLG_DPSIDEPS_1980 = 262144; // = 256*1024
SEFLG_JPLHOR = 262144; // = SEFLG_DPSIDEPS_1980
SEFLG_JPLHOR_APPROX = 524288; // = 512*1024
SEFLG_DEFAULTEPH = 2; // = SEFLG_SWIEPH
// Sidereal modes
SE_SIDM_FAGAN_BRADLEY = 0;
SE_SIDM_LAHIRI = 1;
SE_SIDM_DELUCE = 2;
SE_SIDM_RAMAN = 3;
SE_SIDM_USHASHASHI = 4;
SE_SIDM_KRISHNAMURTI = 5;
SE_SIDM_DJWHAL_KHUL = 6;
SE_SIDM_YUKTESHWAR = 7;
SE_SIDM_JN_BHASIN = 8;
SE_SIDM_BABYL_KUGLER1 = 9;
SE_SIDM_BABYL_KUGLER2 = 10;
SE_SIDM_BABYL_KUGLER3 = 11;
SE_SIDM_BABYL_HUBER = 12;
SE_SIDM_BABYL_ETPSC = 13;
SE_SIDM_ALDEBARAN_15TAU = 14;
SE_SIDM_HIPPARCHOS = 15;
SE_SIDM_SASSANIAN = 16;
SE_SIDM_GALCENT_0SAG = 17;
SE_SIDM_J2000 = 18;
SE_SIDM_J1900 = 19;
SE_SIDM_B1950 = 20;
SE_SIDM_SURYASIDDHANTA = 21;
SE_SIDM_SURYASIDDHANTA_MSUN = 22;
SE_SIDM_ARYABHATA = 23;
SE_SIDM_ARYABHATA_MSUN = 24;
SE_SIDM_SS_REVATI = 25;
SE_SIDM_SS_CITRA = 26;
SE_SIDM_TRUE_CITRA = 27;
SE_SIDM_TRUE_REVATI = 28;
SE_SIDM_TRUE_PUSHYA = 29;
SE_SIDM_GALCENT_RGILBRAND = 30;
SE_SIDM_GALEQU_IAU1958 = 31;
SE_SIDM_GALEQU_TRUE = 32;
SE_SIDM_GALEQU_MULA = 33;
SE_SIDM_GALALIGN_MARDYKS = 34;
SE_SIDM_TRUE_MULA = 35;
SE_SIDM_GALCENT_MULA_WILHELM = 36;
SE_SIDM_ARYABHATA_522 = 37;
SE_SIDM_BABYL_BRITTON = 38;
SE_SIDM_TRUE_SHEORAN = 39;
SE_SIDM_GALCENT_COCHRANE = 40;
SE_SIDM_GALEQU_FIORENZA = 41;
SE_SIDM_VALENS_MOON = 42;
SE_SIDM_USER = 255;
SE_NSIDM_PREDEF = 43;
// Used for "swe_nod_aps" function
SE_NODBIT_MEAN = 1;
SE_NODBIT_OSCU = 2;
SE_NODBIT_OSCU_BAR = 4;
SE_NODBIT_FOPOINT = 256;
// Used for eclipse computations
SE_ECL_NUT = -1;
SE_ECL_CENTRAL = 1;
SE_ECL_NONCENTRAL = 2;
SE_ECL_TOTAL = 4;
SE_ECL_ANNULAR = 8;
SE_ECL_PARTIAL = 16;
SE_ECL_ANNULAR_TOTAL = 32;
SE_ECL_PENUMBRAL = 64;
SE_ECL_ALLTYPES_SOLAR = 63; // = SE_ECL_CENTRAL | SE_ECL_NONCENTRAL | SE_ECL_TOTAL | SE_ECL_ANNULAR | SE_ECL_PARTIAL | SE_ECL_ANNULAR_TOTAL
SE_ECL_ALLTYPES_LUNAR = 84; // = SE_ECL_TOTAL | SE_ECL_PARTIAL | SE_ECL_PENUMBRAL
SE_ECL_VISIBLE = 128;
SE_ECL_MAX_VISIBLE = 256;
SE_ECL_1ST_VISIBLE = 512;
SE_ECL_PARTBEG_VISIBLE = 512;
SE_ECL_2ND_VISIBLE = 1024;
SE_ECL_TOTBEG_VISIBLE = 1024;
SE_ECL_3RD_VISIBLE = 2048;
SE_ECL_TOTEND_VISIBLE = 2048;
SE_ECL_4TH_VISIBLE = 4096;
SE_ECL_PARTEND_VISIBLE = 4096;
SE_ECL_PENUMBBEG_VISIBLE = 8192;
SE_ECL_PENUMBEND_VISIBLE = 16384;
SE_ECL_OCC_BEG_DAYLIGHT = 8192;
SE_ECL_OCC_END_DAYLIGHT = 16384;
SE_ECL_ONE_TRY = 32768; // = 32 * 1024
// Used for "swe_rise_transit"
SE_CALC_RISE = 1;
SE_CALC_SET = 2;
SE_CALC_MTRANSIT = 4;
SE_CALC_ITRANSIT = 8;
// Used for "swe_azalt" and "swe_azalt_rev" functions
SE_ECL2HOR = 0;
SE_EQU2HOR = 1;
SE_HOR2ECL = 0;
SE_HOR2EQU = 1;
// Used for "swe_refrac" function
SE_TRUE_TO_APP = 0;
SE_APP_TO_TRUE = 1;
// Rounding flags for "swe_split_deg" function
SE_SPLIT_DEG_ROUND_SEC = 1;
SE_SPLIT_DEG_ROUND_MIN = 2;
SE_SPLIT_DEG_ROUND_DEG = 4;
SE_SPLIT_DEG_ZODIACAL = 8;
SE_SPLIT_DEG_KEEP_SIGN = 16;
SE_SPLIT_DEG_KEEP_DEG= 32;
SE_SPLIT_DEG_NAKSHATRA = 1024;
// Used for heliacal functions
SE_HELIACAL_RISING = 1;
SE_HELIACAL_SETTING = 2;
SE_MORNING_FIRST = 1; // = SE_HELIACAL_RISING
SE_EVENING_LAST = 2; // = SE_HELIACAL_SETTING
SE_EVENING_FIRST = 3;
SE_MORNING_LAST = 4;
SE_ACRONYCHAL_RISING = 5;
SE_ACRONYCHAL_SETTING = 6;
SE_COSMICAL_SETTING = 6; // = SE_ACRONYCHAL_SETTING
SE_HELFLAG_LONG_SEARCH = 128;
SE_HELFLAG_HIGH_PRECISION = 256;
SE_HELFLAG_OPTICAL_PARAMS = 512;
SE_HELFLAG_NO_DETAILS = 1024;
SE_HELFLAG_SEARCH_1_PERIOD = 2048; // = 1 << 11
SE_HELFLAG_VISLIM_DARK = 4096; // = 1 << 12
SE_HELFLAG_VISLIM_NOMOON = 8192; // = 1 << 13
SE_HELFLAG_VISLIM_PHOTOPIC = 16384; // = 1 << 14
SE_HELFLAG_AVKIND_VR = 32768; // = 1 << 15
SE_HELFLAG_AVKIND_PTO = 65536; // = 1 << 16
SE_HELFLAG_AVKIND_MIN7 = 131072; // = 1 << 17
SE_HELFLAG_AVKIND_MIN9 = 262144; // = 1 << 18
SE_HELFLAG_AVKIND = 491520; // = SE_HELFLAG_AVKIND_VR | SE_HELFLAG_AVKIND_PTO | SE_HELFLAG_AVKIND_MIN7 | SE_HELFLAG_AVKIND_MIN9
// #endregion Constants
// Initializes the Swiss Ephemeris WebAssembly module
async initSwissEph() {
this.SweModule = await WasamSwissEph();
this.set_ephe_path('sweph');
}
set_ephe_path(path) {
return this.SweModule.ccall('swe_set_ephe_path', 'string', ['string'], [path]);
}
house_pos(armc, geoLat, eps, hsys, lon, lat) {
return this.SweModule.ccall('swe_houses_pos', 'number', ['number', 'number', 'number', 'string', 'number', 'number'], [armc, geoLat, eps, hsys, lon, lat]);
}
julday(year, month, day, hour) {
return this.SweModule.ccall('swe_julday', 'number', ['number', 'number', 'number', 'number', 'number'], [year, month, day, hour, 1]);
}
calc_ut(julianDay, body, flags) {
const buffer = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall('swe_calc_ut', 'number', ['number', 'number', 'number','pointer'], [julianDay, body, flags,buffer]);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, buffer, 4);
this.SweModule._free(buffer);
return result;
}
deltat(julianDay) {
return this.SweModule.ccall('swe_deltat', 'number', ['number'], [julianDay]);
}
time_equ(julianDay) {
return this.SweModule.ccall('swe_time_equ', 'number', ['number'], [julianDay]);
}
sidtime0(julianDay, eps, nut) {
return this.SweModule.ccall('swe_sidtime0', 'number', ['number', 'number', 'number'], [julianDay, eps, nut]);
}
sidtime(julianDay) {
return this.SweModule.ccall('swe_sidtime', 'number', ['number'], [julianDay]);
}
cotrans(xpo, eps) {
return this.SweModule.ccall('swe_cotrans', 'void', ['array', 'number'], [xpo, eps]);
}
cotrans_sp(xpo, eps) {
return this.SweModule.ccall('swe_cotrans_sp', 'void', ['array', 'number'], [xpo, eps]);
}
get_tid_acc() {
return this.SweModule.ccall('swe_get_tid_acc', 'number', [], []);
}
set_tid_acc(acceleration) {
this.SweModule.ccall('swe_set_tid_acc', 'void', ['number'], [acceleration]);
}
degnorm(x) {
return this.SweModule.ccall('swe_degnorm', 'number', ['number'], [x]);
}
radnorm(x) {
return this.SweModule.ccall('swe_radnorm', 'number', ['number'], [x]);
}
rad_midp(x1, x2) {
return this.SweModule.ccall('swe_rad_midp', 'number', ['number', 'number'], [x1, x2]);
}
deg_midp(x1, x2) {
return this.SweModule.ccall('swe_deg_midp', 'number', ['number', 'number'], [x1, x2]);
}
split_deg(ddeg, roundFlag) {
const resultPtr = this.SweModule._malloc(5 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall('swe_split_deg', 'void', ['number', 'number', 'pointer'], [ddeg, roundFlag, resultPtr]);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 5);
this.SweModule._free(resultPtr);
return {
degree: result[0],
min: result[1],
second: result[2],
fraction: result[3],
sign: result[4],
};
}
csnorm(p) {
return this.SweModule.ccall('swe_csnorm', 'number', ['number'], [p]);
}
difcsn(p1, p2) {
return this.SweModule.ccall('swe_difcsn', 'number', ['number', 'number'], [p1, p2]);
}
difdegn(p1, p2) {
return this.SweModule.ccall('swe_difdegn', 'number', ['number', 'number'], [p1, p2]);
}
difcs2n(p1, p2) {
return this.SweModule.ccall('swe_difcs2n', 'number', ['number', 'number'], [p1, p2]);
}
difdeg2n(p1, p2) {
return this.SweModule.ccall('swe_difdeg2n', 'number', ['number', 'number'], [p1, p2]);
}
difrad2n(p1, p2) {
return this.SweModule.ccall('swe_difrad2n', 'number', ['number', 'number'], [p1, p2]);
}
csroundsec(x) {
return this.SweModule.ccall('swe_csroundsec', 'number', ['number'], [x]);
}
d2l(x) {
return this.SweModule.ccall('swe_d2l', 'number', ['number'], [x]);
}
day_of_week(julianDay) {
return this.SweModule.ccall('swe_day_of_week', 'number', ['number'], [julianDay]);
}
cs2timestr(t, sep, suppressZero) {
return this.SweModule.ccall('swe_cs2timestr', 'string', ['number', 'number', 'number'], [t, sep, suppressZero]);
}
cs2lonlatstr(t, pChar, mChar) {
return this.SweModule.ccall('swe_cs2lonlatstr', 'string', ['number', 'string', 'string'], [t, pChar, mChar]);
}
cs2degstr(t) {
return this.SweModule.ccall('swe_cs2degstr', 'string', ['number'], [t]);
}
date_conversion(year, month, day, hour, gregflag) {
const julianDay = this.SweModule.ccall(
'swe_date_conversion',
'number',
['number', 'number', 'number', 'number', 'number'],
[year, month, day, hour, gregflag]
);
return julianDay;
}
revjul(julianDay, gregflag) {
const buffer = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall(
'swe_revjul',
'void',
['number', 'number', 'pointer'],
[julianDay, gregflag, buffer]
);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, buffer, 4);
this.SweModule._free(buffer);
return {
year: result[0],
month: result[1],
day: result[2],
hour: result[3],
};
}
utc_to_jd(year, month, day, hour, minute, second, gregflag) {
const resultPtr = this.SweModule._malloc(2 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall(
'swe_utc_to_jd',
'void',
['number', 'number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[year, month, day, hour, minute, second, gregflag, resultPtr]
);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 2);
this.SweModule._free(resultPtr);
return {
julianDayET: result[0],
julianDayUT: result[1],
};
}
jdet_to_utc(julianDay, gregflag) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall(
'swe_jdet_to_utc',
'void',
['number', 'number', 'pointer'],
[julianDay, gregflag, resultPtr]
);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(resultPtr);
return {
year: result[0],
month: result[1],
day: result[2],
hour: result[3],
minute: result[4],
second: result[5],
};
}
jdut1_to_utc(julianDay, gregflag) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall(
'swe_jdut1_to_utc',
'void',
['number', 'number', 'pointer'],
[julianDay, gregflag, resultPtr]
);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(resultPtr);
return {
year: result[0],
month: result[1],
day: result[2],
hour: result[3],
minute: result[4],
second: result[5],
};
}
utc_time_zone(year, month, day, hour, minute, second, timezone) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
this.SweModule.ccall(
'swe_utc_time_zone',
'void',
['number', 'number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[year, month, day, hour, minute, second, timezone, resultPtr]
);
const result = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(resultPtr);
return {
year: result[0],
month: result[1],
day: result[2],
hour: result[3],
minute: result[4],
second: result[5],
};
}
version() {
return this.SweModule.ccall('swe_version', 'string', [], []);
}
calc(julianDay, body, flags) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
const errorBuffer = this.SweModule._malloc(256);
const retFlag = this.SweModule.ccall(
'swe_calc',
'number',
['number', 'number', 'number', 'pointer', 'pointer'],
[julianDay, body, flags, resultPtr, errorBuffer]
);
if (retFlag < 0) {
const error = this.SweModule.UTF8ToString(errorBuffer);
this.SweModule._free(resultPtr);
this.SweModule._free(errorBuffer);
throw new Error(`Error in swe_calc: ${error}`);
}
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(resultPtr);
this.SweModule._free(errorBuffer);
return {
longitude: results[0],
latitude: results[1],
distance: results[2],
longitudeSpeed: results[3],
latitudeSpeed: results[4],
distanceSpeed: results[5],
};
}
fixstar(star, julianDay, flags) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(star.length + 1);
this.SweModule.stringToUTF8(star, starBuffer, star.length + 1);
const retFlag = this.SweModule.ccall(
'swe_fixstar',
'number',
['pointer', 'number', 'number', 'pointer'],
[starBuffer, julianDay, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
fixstar_mag(star) {
const magBuffer = this.SweModule._malloc(8);
const starBuffer = this.SweModule._malloc(star.length + 1);
this.SweModule.stringToUTF8(star, starBuffer, star.length + 1);
const retFlag = this.SweModule.ccall(
'swe_fixstar_mag',
'number',
['pointer', 'pointer'],
[starBuffer, magBuffer]
);
const magnitude = this.SweModule.HEAPF64[magBuffer / 8];
this.SweModule._free(starBuffer);
this.SweModule._free(magBuffer);
return retFlag < 0 ? null : magnitude;
}
fixstar2(star, julianDay, flags) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(star.length + 1);
this.SweModule.stringToUTF8(star, starBuffer, star.length + 1);
const retFlag = this.SweModule.ccall(
'swe_fixstar2',
'number',
['pointer', 'number', 'number', 'pointer'],
[starBuffer, julianDay, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
fixstar2_ut(star, julianDay, flags) {
const resultPtr = this.SweModule._malloc(6 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(star.length + 1);
this.SweModule.stringToUTF8(star, starBuffer, star.length + 1);
const retFlag = this.SweModule.ccall(
'swe_fixstar2_ut',
'number',
['pointer', 'number', 'number', 'pointer'],
[starBuffer, julianDay, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 6);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
fixstar2_mag(star) {
const magBuffer = this.SweModule._malloc(8);
const starBuffer = this.SweModule._malloc(star.length + 1);
this.SweModule.stringToUTF8(star, starBuffer, star.length + 1);
const retFlag = this.SweModule.ccall(
'swe_fixstar2_mag',
'number',
['pointer', 'pointer'],
[starBuffer, magBuffer]
);
const magnitude = this.SweModule.HEAPF64[magBuffer / 8];
this.SweModule._free(starBuffer);
this.SweModule._free(magBuffer);
return retFlag < 0 ? null : magnitude;
}
close() {
this.SweModule.ccall('swe_close', 'void', [], []);
}
set_jpl_file(filename) {
const fileBuffer = this.SweModule._malloc(filename.length + 1);
this.SweModule.stringToUTF8(filename, fileBuffer, filename.length + 1);
const result = this.SweModule.ccall(
'swe_set_jpl_file',
'string',
['pointer'],
[fileBuffer]
);
this.SweModule._free(fileBuffer);
return result;
}
get_planet_name(planetId) {
return this.SweModule.ccall(
'swe_get_planet_name',
'string',
['number'],
[planetId]
);
}
set_topo(longitude, latitude, altitude) {
this.SweModule.ccall(
'swe_set_topo',
'void',
['number', 'number', 'number'],
[longitude, latitude, altitude]
);
}
set_sid_mode(sidMode, t0, ayanT0) {
this.SweModule.ccall(
'swe_set_sid_mode',
'void',
['number', 'number', 'number'],
[sidMode, t0, ayanT0]
);
}
get_ayanamsa(julianDay) {
return this.SweModule.ccall(
'swe_get_ayanamsa',
'number',
['number'],
[julianDay]
);
}
get_ayanamsa_ut(julianDay) {
return this.SweModule.ccall(
'swe_get_ayanamsa_ut',
'number',
['number'],
[julianDay]
);
}
get_ayanamsa_ex(julianDay, ephemerisFlag) {
const resultPtr = this.SweModule._malloc(8);
const retFlag = this.SweModule.ccall(
'swe_get_ayanamsa_ex',
'number',
['number', 'number', 'pointer'],
[julianDay, ephemerisFlag, resultPtr]
);
const result = this.SweModule.HEAPF64[resultPtr / 8];
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : result;
}
get_ayanamsa_ex_ut(julianDay, ephemerisFlag) {
const resultPtr = this.SweModule._malloc(8);
const retFlag = this.SweModule.ccall(
'swe_get_ayanamsa_ex_ut',
'number',
['number', 'number', 'pointer'],
[julianDay, ephemerisFlag, resultPtr]
);
const result = this.SweModule.HEAPF64[resultPtr / 8];
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : result;
}
get_ayanamsa_name(siderealMode) {
return this.SweModule.ccall(
'swe_get_ayanamsa_name',
'string',
['number'],
[siderealMode]
);
}
nod_aps(julianDay, planet, flags, method) {
return this.SweModule.ccall(
'swe_nod_aps',
'number',
['number', 'number', 'number', 'number'],
[julianDay, planet, flags, method]
);
}
nod_aps_ut(julianDay, planet, flags, method) {
return this.SweModule.ccall(
'swe_nod_aps_ut',
'number',
['number', 'number', 'number', 'number'],
[julianDay, planet, flags, method]
);
}
get_orbital_elements(julianDay, planet, flags) {
return this.SweModule.ccall(
'swe_get_orbital_elements',
'number',
['number', 'number', 'number'],
[julianDay, planet, flags]
);
}
orbit_max_min_true_distance(julianDay, planet, flags) {
return this.SweModule.ccall(
'swe_orbit_max_min_true_distance',
'number',
['number', 'number', 'number'],
[julianDay, planet, flags]
);
}
heliacal_ut(julianDayStart, geoPos, atmosData, observerData, objectName, eventType, flags) {
return this.SweModule.ccall(
'swe_heliacal_ut',
'number',
['number', 'array', 'array', 'array', 'string', 'number', 'number'],
[julianDayStart, geoPos, atmosData, observerData, objectName, eventType, flags]
);
}
heliacal_pheno_ut(julianDay, geoPos, atmosData, observerData, objectName, eventType, heliacalFlag) {
return this.SweModule.ccall(
'swe_heliacal_pheno_ut',
'number',
['number', 'array', 'array', 'array', 'string', 'number', 'number'],
[julianDay, geoPos, atmosData, observerData, objectName, eventType, heliacalFlag]
);
}
vis_limit_mag(julianDay, geoPos, atmosData, observerData, objectName, heliacalFlag) {
return this.SweModule.ccall(
'swe_vis_limit_mag',
'number',
['number', 'array', 'array', 'array', 'string', 'number'],
[julianDay, geoPos, atmosData, observerData, objectName, heliacalFlag]
);
}
houses(julianDay, geoLat, geoLon, houseSystem) {
return this.SweModule.ccall(
'swe_houses',
'number',
['number', 'number', 'number', 'string'],
[julianDay, geoLat, geoLon, houseSystem]
);
}
houses_ex(julianDay, iflag, geoLat, geoLon, houseSystem) {
return this.SweModule.ccall(
'swe_houses_ex',
'number',
['number', 'number', 'number', 'number', 'string'],
[julianDay, iflag, geoLat, geoLon, houseSystem]
);
}
houses_ex2(julianDay, iflag, geoLat, geoLon, houseSystem) {
return this.SweModule.ccall(
'swe_houses_ex2',
'number',
['number', 'number', 'number', 'number', 'string'],
[julianDay, iflag, geoLat, geoLon, houseSystem]
);
}
houses_armc(armc, geoLat, eps, houseSystem) {
return this.SweModule.ccall(
'swe_houses_armc',
'number',
['number', 'number', 'number', 'string'],
[armc, geoLat, eps, houseSystem]
);
}
houses_armc_ex2(armc, geoLat, eps, houseSystem) {
return this.SweModule.ccall(
'swe_houses_armc_ex2',
'number',
['number', 'number', 'number', 'string'],
[armc, geoLat, eps, houseSystem]
);
}
sol_eclipse_where(julianDay, flags) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_sol_eclipse_where',
'number',
['number', 'number', 'pointer'],
[julianDay, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_occult_where(julianDay, planet, starName, flags) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(starName.length + 1);
this.SweModule.stringToUTF8(starName, starBuffer, starName.length + 1);
const retFlag = this.SweModule.ccall(
'swe_lun_occult_where',
'number',
['number', 'number', 'pointer', 'number', 'pointer'],
[julianDay, planet, starBuffer, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
sol_eclipse_how(julianDay, flags, longitude, latitude, altitude) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_sol_eclipse_how',
'number',
['number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, flags, longitude, latitude, altitude, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
sol_eclipse_when_loc(julianDayStart, flags, longitude, latitude, altitude, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_sol_eclipse_when_loc',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDayStart, flags, longitude, latitude, altitude, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_occult_when_loc(julianDayStart, planet, starName, flags, longitude, latitude, altitude, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(starName.length + 1);
this.SweModule.stringToUTF8(starName, starBuffer, starName.length + 1);
const retFlag = this.SweModule.ccall(
'swe_lun_occult_when_loc',
'number',
['number', 'number', 'pointer', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDayStart, planet, starBuffer, flags, longitude, latitude, altitude, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
sol_eclipse_when_glob(julianDayStart, flags, eclipseType, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_sol_eclipse_when_glob',
'number',
['number', 'number', 'number', 'number', 'pointer'],
[julianDayStart, flags, eclipseType, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_occult_when_glob(julianDayStart, planet, starName, flags, eclipseType, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const starBuffer = this.SweModule._malloc(starName.length + 1);
this.SweModule.stringToUTF8(starName, starBuffer, starName.length + 1);
const retFlag = this.SweModule.ccall(
'swe_lun_occult_when_glob',
'number',
['number', 'number', 'pointer', 'number', 'number', 'number', 'pointer'],
[julianDayStart, planet, starBuffer, flags, eclipseType, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(starBuffer);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_eclipse_how(julianDay, flags, longitude, latitude, altitude) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_lun_eclipse_how',
'number',
['number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, flags, longitude, latitude, altitude, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_eclipse_when(julianDayStart, flags, eclipseType, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_lun_eclipse_when',
'number',
['number', 'number', 'number', 'number', 'pointer'],
[julianDayStart, flags, eclipseType, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
lun_eclipse_when_loc(julianDayStart, flags, longitude, latitude, altitude, backward) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_lun_eclipse_when_loc',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDayStart, flags, longitude, latitude, altitude, backward, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
pheno(julianDay, planet, flags) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_pheno',
'number',
['number', 'number', 'number', 'pointer'],
[julianDay, planet, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
pheno_ut(julianDay, planet, flags) {
const resultPtr = this.SweModule._malloc(8 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_pheno_ut',
'number',
['number', 'number', 'number', 'pointer'],
[julianDay, planet, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 8);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
refrac(julianDay, geoLat, geoLon, altitude, pressure, temperature) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_refrac',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, geoLat, geoLon, altitude, pressure, temperature, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
refrac_extended(julianDay, geoLat, geoLon, altitude, pressure, temperature, distance) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_refrac_extended',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, geoLat, geoLon, altitude, pressure, temperature, distance, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
set_lapse_rate(lapseRate) {
this.SweModule.ccall(
'swe_set_lapse_rate',
'void',
['number'],
[lapseRate]
);
}
azal(julianDay, geoLat, geoLon, altitude, planet) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_azalt',
'number',
['number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, geoLat, geoLon, altitude, planet, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
azal_rev(julianDay, geoLat, geoLon, altitude, planet) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_azalt_rev',
'number',
['number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, geoLat, geoLon, altitude, planet, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
rise_trans(julianDay, planet, longitude, latitude, altitude, flags) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_rise_trans',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, planet, longitude, latitude, altitude, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
rise_trans_true_hor(julianDay, planet, longitude, latitude, altitude, flags) {
const resultPtr = this.SweModule._malloc(4 * Float64Array.BYTES_PER_ELEMENT);
const retFlag = this.SweModule.ccall(
'swe_rise_trans_true_hor',
'number',
['number', 'number', 'number', 'number', 'number', 'number', 'pointer'],
[julianDay, planet, longitude, latitude, altitude, flags, resultPtr]
);
const results = new Float64Array(this.SweModule.HEAPF64.buffer, resultPtr, 4);
this.SweModule._free(resultPtr);
return retFlag < 0 ? null : results;
}
}
export default SwissEph;