From 0dbba5048ae60e4ba746ef100605e8edea72d6ce Mon Sep 17 00:00:00 2001 From: QuentinAndre Date: Tue, 6 Jul 2021 20:19:37 +0200 Subject: to geoJSON structure --- ishtar_common/models_common.py | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'ishtar_common/models_common.py') diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 1462d538e..3d8b4f8f6 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 @@ -2848,26 +2848,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): @@ -2885,8 +2888,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": -- cgit v1.2.3