Files
astronomy/demo/nodejs
Don Cross 90a9839d18 Optimize for map-making calculation patterns.
See this discussion:
https://github.com/cosinekitty/astronomy/issues/150

For the case of calculating a map, where each pixel
on the map represents a different location on the Earth,
it is more efficient to factor out expensive calculation
of sidereal times, assuming the entire map represents
some phenomenon at a single moment in time.

For example, to determine whether the Moon is visible
at different places on the Earth, the following
functions can be calculated across thousands of
different (lat, lon) geographic coordinates around
the world:

    ObserverVector
    Rotation_EQD_HOR

Before iterating over the map pixels, a program
can call GeoMoon, then convert EQJ coordinates to EQD.

Then by passing the same time value in a loop to
ObserverVector and Rotation_EQD_HOR, the program
can calculate a vector from the observer to the Moon
in EQD coordinates, then convert EQD to HOR.
The z-coordinate of the horizontal coordinates
determines whether the Moon is above or below the
observer's horizon at that point on the Earth.

This calculation pattern performed redundant
sidereal time calculations for each pixel on the map.
I changed the code for all 4 languages to cache
sidereal time so that it only needs to be calculated
once.

In the C version of Astronomy Engine, this resulted
in a speedup factor of about 2.3 in the above use case.
(See the function MapPerformanceTest in generate/ctest.c.)
2022-01-22 20:47:46 -05:00
..
2020-08-10 11:37:34 -04:00
2020-08-10 11:37:34 -04:00

JavaScript examples for Node.js

The source file astronomy.js works as a Node.js module. Download the file into your project directory. Then in your own source file, do this:

const Astronomy = require('astronomy.js');

or install the package with npm i astronomy-engine and:

import { SearchMoonQuarter } from 'astronomy-engine';

Vanilla JS There are no external dependencies! Astronomy Engine is completely self-contained, and it always will be.

(By the way, you can use the same file astronomy.browser.js for astronomy calculations inside the browser.)


Culmination

Finds when the Sun, Moon, and planets reach their highest position in the sky on a given date, as seen by an observer at a specified location on the Earth. Culmination is also the moment a body crosses the meridian, the imaginary semicircle in the sky that passes from due north on the horizon, through the zenith (straight up), and then toward due south on the horizon.

Equator of Date

Given the right ascension and declination of a star, expressed in J2000 coordinates, converts those coordinates to right ascension and declination expressed in the Earth's equator at any given date and time. This example illustrates how to use rotation matrices to convert one coordinate system to another.

Horizon Intersection

This is a more advanced example. It shows how to use coordinate transforms to find where the ecliptic intersects with an observer's horizon at a given date and time.

Lunar Eclipse

Calculates details about the first 10 partial/total lunar eclipses after the given date and time.

Moon Phase Calculator

This example shows how to determine the Moon's current phase, and how to predict when the next few quarter phases will occur.

Positions

Calculates equatorial and horizontal coordinates of the Sun, Moon, and planets.

Rise/Set

Shows how to calculate sunrise, sunset, moonrise, and moonset times.

Seasons

Calculates the equinoxes and solstices for a given calendar year.

Triangulate

Given the geographic coordinates of two observers, and angular directions they are looking in, determines geographic coordinates of the point they are both looking at. This example demonstrates use of the geoid functions VectorObserver and ObserverVector that convert between geographic coordinates and vectors.


API Reference

Complete documentation for all the functions and types available in the JavaScript version of Astronomy Engine.