feat(rover): overlay LOS line + label profile rover→station endpoints

This commit is contained in:
Graham McIntire 2026-04-26 09:01:59 -05:00
parent ea502ee9e7
commit 2f3500515a
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -773,12 +773,17 @@ defmodule MicrowavepropWeb.RoverLive do
fill = "0,60 " <> line <> " 240,60"
los_y_start = Float.round(60.0 - (first.elev - min_e) / span * 50.0, 2)
los_y_end = Float.round(60.0 - (last.elev - min_e) / span * 50.0, 2)
%{
line: line,
fill: fill,
start_elev_m: first.elev,
end_elev_m: last.elev,
total_km: total_km
total_km: total_km,
los_y_start: los_y_start,
los_y_end: los_y_end
}
end
@ -1150,7 +1155,7 @@ defmodule MicrowavepropWeb.RoverLive do
<div class="text-[11px] opacity-60">
rover {elev_ft(link.rover_elev_m)} · max obstacle {elev_ft(link.max_obstacle_m)}
</div>
<.profile_svg :if={link.profile_svg} svg={link.profile_svg} />
<.profile_svg :if={link.profile_svg} svg={link.profile_svg} callsign={link.callsign} />
</div>
</div>
</div>
@ -1158,17 +1163,28 @@ defmodule MicrowavepropWeb.RoverLive do
end
attr :svg, :map, required: true
attr :callsign, :string, required: true
defp profile_svg(assigns) do
~H"""
<svg viewBox="0 0 240 64" class="w-full h-12 mt-1" preserveAspectRatio="none">
<polygon points={@svg.fill} fill="rgb(14 165 233 / 0.25)" />
<polyline points={@svg.line} fill="none" stroke="#0ea5e9" stroke-width="1.2" />
<line
x1="0"
y1={@svg.los_y_start}
x2="240"
y2={@svg.los_y_end}
stroke="#f59e0b"
stroke-width="1"
stroke-dasharray="3 2"
opacity="0.85"
/>
</svg>
<div class="flex justify-between text-[10px] opacity-50 font-mono">
<span>{elev_ft(@svg.start_elev_m)}</span>
<span>{km_to_mi(@svg.total_km)} mi</span>
<span>{elev_ft(@svg.end_elev_m)}</span>
<div class="flex justify-between text-[10px] opacity-60 font-mono gap-2">
<span>rover {elev_ft(@svg.start_elev_m)}</span>
<span class="opacity-70">{km_to_mi(@svg.total_km)} mi</span>
<span>{@callsign} {elev_ft(@svg.end_elev_m)}</span>
</div>
"""
end