diff options
| author | Quentin André <quentin.andre@imt-atlantique.net> | 2021-07-06 18:58:53 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-07-08 09:58:48 +0200 | 
| commit | 7d8e7d7726bf87600da7e51bcce5e82a166231d5 (patch) | |
| tree | f9830f17a8cfa5aa46ad43b2685d722283177065 | |
| parent | c39d2d8a7e904467c1ed9f719da3c17894ceed83 (diff) | |
| download | Ishtar-7d8e7d7726bf87600da7e51bcce5e82a166231d5.tar.bz2 Ishtar-7d8e7d7726bf87600da7e51bcce5e82a166231d5.zip | |
test + geo_get_items
| -rw-r--r-- | archaeological_finds/tests.py | 14 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 29 | 
2 files changed, 30 insertions, 13 deletions
| diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 8cac07812..51da0d879 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -2535,6 +2535,20 @@ class GeomaticTest(FindInit, TestCase):          base_find = models.BaseFind.objects.get(pk=base_find.pk) +        # with point +        geom = GEOSGeometry("POINT({} {} {})".format(2, 43, 1), srid=4326) +        base_find.point = geom +        base_find.multi_polygon = None +        base_find.save() +        base_find = models.BaseFind.objects.get(pk=base_find.pk) +        dic = {"centroid": (2.0, 43.0)} +        res = base_find.get_geo_items(get_polygons=True) +        self.assertEqual(dic, res) +        res = base_find.get_geo_items(get_polygons=False) +        self.assertEqual(dic, res) + +        # with multi-polygon +        base_find = models.BaseFind.objects.get(pk=base_find.pk)          limit = (              "MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),"              "((6 3,9 2,9 4,6 3)))" diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index f21a74a12..ebf9fbc41 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -2858,20 +2858,23 @@ class GeoItem(models.Model):      def get_geo_items(self, get_polygons=False, rounded=True):          dict = {} -        if get_polygons and self.multi_polygon: +        if self.multi_polygon:              i = 0 -            for polygon in self.multi_polygon: -                i += 1 -                for linearRing in range(len(polygon)): -                    if linearRing == 0: -                        key = "external" -                    else: -                        key = "internal" -                    key += "Polygon" + str(i) -                    dict[key] = [] -                    for coords in polygon[linearRing]: -                        point_2d = GEOSGeometry("POINT({} {})".format(coords[0], coords[1]), srid=self.multi_polygon.srid) -                        dict[key].append(self.convert_coordinates(point_2d, rounded)) +            if get_polygons: +                for polygon in self.multi_polygon: +                    i += 1 +                    for linearRing in range(len(polygon)): +                        if linearRing == 0: +                            key = "external" +                        else : +                            key = "internal" +                        key += "Polygon" + str(i) +                        dict[key] = [] +                        for coords in polygon[linearRing]: +                            point_2d = GEOSGeometry("POINT({} {})".format(coords[0], coords[1]), srid=self.multi_polygon.srid) +                            dict[key].append(self.convert_coordinates(point_2d, rounded)) +            else: +                dict["centroid"] = self.convert_coordinates(self.multi_polygon.centroid, rounded)          else:              dict["centroid"] = self.display_coordinates          return dict | 
