diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models_common.py | 39 | 
1 files changed, 21 insertions, 18 deletions
| diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index ebf9fbc41..349f0a50c 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -22,7 +22,7 @@ from django.conf import settings  from django.contrib.auth.models import User, Group  from django.contrib.contenttypes.models import ContentType  from django.contrib.gis.db import models -from django.contrib.gis.geos import GEOSGeometry +from django.contrib.gis.geos import Point  from django.contrib.postgres.fields import JSONField  from django.contrib.postgres.search import SearchVectorField, SearchVector  from django.contrib.sites.models import Site @@ -2857,26 +2857,29 @@ class GeoItem(models.Model):              return self.multi_polygon, self.multi_polygon_source_item      def get_geo_items(self, get_polygons=False, rounded=True): -        dict = {} +        dict = { +            "type": "Feature", +            "geometry": {}, +        }          if self.multi_polygon: -            i = 0              if get_polygons: +                list_coords = []                  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)) +                    list_coords.append([]) +                    for linear_ring in range(len(polygon)): +                        list_coords[-1].append([]) +                        for coords in polygon[linear_ring]: +                            point_2d = Point(coords[0], coords[1], srid=self.multi_polygon.srid) +                            list_coords[-1][linear_ring].append(self.convert_coordinates(point_2d, rounded)) +                dict["geometry"]["type"] = "MultiPolygon" +                dict["geometry"]["coordinates"] = list_coords              else: -                dict["centroid"] = self.convert_coordinates(self.multi_polygon.centroid, rounded) +                dict["geometry"]["type"] = "Point" +                dict["geometry"]["coordinates"] = self.convert_coordinates(self.multi_polygon.centroid, rounded)          else: -            dict["centroid"] = self.display_coordinates +            dict["geometry"]["type"] = "Point" +            x,y = self.display_coordinates +            dict["geometry"]["coordinates"] = [x,y]          return dict      def convert_coordinates(self, point_2d, rounded): @@ -2894,8 +2897,8 @@ class GeoItem(models.Model):              point = point_2d.transform(profile.display_srs.srid, clone=True)              x, y = point.x, point.y          if rounded: -            return round(x, 5), round(y, 5) -        return x, y +            return [round(x, 5), round(y, 5)] +        return [x, y]      def most_precise_geo(self):          if self.point_source == "M": | 
