diff --git a/lib/microwaveprop_web/live/contact_live/show.ex b/lib/microwaveprop_web/live/contact_live/show.ex index ad373ef0..53a17ae4 100644 --- a/lib/microwaveprop_web/live/contact_live/show.ex +++ b/lib/microwaveprop_web/live/contact_live/show.ex @@ -2,6 +2,8 @@ defmodule MicrowavepropWeb.ContactLive.Show do @moduledoc false use MicrowavepropWeb, :live_view + require Logger + alias Microwaveprop.Propagation.BandConfig alias Microwaveprop.Propagation.Scorer alias Microwaveprop.Radio @@ -677,7 +679,7 @@ defmodule MicrowavepropWeb.ContactLive.Show do lon1 when is_number(lon1) <- contact.pos1["lon"] || contact.pos1["lng"], %{"lat" => lat2} <- contact.pos2, 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) dist_km = haversine_km(lat1, lon1, lat2, lon2) analysis = TerrainAnalysis.analyse(profile, dist_km, freq_ghz) @@ -869,6 +871,14 @@ defmodule MicrowavepropWeb.ContactLive.Show do 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(band) do