Gracefully handle SRTM tile download failures on page load

This commit is contained in:
Graham McIntire 2026-04-02 08:03:05 -05:00
parent 737de10bf4
commit ebd22ce156
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -2,6 +2,8 @@ defmodule MicrowavepropWeb.ContactLive.Show do
@moduledoc false @moduledoc false
use MicrowavepropWeb, :live_view use MicrowavepropWeb, :live_view
require Logger
alias Microwaveprop.Propagation.BandConfig alias Microwaveprop.Propagation.BandConfig
alias Microwaveprop.Propagation.Scorer alias Microwaveprop.Propagation.Scorer
alias Microwaveprop.Radio alias Microwaveprop.Radio
@ -677,7 +679,7 @@ defmodule MicrowavepropWeb.ContactLive.Show do
lon1 when is_number(lon1) <- contact.pos1["lon"] || contact.pos1["lng"], lon1 when is_number(lon1) <- contact.pos1["lon"] || contact.pos1["lng"],
%{"lat" => lat2} <- contact.pos2, %{"lat" => lat2} <- contact.pos2,
lon2 when is_number(lon2) <- contact.pos2["lon"] || contact.pos2["lng"], lon2 when is_number(lon2) <- contact.pos2["lon"] || contact.pos2["lng"],
{:ok, profile} <- ElevationClient.fetch_elevation_profile(lat1, lon1, lat2, lon2, 256) do {:ok, profile} <- safe_fetch_elevation(lat1, lon1, lat2, lon2) do
freq_ghz = band_to_ghz(contact.band) freq_ghz = band_to_ghz(contact.band)
dist_km = haversine_km(lat1, lon1, lat2, lon2) dist_km = haversine_km(lat1, lon1, lat2, lon2)
analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz) analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz)
@ -869,6 +871,14 @@ defmodule MicrowavepropWeb.ContactLive.Show do
end) end)
end end
defp safe_fetch_elevation(lat1, lon1, lat2, lon2) do
ElevationClient.fetch_elevation_profile(lat1, lon1, lat2, lon2, 256)
rescue
e ->
Logger.warning("Elevation profile failed: #{Exception.message(e)}")
{:error, :elevation_unavailable}
end
defp band_to_ghz(nil), do: 10.0 defp band_to_ghz(nil), do: 10.0
defp band_to_ghz(band) do defp band_to_ghz(band) do