diff options
| -rw-r--r-- | ishtar_common/models_common.py | 12 | ||||
| -rw-r--r-- | ishtar_common/utils.py | 4 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 34 | 
3 files changed, 26 insertions, 24 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index a7f9bd2fd..414e63c55 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -2132,11 +2132,13 @@ class GeoVectorData(models.Model):              name += f" ({str(self.data_type).lower()})"          return name -    def display_coordinates(self, rounded=5, dim=2, cache=True): -        srid = None -        profile = get_current_profile() -        if profile.display_srs and profile.display_srs.srid: -            srid = profile.display_srs.srid +    def display_coordinates(self, rounded=5, dim=2, srid=4326, cache=True): +        if not srid: +            profile = get_current_profile() +            if profile.display_srs and profile.display_srs.srid: +                srid = profile.display_srs.srid +            else: +                srid = 4326          return self.get_coordinates(rounded=rounded, srid=srid, dim=dim, cache=cache)      def get_coordinates(self, rounded=5, srid: int = None, dim=2, cache=False): diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 88c9129a3..89700eaad 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -776,11 +776,11 @@ def _post_save_geodata(sender, **kwargs):      # managed cached coordinates      cached_x, cached_y, cached_z = None, None, None -    coords = instance.display_coordinates(rounded=False, dim=3, cache=False) +    coords = instance.display_coordinates(rounded=False, dim=3, srid=4326, 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, cache=False) +        coords = instance.display_coordinates(rounded=False, dim=2, srid=4326, cache=False)          if coords:              cached_x, cached_y = coords diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 404df6f90..68a340a75 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -20,6 +20,7 @@ from django.contrib.staticfiles.templatetags.staticfiles import static  from django.core.cache import cache  from django.core.exceptions import ObjectDoesNotExist  from django.db.models import ( +    F,      Q,      Count,      Sum, @@ -1361,7 +1362,8 @@ def _format_geojson(rows, link_template):      return data -def _get_data_from_query(items, query_table_cols, extra_request_keys, point_field=None): +def _get_data_from_query(items, query_table_cols, extra_request_keys, +                         point_fields=None):      # TODO: manage data json field      for query_keys in query_table_cols:          if not isinstance(query_keys, (tuple, list)): @@ -1379,25 +1381,21 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys, point_fiel              query_key.replace(".", "__")  # class style to query      values = ["id"] + query_table_cols -    if point_field: +    if point_fields:          profile = get_current_profile()          precision = profile.point_precision          if precision is not None:              exp_x = ExpressionWrapper( -                Round(Func(point_field, function="ST_X"), precision), +                Round(point_fields[0], precision),                  output_field=FloatField(),              )              exp_y = ExpressionWrapper( -                Round(Func(point_field, function="ST_Y"), precision), +                Round(point_fields[1], precision),                  output_field=FloatField(),              )          else: -            exp_x = ExpressionWrapper( -                Func(point_field, function="ST_X"), output_field=FloatField() -            ) -            exp_y = ExpressionWrapper( -                Func(point_field, function="ST_Y"), output_field=FloatField() -            ) +            exp_x = F(point_fields[0]) +            exp_y = F(point_fields[1])          items = items.annotate(point_x=exp_x)          items = items.annotate(point_y=exp_y)          values += ["point_x", "point_y"] @@ -2100,12 +2098,13 @@ def get_item(              query_table_cols.append("main_image__image")              table_cols.append("main_image__image")          elif data_type == "json-map": +            base_query_key = "main_geodata__"              if model.SLUG == "find": -                query_table_cols.append("base_finds__point_2d") -                table_cols.append("base_finds__point_2d") -            else: -                query_table_cols.append("point_2d") -                table_cols.append("point_2d") +                base_query_key = "base_finds__" + base_query_key +            query_table_cols += [base_query_key + "cached_x", +                                 base_query_key + "cached_y"] +            table_cols += [base_query_key + "cached_x", +                           base_query_key + "cached_y"]          # manage sort tables          manual_sort_key = None @@ -2195,9 +2194,10 @@ def get_item(              items = [item.get_previous(old) for item in items]          if data_type == "json-map": -            point_field = query_table_cols.pop() +            point_fields = query_table_cols[-2:]              datas = _get_data_from_query( -                items, query_table_cols, my_extra_request_keys, point_field=point_field +                items, query_table_cols, my_extra_request_keys, +                point_fields=point_fields              )          elif data_type != "csv" and getattr(model, "NEW_QUERY_ENGINE", False):              datas = _get_data_from_query(items, query_table_cols, my_extra_request_keys)  | 
