(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. A DOS console executable is provided below, but it could be compiled for other platforms trivially (I've compiled and tested it in Linux). If someone has a server on which this program can run, it should be straightforward to supply a Web-based interface to the program, shielding one from the need to play with DOS.
Using the program: You should first download the Windows program here, and/or download the Linux version here. Create a directory for it, and unZIP it in that directory. (You can also build the code from the C/C++ source provided here.)
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 www.tle.info, 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.
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 DOS prompt, change to the sat_id directory, and run
sat_id vfmo.ast
The program would read through the file, pausing at each observation as it looks for possible matches within .2 degrees. It then outputs data concerning each possible match.
It's possible (though not especially likely) that a given observation may match two satellites. However, people usually get more than one position on an asteroid. In that situation, you'll see the same "matched satellite" for each observation. Also, when sat_id sees your second observed position, it will compute the rate and direction of motion and show you that. These data are also shown for the satellites, so you can check to make sure the satellite motion matches your observed motion.
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.
Some command-line options: This program assumes that the input elements come from all_tle.txt and that the object was observed at a position within .2 degrees of the predicted one. Suppose that, instead, the elements are in d:\tles\my_sats.tle and you want to extend the search to a half degree. In that case, you would run
sat_id vfmo.ast -td:\tles\my_sats.tle -r.5
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. Ephemerides for most of these objects can be found at the Minor Planet Center's Earth-Orbiting Space "Junk" Tracking Page:
http://www.minorplanetcenter.net/iau/SpaceJunk/SpaceJunk.html
But if you try this and still don't know what you've found, you should probably e-mail me, at plutö@projéctpluto.com (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.)
• (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.