Make calculating overlapping areas faster

By using the simplified polygons instead of the full resolutions ones
we:
- query less data from SQLite
- pass less data around
- give Shapely a less complicated shape to do its calculations on

This makes it faster to calculate how much of each electoral ward a
custom area overlaps.

For the two areas in our tests:

Place represented by custom area | Before | After
---------------------------------|--------|--------
Bristol                          | 0.07s  | 0.02s
Skye                             | 0.02s  | 0.01s
This commit is contained in:
Chris Hill-Scott
2021-07-05 15:54:06 +01:00
parent 08084dfbd2
commit e7ec77c5bb
2 changed files with 3 additions and 3 deletions

View File

@@ -171,7 +171,7 @@ class CustomBroadcastArea(BaseBroadcastArea):
@cached_property
def count_of_phones(self):
return sum(
area.polygons.ratio_of_intersection_with(self.polygons) * area.count_of_phones
area.simple_polygons.ratio_of_intersection_with(self.polygons) * area.count_of_phones
for area in self.overlapping_areas
)

View File

@@ -377,7 +377,7 @@ def test_estimated_bleed(
'Stoke Bishop',
'Windmill Hill',
],
73_496,
73_119,
),
(
SKYE,
@@ -387,7 +387,7 @@ def test_estimated_bleed(
'Na Hearadh agus Ceann a Deas nan Loch',
'Wester Ross, Strathpeffer and Lochalsh',
],
3_517,
3_534,
),
))
def test_count_of_phones_for_custom_area(