# How can I calculate the right ascension of an observer on Earth's surface in the TEME frame with python.skyfield?

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.

• 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?
– uhoh
Aug 21 '20 at 15:14
• 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 Aug 21 '20 at 15:18
• 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.
– uhoh
Aug 21 '20 at 23:02
• oh, this is Astronomy SE! anyway Github may be helpful
– uhoh
Aug 22 '20 at 2:43

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:


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.

• 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.
– uhoh
Aug 22 '20 at 16:37
• Agreed, thanks for the clarification. Aug 22 '20 at 17:46