Refactor coordinate processing into Polygons class

We have a bunch of stuff for doing lat/long transformation in the
`BroadcastMessage` class. This is not a good separation of concerns, now
that we have a separate class for dealing with polygons and coordinates.
This commit is contained in:
Chris Hill-Scott
2020-08-25 16:55:09 +01:00
parent c49a6338af
commit 3d9d663b27
7 changed files with 52 additions and 83 deletions

View File

@@ -1,8 +1,7 @@
import itertools
from notifications_utils.serialised_model import SerialisedModelCollection
from werkzeug.utils import cached_property
from .polygons import Polygons
from .repo import BroadcastAreasRepository
@@ -35,11 +34,15 @@ class BroadcastArea(SortableMixin):
@cached_property
def polygons(self):
return BroadcastAreasRepository().get_polygons_for_area(self.id)
return Polygons(
BroadcastAreasRepository().get_polygons_for_area(self.id)
)
@cached_property
def simple_polygons(self):
return BroadcastAreasRepository().get_simple_polygons_for_area(self.id)
return Polygons(
BroadcastAreasRepository().get_simple_polygons_for_area(self.id)
)
@property
def sub_areas(self):
@@ -80,29 +83,5 @@ class BroadcastAreaLibraries(SerialisedModelCollection, GetItemByIdMixin):
areas = BroadcastAreasRepository().get_areas(area_ids)
return [BroadcastArea(area) for area in areas]
def get_polygons_for_areas_long_lat(self, *area_ids):
return list(itertools.chain(*(
area.polygons
for area in self.get_areas(*area_ids)
)))
def get_polygons_for_areas_lat_long(self, *area_ids):
return [
[[long, lat] for lat, long in polygon]
for polygon in self.get_polygons_for_areas_long_lat(*area_ids)
]
def get_simple_polygons_for_areas_long_lat(self, *area_ids):
return list(itertools.chain(*(
area.simple_polygons
for area in self.get_areas(*area_ids)
)))
def get_simple_polygons_for_areas_lat_long(self, *area_ids):
return [
[[long, lat] for lat, long in polygon]
for polygon in self.get_simple_polygons_for_areas_long_lat(*area_ids)
]
broadcast_area_libraries = BroadcastAreaLibraries()