prop/lib/microwaveprop/propagation/grid.ex
Graham McIntire c56f349c86
Reduce grid resolution to 0.5 degrees (~6k points)
95k points at 0.125 degree resolution caused the GRIB2 extraction to
take too long. 0.5 degree (~55 km) resolution gives 6k points which
completes in under a minute. Can increase resolution later once the
extraction is optimized.
2026-03-31 07:22:42 -05:00

28 lines
884 B
Elixir

defmodule Microwaveprop.Propagation.Grid do
@moduledoc "CONUS grid definition for propagation scoring. 0.5 degree resolution (~55 km)."
@lat_min 25.0
@lat_max 50.0
@lon_min -125.0
@lon_max -66.0
@step 0.5
@doc "Returns all grid points as `{lat, lon}` tuples covering CONUS at 0.5 degree spacing."
def conus_points do
for lat <- float_range(@lat_min, @lat_max, @step),
lon <- float_range(@lon_min, @lon_max, @step) do
{Float.round(lat, 3), Float.round(lon, 3)}
end
end
@doc "Returns the grid step size in degrees."
def step, do: @step
@doc "Returns the CONUS bounding box as a map."
def bounds, do: %{lat_min: @lat_min, lat_max: @lat_max, lon_min: @lon_min, lon_max: @lon_max}
defp float_range(start, stop, step) do
count = round((stop - start) / step) + 1
Enum.map(0..(count - 1), fn i -> start + i * step end)
end
end