Assume 10 ft AGL antennas on contact detail path analysis

TerrainAnalysis.analyse was being called with default 0 m antenna
heights on both ends of a QSO's path, which makes the knife-edge
diffraction math pretend the radios are sitting directly on the
terrain surface. Pass 3.048 m (10 ft) for both ant_ht_a and ant_ht_b,
and shift the forward/reverse elevation angles to match. This is
only a display assumption on /contacts/:id — terrain worker paths
computed elsewhere are unaffected.
This commit is contained in:
Graham McIntire 2026-04-12 17:11:49 -05:00
parent be9c215515
commit bcfda54897
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -1403,13 +1403,16 @@ defmodule MicrowavepropWeb.ContactLive.Show do
{:ok, profile} <- safe_fetch_elevation(lat1, lon1, lat2, lon2) do
freq_ghz = band_to_ghz(contact.band)
dist_km = haversine_km(lat1, lon1, lat2, lon2)
analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz)
# Assume both stations are at 10 ft (3.048 m) AGL so the path
# analysis doesn't pretend the antennas are sitting on the dirt.
ant_ht_m = 3.048
analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz, ant_ht_a: ant_ht_m, ant_ht_b: ant_ht_m)
fwd_az = initial_bearing(lat1, lon1, lat2, lon2)
rev_az = initial_bearing(lat2, lon2, lat1, lon1)
tx_elev = hd(profile).elev
rx_elev = List.last(profile).elev
tx_elev = hd(profile).elev + ant_ht_m
rx_elev = List.last(profile).elev + ant_ht_m
fwd_el = elevation_angle(tx_elev, rx_elev, dist_km * 1000)
rev_el = elevation_angle(rx_elev, tx_elev, dist_km * 1000)