diff --git a/app/broadcast_areas/__init__.py b/app/broadcast_areas/__init__.py index 338763fe3..54022216b 100644 --- a/app/broadcast_areas/__init__.py +++ b/app/broadcast_areas/__init__.py @@ -74,12 +74,14 @@ class BroadcastArea(SortableMixin): # https://www.pivotaltracker.com/story/show/174837293 return self._count_of_phones or 0 - @property + @cached_property def phone_density(self): return self.count_of_phones / self.polygons.estimated_area @property def estimated_bleed_in_m(self): + if self.phone_density < 1: + return Polygons.approx_bleed_in_degrees * Polygons.approx_metres_to_degree estimated_bleed = 5_900 - (math.log(self.phone_density, 10) * 1_250) return max(500, min(estimated_bleed, 5000)) diff --git a/tests/app/broadcast_areas/test_broadcast_area.py b/tests/app/broadcast_areas/test_broadcast_area.py index 705916cb5..02d84f3da 100644 --- a/tests/app/broadcast_areas/test_broadcast_area.py +++ b/tests/app/broadcast_areas/test_broadcast_area.py @@ -334,6 +334,10 @@ def test_phone_density( # Highland (least dense in UK) 'lad20-S12000017', 5_000, 0.0449 ), + ( + # No population data available + 'test-santa-claus-village-rovaniemi', 1_500, 0.01347 + ) )) def test_estimated_bleed( area, expected_bleed_in_m, expected_bleed_in_degrees,