From e4c16fe64565d15bc11be6e3879c28228750c795 Mon Sep 17 00:00:00 2001 From: ray Date: Mon, 15 Apr 2024 15:51:09 -0700 Subject: [PATCH] DBC22-893: added transformations and check for road conditions --- src/backend/apps/event/models.py | 11 ++++++++--- src/backend/apps/event/tasks.py | 14 +++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/backend/apps/event/models.py b/src/backend/apps/event/models.py index d779c70c5..c4dbe2468 100644 --- a/src/backend/apps/event/models.py +++ b/src/backend/apps/event/models.py @@ -42,8 +42,13 @@ class Event(BaseModel): end = models.DateTimeField(null=True) def save(self, *args, **kwargs): - # Put buffer on LineStrings on creation only - if self._state.adding and self.location and self.location.geom_type == 'LineString': - self.polygon = self.location.buffer_with_style(0.0182, end_cap_style=2) # ~2km buffer in degrees + # Put buffer on road condition LineStrings on creation only + if self._state.adding and self.location and self.location.geom_type == 'LineString' and self.pk.startswith('DBCRCON'): + self.location.transform(3857) # Transform to 3857 before adding buffer + self.polygon = self.location.buffer_with_style(2000, end_cap_style=2) # 2km buffer + + # Transform back to 4326 before updating + self.location.transform(4326) + self.polygon.transform(4326) super().save(*args, **kwargs) diff --git a/src/backend/apps/event/tasks.py b/src/backend/apps/event/tasks.py index b5f5c6ec4..e54671267 100644 --- a/src/backend/apps/event/tasks.py +++ b/src/backend/apps/event/tasks.py @@ -35,11 +35,23 @@ def build_data_diff(current_obj, new_obj_data): # {'coordinates': [-122.601346, 49.143921], 'type': 'Point'} if new_field_data['type'] == 'Point': data_diff[field] = Point(new_field_data['coordinates']) + data_diff['polygon'] = None else: ls = LineString(new_field_data['coordinates']) data_diff[field] = ls - data_diff['polygon'] = ls.buffer_with_style(distance=0.0182, end_cap_style=2) # ~2km buffer in degrees + + # Add buffer to road condition linestrings + if new_obj_data['id'].startswith('DBCRCON'): + ls.transform(3857) # Transform to 3857 before adding buffer + data_diff['polygon'] = ls.buffer_with_style(2000, end_cap_style=2) # Add 2km buffer + + # transform back to 4326 before updating + ls.transform(4326) + data_diff['polygon'].transform(4326) + + else: + data_diff['polygon'] = None else: data_diff[field] = new_field_data