Search code examples
c++algorithmlocationcoordinate-transformationsatellite

Getting a lattitude & longitude point on earth from ECI coordinates of a satellite


I am trying to write software in C++, that will transform ECI coordinates of a satellite at a particular time into a point on a 2D map of earth. I know ECI coordinates are easily accessible from TLE data. But it doesn't say anything about what particular latitude and longitude spot on earth the satellite is above.

My question is, how do you know the orientation of the earth at a particular time ( time when TLE was acquired, or in future after orbit propagation ) ? And also, how do you include the effects of precession and nutation when calculating future points, to reach a higher degree of accuracy ? Thank you.


Solution

  • This is a surprisingly difficult problem. It is generally solved in a two step process:

    1. ECI is a 4 dimensional system, it is fixed while the Earth rotates. So one must first calculate the earth fixed coordinates (ECEF). There are various nuances which can be included, such as the precession of the Earth, but I won't elaborate on them. Included references show how to do make the transformations.
    2. Calculate the Lat/Long from ECEF. The traditional way is via a Newton-Ralphson transform. This is fairly straightforward, but can vary a bit depending on how you model the Earth. There's a javascript calculator that can do this, look at the source for the formula, or you can take a look at this website.

    Or if you want, you can just use the SConvert Library, which manages all such transformations for you. It's written in native C++, so that should work for you.

    Some resources:

    In general, coordinate transforms are not very well documented on the internet for this sort of stuff, so you might need to find a book with said transfrormations.