summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorQuentinAndre <quentin.andre@imt-atlantique.net>2021-07-06 20:19:37 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:48 +0200
commit77245dac5fc748cff0306829c12f11f044a7cff7 (patch)
tree2c8114b1b22f7406748401e36486c75d732e79fe /ishtar_common/models_common.py
parente9898ed41c220e102801a441d7d23d69787b5cf2 (diff)
downloadIshtar-77245dac5fc748cff0306829c12f11f044a7cff7.tar.bz2
Ishtar-77245dac5fc748cff0306829c12f11f044a7cff7.zip
to geoJSON structure
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py39
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":