Skip to content

Observer Setup

Everything Craft computes — pass predictions, azimuth/elevation, rise and set times, Doppler shift — depends on knowing exactly where you are on Earth. This page covers how to configure your observer location and what each setting controls.

Observer location is set in the .env file at the project root. Five variables define your position:

.env
OBSERVER_LAT=36.1627
OBSERVER_LON=-86.7816
OBSERVER_ALT=182
OBSERVER_NAME=Nashville
OBSERVER_GRID=EM66lp
VariableDescriptionUnitsExample
OBSERVER_LATLatitudeDecimal degrees, north positive36.1627
OBSERVER_LONLongitudeDecimal degrees, east positive-86.7816
OBSERVER_ALTAltitude above sea levelMeters182
OBSERVER_NAMEDisplay name for your locationFree textNashville
OBSERVER_GRIDMaidenhead grid locator4 or 6 character gridEM66lp

The simplest way: open Google Maps, right-click your location, and the coordinates appear at the top of the context menu in latitude, longitude format. Copy them directly.

OpenStreetMap works the same way — click a point and the coordinates show in the sidebar.

If you have a handheld GPS or a phone with a GPS app, stand at your antenna location and read the coordinates. This is the most accurate method, especially if your antennas are at a different elevation than your house.

Many modern transceivers with built-in GPS report coordinates in the APRS format (degrees and decimal minutes). Convert to decimal degrees:

N 36 09.762 W 086 46.896
Latitude: 36 + (09.762 / 60) = 36.1627
Longitude: -(86 + (46.896 / 60)) = -86.7816

OBSERVER_ALT is your altitude above mean sea level in meters, not above ground level. This affects pass calculations in two ways:

  1. Horizon distance — Higher observers see satellites earlier on the horizon and lose them later. A hilltop station at 500 m picks up a few extra seconds of pass time compared to a station at sea level.

  2. Parallax — For objects in low Earth orbit (under ~2,000 km), a difference of even 100 meters in observer altitude shifts the computed position slightly.

For most amateur stations, getting within 10 meters is plenty accurate. If you are unsure of your elevation, look up your address on a topographic map or use a tool like FreeMapTools Elevation Finder.

OBSERVER_GRID is a Maidenhead Locator System grid square. This is the standard position encoding used in amateur radio — you will see it on QRZ pages, in WSJT-X, and in contest exchanges.

A grid square encodes latitude and longitude into a compact string:

CharactersNamePrecision
2 (e.g., EM)Field~1,000 km
4 (e.g., EM66)Square~100 km
6 (e.g., EM66lp)Subsquare~5 km

Craft uses the grid square for display purposes and for compatibility with amateur radio software that expects grid-based position data.

Several tools convert coordinates to Maidenhead grids:

If you already know your 4-character grid from contest logging or QRZ, that works fine. The 6-character subsquare adds precision but is not required.

When you update your observer location, every location-dependent calculation shifts:

  • Pass predictions recalculate AOS, TCA, and LOS times for your new position. A satellite pass that was 70 degrees maximum elevation from one location might only reach 20 degrees from another.
  • “What’s Up” results change because different objects are above the local horizon at different locations.
  • Azimuth and elevation for all tracked objects recompute relative to your new position. The same satellite at the same instant has a different az/el from Nashville than from London.
  • Doppler shift calculations use observer position to determine the range rate between you and the satellite.
  • Rise and set times for the Sun, Moon, and planets shift. These matter for optical satellite observing (you need the satellite sunlit and the sky dark).

The globe visualization itself does not change — it still shows the full Earth. But the ground track overlays, pass arcs, and horizon circle all anchor to the observer position.

Craft currently supports a single observer location configured at startup. If you operate stations at multiple locations, swap the coordinates in .env and restart the API when you change sites.

For permanent multi-site setups, running separate Craft instances (each with its own .env) is the straightforward path. The Docker Compose setup is lightweight enough that two instances on the same host is practical.