I would like to calculate the right ascension of a point on earth as specified above with the Skyfield Python library, and I can not figure out how to do this.

I know that calculating the geocentric position of the respective Topos object at a specific time results in a Geocentric object that has an attribute .radec; however I am not confident that this delivers the right ascension in the TEME (Earth centered inertial frame.

  • $\begingroup$ To double check; you want the apparent RA of an object on Earth's surface (a Topos location) as seen from the center of the Earth? $\endgroup$
    – uhoh
    Aug 21, 2020 at 15:14
  • 1
    $\begingroup$ yes, exactly. I would like to obtain the RA wrt to the vernal equinox (obviously) in a TEME (True Equator Mean Equinox) frame. I know the geographical longitude, thus I need to know the RA of Greenwich to calculate the RA of the position of interest. I hope it is clear, what I mean $\endgroup$
    – fl0ta''
    Aug 21, 2020 at 15:18
  • $\begingroup$ This is certainly on-topic here but may receive a better answer in Astronomy SE. A parallel approach might be to go to Skyfield's github issues page and post a new issue. There is generally a quick response by either the package's original developer or someone else from the very active Skyfield community there. $\endgroup$
    – uhoh
    Aug 21, 2020 at 23:02
  • $\begingroup$ oh, this is Astronomy SE! anyway Github may be helpful $\endgroup$
    – uhoh
    Aug 22, 2020 at 2:43

1 Answer 1


An Earth-centered observer looking at that point on Earth’s surface would also be looking toward the point that is the zenith for that location on Earth.

Thus, you just need to find the local sidereal time (LST) for that Earth location. That gives you the right ascension on the meridian for that place and time. The meridian passes through the zenith, so that would give the R.A. of the desired point.

It looks like Skyfield has a GMST (Greenwich Mean Sidereal Time) attribute for any time object you create. To go from that to LST, convert your longitude to hours (15 degrees per hour) and subtract if it’s west, add if it’s east.

So something like this:

from skyfield.api import load
ts = load.timescale()     # Timescale object
t = ts.now()   # Time object

RA_hours = t.gmst - west_longitude_degrees/15.

where you could change to a different time if you want, and you’d have to define that longitude variable.

You’d also want to check for negative values and make sure your answer falls into the 0-24 range, adding 24 if needed.

  • $\begingroup$ This is a small nit; "that is the zenith for that location on Earth" might be better phrased "that is on the meridian for that location. What you've written applies to a spherical earth with a spherically symmetric mass distribution, but there are up to three different zeniths; one drawn from the geocenter, another normal to Earth's ellipsoid, and a third in the direction of the local gravity gradient. This doesn't affect your answer as far as RA is concerned though. $\endgroup$
    – uhoh
    Aug 22, 2020 at 16:37
  • 1
    $\begingroup$ Agreed, thanks for the clarification. $\endgroup$ Aug 22, 2020 at 17:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .