diff --git a/app/controllers/api/v1/maps/hexagons_controller.rb b/app/controllers/api/v1/maps/hexagons_controller.rb index b93a1fa3..ce977764 100644 --- a/app/controllers/api/v1/maps/hexagons_controller.rb +++ b/app/controllers/api/v1/maps/hexagons_controller.rb @@ -69,11 +69,9 @@ class Api::V1::Maps::HexagonsController < ApiController end def set_user_and_dates - if params[:uuid].present? - set_public_sharing_context - else - set_authenticated_context - end + return set_public_sharing_context if params[:uuid].present? + + set_authenticated_context end def set_public_sharing_context diff --git a/app/services/maps/hexagon_grid.rb b/app/services/maps/hexagon_grid.rb index 5d5ede5d..be0ae090 100644 --- a/app/services/maps/hexagon_grid.rb +++ b/app/services/maps/hexagon_grid.rb @@ -41,8 +41,26 @@ class Maps::HexagonGrid generate_hexagons end + def area_km2 + @area_km2 ||= calculate_area_km2 + end + private + def calculate_area_km2 + width = (max_lon - min_lon).abs + height = (max_lat - min_lat).abs + + # Convert degrees to approximate kilometers + # 1 degree latitude ≈ 111 km + # 1 degree longitude ≈ 111 km * cos(latitude) + avg_lat = (min_lat + max_lat) / 2 + width_km = width * 111 * Math.cos(avg_lat * Math::PI / 180) + height_km = height * 111 + + width_km * height_km + end + def validate_bbox_order errors.add(:base, 'min_lon must be less than max_lon') if min_lon >= max_lon errors.add(:base, 'min_lat must be less than max_lat') if min_lat >= max_lat