Satellite identification program for astrometrists

Last revised 2017 Feb 22

On-line form for identifying artsats, based on this code (if you just need to identify a few dozen objects or fewer, this is probably your simplest solution.)

Note that the source code for this program, and for the artificial satellite code in general, is now hosted on GitHub.

Also: another program of interest for this problem is Ted Molczan's IDSat.)

Astrometrists routinely come across artificial satellites in their images, and often don't have a way to ID them. In such cases, they often keep getting data on them in hopes that they've found a more interesting (to an astronomer) object: a near-Earth asteroid. If it turns out to be an artificial satellite, then it's been a waste of effort.

I've written a program to address this problem. sat_id reads in a file containing astrometric observations in the MPC format. Each time it comes across an observation, it looks for satellites that were close to the indicated coordinates at that time, as seen from that location. The resulting output contains the original lines from the file, with identifications added (we hope!) after each observation.

The program is based on the artificial satellite ephemeris source code supplied on this site; full C/C++ source code is available.

Using the program: First, note that for the vast majority of users, the on-line version of this software is probably your simplest bet. If you do need a local copy, you'll need to get the code from GitHub and compile it. This is quite easy in Linux or BSD or even OS/X. It gets a bit trickier in Windows, especially since most Windows users are unfamiliar with compilers... if you're stuck under Windows and would like a Windows executable for this program, please e-mail me and I'll post an executable for you.

Next, you'll need to get a copy of all_tle.txt, a comprehensive list of orbital elements for currently-visible artificial satellites. The file is provided via, or from this site in Australia. UnZIP the file to extract all_tle.txt into the same directory as sat_id . (The .zip files are about 880 KBytes at present, unZIPping to about 2.3 MBytes.)

Be warned that the elements change over time. You'll probably have to download that file every couple of weeks, to ensure a current set of elements. Which is one more reason to favor the on-line version: it gets those updates automatically.

And now, you're ready to try it out. Suppose you have a file with MPC-formatted astrometry called vfmo.ast. You would open a terminal, change to the folder containing sat_id, and run

./sat_id vfmo.ast

The program would read through the file, pausing at each observation as it looks for possible matches within four degrees that have roughly matching motion. It then outputs data concerning each possible match.

If you wish to save the "match" data, you can redirect the output to go into a file, instead of to the console:

./sat_id vfmo.ast > sat_ids.txt

At the end, sat_ids.txt would contain the data previously shown on the screen.

If sat_id can't identify an object: Most of the time, this program will successfully identify the target. But some satellites haven't been updated recently enough, and a very few are in extremely high orbits (IMP8, WIND, J002E3, for example.) These last are especially apt to confuse, because they aren't going nearly as fast as your average earth-orbiting satellite, and therefore seem much more like near-earth asteroids. TLEs are also unavailable for many of them. (The folks at, who compile the 'all_tle.txt' elements, are much more interested in low-earth and geosat objects, and their radar is better suited to lower objects.) The on-line version of sat_id will search the 'special' TLEs for high-flying artsats and the TLEs for classified artsats.

Also, ephemerides for most of these objects can be found at the Minor Planet Center's Earth-Orbiting Space "Junk" Tracking Page.

If you try this and still don't know what you've found, you should probably e-mail me, at p‮ôç.ötulpťcéjôřp@otúl‬m (remove accent marks), including the MPC-formatted observation(s). If I can't track it down myself, I can probably find somebody who can (and who can make use of your observations to update the orbit for that object.)


• (2017 February 22) Updated this (very out of date) documentation.

• (2013 January 7) Made some speed improvements, and revised the output to show object name and some orbital parameters.

• (2012 March 28) Fixed a divide-by-zero bug that occurred if two input astrometry lines in a row had identical times. (The object would have moved, or not moved, over a time span of zero seconds, for an angular speed of something-divided-by-zero.)

• (2006 June 30) Further comment from Eric Christensen: when computing object motion from two consecutive observations, if the second one had a date/time preceding the first, you got a negative rate of motion that's off by 180 degrees.

• (2006 June 23) After comment from Eric Christensen, revised to use names 'ObsCodes.html' or 'ObsCodes.htm', with 'stations.txt' being a third choice. Also added the '-a' command line switch to cause the program to show all lines from input (default is now that only MPC astrometric input gets echoed.)

• (2003 Mar 29) Fixed a problem with high-drag objects: if their projected position crashed into the earth, that caused sat_id (and other satellite code I've written) to crash.