diff --git a/lib/microwaveprop/terrain/elevation_client.ex b/lib/microwaveprop/terrain/elevation_client.ex index ab669629..ff610e42 100644 --- a/lib/microwaveprop/terrain/elevation_client.ex +++ b/lib/microwaveprop/terrain/elevation_client.ex @@ -3,6 +3,8 @@ defmodule Microwaveprop.Terrain.ElevationClient do alias Microwaveprop.Terrain.Srtm + require Logger + @batch_size 100 @spec fetch_elevation_profile(float(), float(), float(), float(), pos_integer()) :: @@ -10,12 +12,18 @@ defmodule Microwaveprop.Terrain.ElevationClient do def fetch_elevation_profile(lat1, lon1, lat2, lon2, n \\ 64) do case srtm_tiles_dir() do nil -> + Logger.debug("SRTM tiles_dir not configured, using API") fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n) tiles_dir -> case Srtm.fetch_elevation_profile(lat1, lon1, lat2, lon2, tiles_dir, n) do - {:ok, _profile} = ok -> ok - {:error, _} -> fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n) + {:ok, _profile} = ok -> + Logger.info("Elevation profile served from SRTM tiles") + ok + + {:error, reason} -> + Logger.warning("SRTM failed (#{inspect(reason)}), falling back to API") + fetch_elevation_profile_api(lat1, lon1, lat2, lon2, n) end end end diff --git a/lib/microwaveprop/terrain/srtm.ex b/lib/microwaveprop/terrain/srtm.ex index d9cd86c0..730a8513 100644 --- a/lib/microwaveprop/terrain/srtm.ex +++ b/lib/microwaveprop/terrain/srtm.ex @@ -1,6 +1,8 @@ defmodule Microwaveprop.Terrain.Srtm do @moduledoc false + require Logger + @samples 3601 @void -32_768 @base_url "https://elevation-tiles-prod.s3.amazonaws.com/skadi" @@ -26,19 +28,25 @@ defmodule Microwaveprop.Terrain.Srtm do url = "#{@base_url}/#{lat_dir}/#{filename}.gz" path = Path.join(tiles_dir, filename) + Logger.info("Downloading SRTM tile #{filename} from S3") + case Req.get(url, req_options()) do {:ok, %{status: 200, body: body}} -> decompressed = :zlib.gunzip(body) File.write!(path, decompressed) + Logger.info("SRTM tile #{filename} downloaded (#{byte_size(decompressed)} bytes)") {:ok, path} {:ok, %{status: 404}} -> + Logger.warning("SRTM tile #{filename} not available on S3 (404)") {:error, :not_available} {:ok, %{status: status}} -> + Logger.error("SRTM tile #{filename} download failed: HTTP #{status}") {:error, "SRTM download HTTP #{status}"} {:error, reason} -> + Logger.error("SRTM tile #{filename} download error: #{inspect(reason)}") {:error, "SRTM download error: #{inspect(reason)}"} end end