5
$\begingroup$

I'm trying to improve a site that shows the region of the Earth currently under daylight, and I need a formula that, given the current time, tells where (latitude/longitude) the sun and moon are overhead, accurate to 1 mile. Can anyone come up with one?

Ideally I'm hoping to get something JavaScript can calculate at a "reasonable speed" without recursion, loops, or extra libraries.

I've tried several things (eg, Fourier series on the Sun/Moon's RA/DEC), but nothing seems quite accurate enough.

Note: I realize my calculations for sun/moon rise/set ignore refraction and lunar parallax: for now, I'm focusing on finding the overhead positions. I realize I can pull data from a non-JavaScript CGI program (and have tried that), but it seems like a lot of unnecessary network access.

EDIT: Thanks, Dustin and everyone.

Actually, I'm aware of http://ssd.jpl.nasa.gov/?horizons and even wrote programs to download and parse their data (https://github.com/barrycarter/bcapps/blob/master/bc-email-horizons.pl and https://github.com/barrycarter/bcapps/blob/master/bc-parse-horizons.pl) with the hope of finding simple formulas (https://github.com/barrycarter/bcapps/blob/master/bc-fourier-cont.m and others), but got nowhere.

I realize I could hardcode the data into my JavaScript but that would make the script unnecessarily large.

Currently, I rebuild the script every minute (https://github.com/barrycarter/bcapps/blob/master/bc-sun-always-shines.pl) using interpolated JPLs data (the sun/moonfakex/y.txt files in https://github.com/barrycarter/bcapps/tree/master/data), but this seems insanely complicated.

This may be an inherently difficult and/or pointless question: to get accuracy of 1 mile, you have to calculate the position within 52 seconds of arc, which is considerably smaller than the 30 minute (1800 seconds) width of the sun and moon themselves.

The ultimate goal is to let people zoom into their city on google maps and watch the sunset "sweep" over their city (ie, predict the sun is setting over a certain part of the city and have people in that part of the city confirm it), but given refraction and parallax, this may be impossible.

$\endgroup$
4
  • $\begingroup$ Have you looked at ngc7000.org/astrotools/ephemtool.html ? $\endgroup$ Commented Sep 29, 2011 at 21:50
  • 2
    $\begingroup$ It might be easier to retrieve the data from an online database than to calculate it. $\endgroup$
    – Dale
    Commented Oct 2, 2011 at 4:18
  • $\begingroup$ The Jet Propulsion Lab at Cal Tech has an online ephemerides tool. I think you can set up a cron job to connect to it. JPL Cal Tech I just checked on it and it is called the telnet service. You can probably set something up through a linux machine. If you want, I can make this an answer. $\endgroup$
    – dustin
    Commented Jun 2, 2013 at 2:43
  • $\begingroup$ stjarnhimlen.se/comp/tutorial.html has great info on computing approximate positions of the Sun, Moon & planets. But for this application you need high precision lunar data, as provided by JPL Horizons (or their SPICE toolkit). Horizons now provides query- & file-based APIs, which make access relatively easy. $\endgroup$
    – PM 2Ring
    Commented Jan 10 at 3:15

2 Answers 2

2
$\begingroup$

No one else has answered so I'll do so, but I'm going to ignore details and speak to the geometry. The latitude of the subsolar point is simply Sun's declination. You should easily be able to convince yourself of that. The longitude is a bit more challenging. You know that when Sun is at the zenith, it must also be on the local celestial meridian. That means its local hour angle (LHA) must be zero. You know that LHA is the difference between local sidereal time (LST) and Sun's right ascension (RA). For LHA to be zero, you must have LHA = RA. If you know LHA and the sidereal time at Greenwich (GST), the difference between the two is the required longitude. I neglected the difference between mean and apparent sidereal time and Sun's mean, apparent, and topocentric coordinates. You can account for these.

A similar process can be applied to Moon to find the sublunar point.

$\endgroup$
2
  • $\begingroup$ Thanks, @JoeH. The difficulty I'm having is finding a simple formula for the sun's (and especially the moon's) RA and DEC that's easy to calculate and accurate enough to find the subsolar/sublunar point to within 1 mile. There are several ways to estimate this, but none are super-accurate. $\endgroup$
    – user854
    Commented Jan 3, 2013 at 15:04
  • $\begingroup$ @JoeH, Yeah! He's right! This is the method I thought when I first saw the question, but this is not accurate enough in the real world. The celestial motion is far more complex than they do it on paper $\endgroup$
    – Cheeku
    Commented Mar 3, 2013 at 23:42
-1
$\begingroup$

I think that if you want to confirm actual sunset time and compare to your calculated time, you'd also have to account for elevation.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.