- GLFW 3 - windowing and input
- GLEW - OpenGL extension loading
- shapelib - shapefile parsing
- libcurl - HTTP requests (QRZ callsign lookup)
- OpenGL 3.3+ - rendering
sudo pacman -S glfw shapelib glew curlsudo apt install libglfw3-dev libglew-dev libshp-dev libcurl4-openssl-devmkdir -p build && cd build
cmake ..
makeThe binary is placed at build/azmap. Shaders are copied to build/shaders/ automatically.
sudo cmake --install buildThis installs:
azmapbinary to<prefix>/bin/- Shaders to
<prefix>/share/azmap/shaders/ - Map data (if present) to
<prefix>/share/azmap/data/
The executable automatically detects whether it's running from the build tree or an installed location and resolves data/shader paths accordingly.
azMap uses Natural Earth 110m shapefiles. Download and extract them so the directory structure looks like:
data/
ne_110m_coastline/
ne_110m_coastline.shp
ne_110m_coastline.shx
ne_110m_coastline.dbf
ne_110m_land/ (optional — filled land masses)
ne_110m_land.shp
...
ne_110m_admin_0_boundary_lines_land/ (optional — country borders)
ne_110m_admin_0_boundary_lines_land.shp
...
Coastlines are required. Land polygons and country borders are optional and will be silently skipped if not found.
You can set a default center location (your QTH) in ~/.config/azmap.conf so you only need to specify the target on the command line:
# azMap configuration
name = Madrid
lat = 40.4168
lon = -3.7038
# QRZ.com credentials (optional, for callsign lookup)
qrz_user = YOURCALL
qrz_pass = yourpassword
- Lines starting with
#are comments - Whitespace around
=is ignored latandlonmust both be present to be used;nameis optionalqrz_userandqrz_passenable the QRZ callsign lookup feature- CLI arguments always override config values
./azmap <center_lat> <center_lon> <target_lat> <target_lon> [options]
./azmap <target_lat> <target_lon> [options] # center from config
| Argument | Description |
|---|---|
center_lat |
Latitude of projection center (degrees, -90 to 90) |
center_lon |
Longitude of projection center (degrees, -180 to 180) |
target_lat |
Latitude of target location |
target_lon |
Longitude of target location |
When a valid config file provides the center location, only target_lat and target_lon are required.
| Flag | Description |
|---|---|
-c NAME |
Display name for the center location (overrides config name) |
-t NAME |
Display name for the target location |
-d DETAIL |
Station detail string for sidebar display (station|freq|country|site|lang|target) |
-s PATH |
Override the default coastline shapefile path |
For backward compatibility, a bare fifth positional argument is also accepted as the shapefile path.
# Madrid to Paris, with names
./azmap 40.4168 -3.7038 48.8566 2.3522 -c Madrid -t Paris
# With config file providing center — just pass the target
./azmap 48.8566 2.3522 -t Paris
# Tokyo to New York
./azmap 35.6762 139.6503 40.7128 -74.0060 -c Tokyo -t "New York"
# Custom shapefile
./azmap 51.5074 -0.1278 -33.8688 151.2093 -s /path/to/my.shpazMap supports two projection modes, toggled by the Proj button in the toolbar:
- Azimuthal equidistant (default) — the entire Earth is shown. Distances from the center are true to scale. The grid shows concentric range rings (every 5000 km) and radial azimuth lines (every 30 degrees).
- Orthographic — one hemisphere is shown as if viewed from space. Back-hemisphere geometry is clipped at the horizon. The grid shows geographic parallels (every 30 degrees, -60 to 60) and meridians (every 30 degrees).
All other features (day/night overlay, markers, labels, pan, zoom) work in both modes. The zoom range adapts to the projection radius.
- Dark blue circle - Earth boundary
- Filled land - Medium gray land masses (if
ne_110m_landdata available) - Dim grid - Range rings + radials (azimuthal equidistant) or parallels + meridians (orthographic)
- Gray lines - Country borders (if data available)
- Dark gray lines - Coastlines
- Yellow line - Great-circle path from center to target (curved arc in orthographic mode)
- White filled circle - Center location marker
- Red outline circle - Target location marker
- White triangle - North pole indicator
- Dark overlay - Night side of the Earth with smooth twilight gradient (updates every 60 seconds from system UTC time)
- Top-center HUD (white) - Distance in km, azimuth to/from target, local and UTC clocks (updated every second)
- Center label (cyan) - Center location name and coordinates
- Target label (orange) - Target location name and coordinates
If no -c or -t name is given, labels show coordinates only (e.g., 40.42N, 3.70W).
The sidebar is always visible on the right side of the window. It displays:
- UTC and local clocks at the top
- Station info (from swl dashboard or QRZ lookup) in the middle
- Distance and azimuth readouts (shown only when a target is active)
- LAYERS section — Aurora, Spor.E, MUF overlay toggle buttons
- MUF legend — when the MUF layer is active, a color-coded legend of contour MHz values appears above the LAYERS label
- Kp/Bz indices — when Aurora is active, geomagnetic Kp index and IMF Bz component are displayed right-aligned in the sidebar
- SOURCE section — QRZ, WSJT, BCB buttons
Section labels and horizontal divider lines separate the button groups.
The QRZ button opens a popup panel for looking up amateur radio callsigns. Type a callsign and press Enter to query the QRZ.com XML API. On success, the popup closes and results (call, name, location, grid, coordinates) display in the sidebar. The target marker, line, and distance/azimuth update automatically.
- The popup can be dragged by its title bar
- Press Esc or the X button to close
- QRZ credentials (
qrz_userandqrz_pass) must be set in~/.config/azmap.conf
- Aurora — Toggles the live aurora probability heatmap overlay (green, semi-transparent). Data is fetched from the NOAA OVATION Aurora service (
services.swpc.noaa.gov) and auto-refreshes every 15 minutes while active. The overlay shows aurora probability as a green heatmap with per-vertex alpha: probabilities below 5% are transparent, 5–50% ramp to half opacity, and 50–100% reach maximum opacity. When active, also fetches and displays Kp index and Bz component from NOAA SWPC in the sidebar. - MUF — Toggles live Maximum Usable Frequency contour lines. Data is fetched from KC2G (
prop.kc2g.com) as GeoJSON and auto-refreshes every 15 minutes while active. Each contour is drawn in its own color corresponding to the HF band frequency. When active, a color-coded legend showing the MHz values appears above the LAYERS label in the sidebar. - Spor.E — Sporadic E layer toggle (planned).
- QRZ — Opens callsign lookup popup. Clears previous station info and target.
- WSJT — Opens WSJT popup (placeholder). Clears previous info.
- BCB — Clears station info, target line, marker, label, and distance/azimuth.
| Input | Action |
|---|---|
| Scroll wheel | Zoom in/out (range: 10 km to full Earth) |
| Left mouse drag | Pan the map |
| Arrow keys | Pan the map |
| Proj button | Toggle azimuthal equidistant / orthographic projection |
| Aurora button | Toggle live aurora probability heatmap overlay |
| MUF button | Toggle live MUF contour lines overlay with sidebar legend |
| QRZ button | Open callsign lookup popup (clears previous info) |
| WSJT button | Open WSJT popup (clears previous info) |
| BCB button | Clear station info, target, and distance/azimuth |
| Drag popup title bar | Reposition the popup window |
| R | Reset view (full Earth, centered) |
| Q / Esc (or Esc in popup) | Quit (or close popup) |
On startup, azMap prints summary info to the terminal:
Center: 40.4168, -3.7038
Target: 48.8566, 2.3522
Distance: 1053.4 km
Az to: 28.7 deg
Az from: 209.5 deg