diff options
-rw-r--r-- | ishtar_common/models_common.py | 28 | ||||
-rw-r--r-- | ishtar_common/utils.py | 9 |
2 files changed, 23 insertions, 14 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 9aae922cc..a7f9bd2fd 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -2147,7 +2147,7 @@ class GeoVectorData(models.Model): if dim == 3: coordinates.append(self.cached_z) else: - if self.x and self.y: # user input + if self.x or self.y or self.z: # user input if not srid or srid == self.spatial_reference_system.srid: coordinates = [self.x, self.y] if dim == 3: @@ -2164,14 +2164,26 @@ class GeoVectorData(models.Model): coordinates = [point.x, point.y] if dim == 3: coordinates.append(point.z) - elif self.point_2d and dim == 2: - point = self.point_2d.transform(srid, clone=True) - coordinates = [point.x, point.y] - elif self.point_3d and dim == 3: - point = self.point_3d.transform(srid, clone=True) - coordinates = [point.x, point.y, point.z] else: - return + if self.point_2d and dim == 2: + geom = self.point_2d + elif self.point_3d and dim == 3: + geom = self.point_3d + elif self.multi_points: + geom = self.multi_points.centroid + elif self.multi_line: + geom = self.multi_line.centroid + elif self.multi_polygon: + geom = self.multi_polygon.centroid + else: + if dim == 2: + return [None, None] + return [None, None, None] + point = geom.transform(srid, clone=True) + if dim == 2: + coordinates = [point.x, point.y] + else: + coordinates = [point.x, point.y, point.z] if not rounded: return coordinates return [round(coord, rounded) for coord in coordinates] diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index a7e07ebde..88c9129a3 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -774,16 +774,13 @@ def _post_save_geodata(sender, **kwargs): modified = True # managed cached coordinates - # TODO cached_x, cached_y, cached_z = None, None, None - coords = instance.display_coordinates(rounded=False, dim=3) - if coords: + coords = instance.display_coordinates(rounded=False, dim=3, cache=False) + if coords and coords != [None, None, None]: cached_x, cached_y, cached_z = coords else: - coords = instance.display_coordinates(rounded=False, dim=2) - if not coords: - coords = instance.get_coordinates_from_polygon(rounded=False) + coords = instance.display_coordinates(rounded=False, dim=2, cache=False) if coords: cached_x, cached_y = coords |