This was asked once before, but I believe there was no clear answer given and accepted.

The ISS has an orbital period of 92.9 minutes, or 5574 seconds. If it were in a completely equatorial orbit, this would give it a surface speed of 7190 m/s (40,075,000 / 5574). However, the ISS also has an orbital inclination of 51.64 degrees, meaning as it moves the surface of the earth also moves at a speed of roughly 464 m/s.

I've tackled this problem several times but my high school trigonometry fails me. How would one go about calculating this?

EDIT: Since asking this question I've realized the surface speed depends on the ISS's latitude, and varies quite a bit over an orbit. A more clear question to ask would be - how would one derive a function for surface velocity dependent on latitude?

  • 6
    $\begingroup$ The inclination of the ISS' orbit means that its speed relative to the Earth's surface beneath it varies constantly over its orbit, even if that orbit was circular. Do you want a maximum, a minimum, an average, or a range? $\endgroup$
    – notovny
    Commented Nov 23, 2022 at 13:57
  • $\begingroup$ @notovny Yes, I failed to account for this when I was doing my own calculations. My original intent was to figure out how far you'd travel across the earth's surface in a period of time, but I've since realized that it's fairly complex. Wouldn't there be a function dependent on the latitude that could be calculated, and then using that be able to calculate speed at specific points, as well as deriving the maximum, minimum, average, and range based on that function? $\endgroup$ Commented Nov 23, 2022 at 14:20
  • $\begingroup$ It will involve more than just latitude as the direction of travel of the ISS changes relative to the Earth's surface. If you really want to do it, there are a multitude of implementations of the SDP4/SGP4 algorithm which will compute the IIS's position and velocity (just search for SGP4 and your language of choice). You'll want the results in the ECEF frame, and that directly gives you the velocity relative to the Earth's surface. This is a descent place to start: celestrak.org/software/vallado-sw.php $\endgroup$ Commented Nov 23, 2022 at 15:44
  • $\begingroup$ @GregMiller Thank you! I'll have a read. $\endgroup$ Commented Nov 23, 2022 at 16:42
  • $\begingroup$ Do you mean "ground speed"? I don't think many people call it "surface velocity". $\endgroup$
    – Wyck
    Commented Nov 23, 2022 at 21:08

4 Answers 4


JPL Horizons has trajectory data for the International Space Station, SPKID = -125544

Revised: Nov 23, 2022
Trajectory is TLE-based. Predicts run for 4 weeks into future, but are of low accuracy for times more than a few days past the revision date above.

Horizons can give position and velocity vectors of the ISS relative to the centre of the Earth in the ICRF frame. Unfortunately, it doesn't do the ECEF frame, so I improvised an approximate solution using the geometry of the WGS84 ellipsoid. The Earth's polar axis points in the Z direction of the ICRF frame.

First we find where the position vector intersects the ellipsoid surface. We need the distance from that intersection point to the Earth's axis to determine the rotation speed at that latitude. The rotation velocity vector at that point is perpendicular to the position vector and to the Earth's axis. Once we have that velocity vector we can subtract it from the velocity vector of the ISS. Hopefully, I haven't made any blunders with my geometry or algebra. ;)

The top graph below shows a typical result, over ~2 orbits, with a 1 minute time step. It gives a mean speed of ~7376 m/s. The second graph shows the raw ISS speed relative to the centre of the Earth. The third graph shows the Earth rotation speed. That is, the speed in the top graph is derived from the vector difference of the 2nd graph minus the 3rd graph.

ISS ground speed graph

ISS raw body speed

Earth rotation speed

Please note that the "ground speed" shown above is not the ground track speed. The ground track point is always collinear with the satellite and the centre of the Earth, so it has the same angular speed as the satellite. To calculate the ground track speed we need to scale the satellite velocity vector by the ratio of its orbital radius to the Earth's radius at the ground track point.

Let $R$ be the satellite's current radial distance from the centre of the Earth. Let $r$ be the radius of the Earth at the ground track point. Let $v_s$ be the satellite's actual velocity, and $v_t$ be the ground track point's velocity (relative to a non-rotating Earth). Then $$v_t r = v_s R$$

Here's a plot of the ground track speed, relative to the rotating Earth.

ISS ground track speed

Here's the ISS geocentric declination over the same timespan.

ISS Declination

Note that times in the speed plots are in TDB, the declination plot uses UTC.

Here's my Sage / Python speed plotting script.

It can also be used on other Earth satellites. Horizons has several other satellites in its database, eg the Hubble has id# -48. Type mb into the target field for the full list of major bodies (spacecraft are towards the end). You can also type body names into the target field. Horizons will respond with a list of matching bodies if the name is ambiguous.

The four modes are:

  • body: Orbital speed of the target, relative to the centre of the Earth.
  • earth: Rotation speed of the Earth below the target.
  • relative: Orbital speed of the target, relative to the rotating surface of the Earth.
  • track: Ground track speed of the target, relative to the rotating surface of the Earth.

Here's the declination script. Any major body can be the observing center, and any body can be the target. Please see the Horizons docs for details on specifying bodies and times.

Horizons now accepts times in UT, TT, or TDB in the speed script, and UT or TT in the declination script. Just append the appropriate timescale abbreviation to the end of the start time.

Here's a little interactive 3D ellipsoid script I used to verify my maths.

Thanks to KDP on Physics.SE for valuable discussions on this topic.

  • 1
    $\begingroup$ Very nice! My (obviously flawed) intuition led me to expect more of a sine wave. What accounts for the knee in the curve? $\endgroup$ Commented Nov 24, 2022 at 2:52
  • $\begingroup$ @OrganicMarble Glad you like it. :) I'm not totally clear on why it has that exact shape, I haven't had time to think about it yet. But I assume it's mostly due to the high inclination of the ISS orbit (~50°). $\endgroup$
    – PM 2Ring
    Commented Nov 24, 2022 at 2:57
  • 1
    $\begingroup$ @OrganicMarble Me too. I don't think the eccentricity of its orbit, or of the WGS ellipsoid have much effect, since they're both quite small. My velocity vector calculation seems to behave properly: it doesn't reverse direction in the southern hemisphere. :) But there's still the possibility of error(s) in my code. $\endgroup$
    – PM 2Ring
    Commented Nov 24, 2022 at 3:05
  • 2
    $\begingroup$ @OrganicMarble It's counter-intuitive because we're subtracting velocity vectors. The Earth velocity vector has no Z component, but the ISS velocity vector's Z component is maximum over the equator and zero when it reaches the north & south extremes of its declination. $\endgroup$
    – PM 2Ring
    Commented Nov 24, 2022 at 3:34
  • 1
    $\begingroup$ @Ludvig I've added a couple more graphs. $\endgroup$
    – PM 2Ring
    Commented Nov 24, 2022 at 15:21

The orbital velocity of the ISS is approximately 7.6 km/s, and the Earth's rotational velocity as a function of latitude is $465 \cos i$, where $i$ is the latitude.

Since the ISS is inclined 51.6° to the equator, its velocity vector relative to the ground below (ignoring rotation) is $\langle4720.723,5956.07\rangle \text{ m s}^{-1}$. The maximum latitudes that the ISS can reach are $\pm 51.6^\circ$, so the function relating position to surface velocity would be $v_s =\langle4720.723 - 465\cos i,5956.07\rangle \text{ m s}^{-1}$, whose magnitude will vary between the interval $\boxed{[7320.24,7424.04] \text{ m s}^{-1}}$.

Please let me know if you have any questions, as this may contain errors or be entirely incorrect.

  • 1
    $\begingroup$ Interesting! I was expecting the relative speed to actually be higher, but on second thought since both the surface and the station are moving in the same direction it's understandable why the speed would actually be lower. It checks out according to my math, thank you! Since it's a fairly narrow interval, I assume for general application ~7324 m/s could be used (the average between the two values), right? $\endgroup$ Commented Nov 23, 2022 at 16:40
  • 4
    $\begingroup$ It is incorrect. The projection of the velocity vector on the surface points in different directions at different points of the orbit. For example, at the northmost and the southermost points of the orbit, it points purely eastward. $\endgroup$
    – Litho
    Commented Nov 24, 2022 at 9:37
  • $\begingroup$ "Velocity is $465 \cos i$, where $i$ is the latitude." Hmmm. Shouldn't there be a unit somewhere? $\endgroup$ Commented Nov 25, 2022 at 8:00

Since none of the other answers actually showed how to compute the ground speed, the below Python script uses Skyfield to compute the ISS's velocity relative to the position on Earth it is directly above. You can likely find a library to do this is almost any programming language.

from skyfield.api import load, wgs84
import math

satellites = load.tle_file('http://celestrak.com/NORAD/elements/stations.txt')
print('Loaded', len(satellites), 'satellites')

iis = {sat.name: sat for sat in satellites}['ISS (ZARYA)']

geocentric = iis.at(t)
lat, lon = wgs84.latlon_of(geocentric)

difference = iis - iisll
topocentric = difference.at(t)
print(str(vms) + " miles per second")

I remember reading something by Randall Munroe / XKCD about this. By wonderful coincidence, in the time it takes to listen to the song "500 Miles" by The Proclaimers, the ISS travels approximately 500 miles relative to the Earth's surface...or it might actually travel 500 miles plus 500 more, I'm afraid I've forgotten the detail, and as I'm posting this from work I can't access the XKCD website to check :-)

  • 4
    $\begingroup$ what-if.xkcd.com/58 if an astronaut on the ISS listens to I'm Gonna Be, in the time between the first beat of the song and the final lines ... ... they will have traveled just about exactly 1,000 miles. $\endgroup$
    – PM 2Ring
    Commented Nov 24, 2022 at 10:28
  • $\begingroup$ Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center. $\endgroup$
    – Community Bot
    Commented Nov 24, 2022 at 10:41

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.