------ Satellite Finder Help ------

Satellite Finder is (c) Copyright 1999, P. Lutus

Satellite Finder is CareWare. To read about CareWare, please visit http://www.arachnoid.com.

Satellite Finder (hereafter SF) is a Windows 98/NT program that is used to aid in the pointing of satellite dishes. For a given location on earth, it provides the direction (in azimuth and elevation) for any chosen communication satellite in geostationary orbit.

To help identify your location, SF provides a search database of US cities and/or ZIP codes. Or, you may simply type in your geographical position as a latitude and longitude.

Once provided with a city, ZIP code or position, SF acquires the geographical coordinates for that location and computes sighting angles for the most common satellites.

Through its plain-text data files, SF may be customized for additional satellites and for non-US locations.

Following are the names of the data files and their internal format.

--- zipcodes.txt ---

This file is a master database of ZIP codes. It is very large and contains ZIP codes for most locations. To add ZIP codes, simply edit the file and type in the desired ZIP code, state and city name, and geographical coordinates. Place the new ZIP code in order in the file, which is sorted by ZIP code. The file's record format looks like this:

Zip code, state abbreviation, town name, longitude, latitude.

In accordance with mathematical convention, western hemisphere longitudes are entered as negative numbers in this file, and eastern longitudes would be entered as positive numbers. Elsewhere in SF's data files, this relationship is maintained. Just remember that western hemisphere longitudes are negative numbers. In the same way, southern latitudes are negative numbers.

If you change this file, SF will re-create its tree of data files (one each per state and one each for 10 ranges of ZIP codes). These subsidiary files are generated to speed up SF's operation, because the master ZIP code file as provided is about a megabyte long.

--- satlist.txt ---

This file contains a list of satellites and their longitudes, again with western longitudes entered as negative numbers. Simply enter new satellites in the same way as the existing entries. This file's format looks like this:

Satellite name, satellite longitude.

If a line is entered without a longitude, it is printed as a title. This feature may be used to group satellites of a common type in the list.

--- statenames.txt ---

This file should not be edited. It is automatically generated by the program when it recreates its data files.

Two subdirectories - "states" and "zipcodes" - are created by the program when it first runs. These subdirectories are populated with files meant to speed up SF's operations. The states subdirectory contains one data file per state. The zipcodes subdirectory contains 10 zip code data files.

------ How to use SF ------

Install SF in any convenient directory. Make sure the provided data files are also placed there.

When you first run SF, it will generate its data file tree. If this does not happen, simply delete the file statenames.txt and run SF again.

The simplest way to use SF is to choose a state from the provided drop-down list, then choose a city. Once a city has been chosen, its ZIP code and position are provided and the satellite position list is generated.

If you provide a state and city, the ZIP code and position are provided. Conversely, if you provide a ZIP code, the state, city and position are provided. Either way, the satellite list is generated.

For a position for which there is no ZIP code or city name, simply enter your location's geographical coordinates and press "compute."

------ Using SF's azimuth output ------

The azimuth values provided in the satellite sighting list may be listed in degrees true or magnetic. Compasses provide magnetic bearings, and these values differ from true bearings in most locations. To use magnetic bearings, simply click the "Use Mag Az" check box.

The magnetic declination computation in Satellite Finder is only accurate to about 1/2 degree typically (1999). It uses a predicting algorithm to try to maintain its accuracy into the next century, but over a long time its accuracy will decline. Do not rely on its output for critical matters, those involving life and death. For pointing a satellite dish, well, it's more than accurate enough.

------ Customization for non-US locations ------

Instead of US Zip codes (or along with US ZIP codes), you may enter other locations into the file "zipcodes.txt." You may also wish to create a file of only non-US locations. To do so, simply enter lines containing the desired names and locations, like this:

0,GERMANY,BERLIN,13.283,52.483

In this case, no ZIP code is needed (though you may choose to enter one), and the "state" field contains the country name. Note also that Berlin is located at 13.283 degrees East longitude, therefore the numerical value is positive.

When you have entered new fields in "zipcodes.txt," SF will detect the change and regenerate its data file tree.

In an example like this, you will also want to enter the names and longitudes of communications satellites that are "visible" from Europe, in the file "satlist.txt."

------ Trivial Math "Secrets" ------

SF's basic task is to compute satellite viewing angles for a provided location on Earth. The math required to accomplish this is not terribly difficult. All the satellites are assumed to be in geostationary orbit, a position along the 22,300 mile orbit at which satellites seem stationary to an observer on Earth. Their positions are therefore relatively easy to compute.

Here is the C++ subroutine that actually computes the positions:

/*
*
* ComputePos(input: (earth) lat (deg), lng (deg),
* (satellite) satlng (deg),
* output: az true (deg), el (deg))
*
* az format: North = 0, East = 90, South = 180, West = 270
* el format: Horizontal 0, Vertical 90
*
*/

void ComputePos(double lat, double lng, double satlng, double &az, double &el)
{
	const double toDeg = 57.29577951308232;
	const double toRad = 1.745329251994329e-2;
	double dlngr = (lng-satlng) * toRad;

	az = atan2(sin(lat * toRad),tan(dlngr)) * toDeg;
	az = fmod(270 - az,360);
	
	const double r1=6.6107; // ratio synchronous orbit/earth radius
	double clng = cos(dlngr);
	double clat = cos(lat * toRad);
	double v1=r1*clat*clng-1.0;
	double v2=r1*sqrt(1-clat*clat*clng*clng);
	el = atan2(v1,v2) * toDeg;
}

This routine may seem rather trivial (and it is), but there is a site on the Internet, run by some new breed of pond scum, that is charging suckers US$12 *per position* as though this trivial mathematical result were some kind of black magic.

Miserable parasites.

------ User support ------

There isn't any. This program is CareWare (read: free) and I cannot provide user support for free programs. If you write me anyway, I will simply tell you this in stronger language.

