summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorQuentinAndre <quentin.andre@imt-atlantique.net>2021-07-06 17:57:21 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:48 +0200
commit033576e879647ec05b7d7110c4ea2a0d5f6fb62a (patch)
tree52b54e58e6d195b840be433305a5a7beefa1e49d /ishtar_common/models_common.py
parent61fbdfe4d35eddf998dc66459c2b5d1a6aeb4e7e (diff)
downloadIshtar-033576e879647ec05b7d7110c4ea2a0d5f6fb62a.tar.bz2
Ishtar-033576e879647ec05b7d7110c4ea2a0d5f6fb62a.zip
get_geo_items + test
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index ac42e5ee6..f21a74a12 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -22,6 +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.postgres.fields import JSONField
from django.contrib.postgres.search import SearchVectorField, SearchVector
from django.contrib.sites.models import Site
@@ -2855,6 +2856,44 @@ class GeoItem(models.Model):
if self.multi_polygon_source == "P" and self.multi_polygon:
return self.multi_polygon, self.multi_polygon_source_item
+ def get_geo_items(self, get_polygons=False, rounded=True):
+ dict = {}
+ if get_polygons and 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))
+ else:
+ dict["centroid"] = self.display_coordinates
+ return dict
+
+ def convert_coordinates(self, point_2d, rounded):
+ profile = get_current_profile()
+ if (
+ not profile.display_srs
+ or not profile.display_srs.srid
+ or (
+ profile.display_srs == self.spatial_reference_system
+ and point_2d.x
+ and point_2d.y)
+ ):
+ x, y = point_2d.x, point_2d.y
+ else:
+ 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
+
def most_precise_geo(self):
if self.point_source == "M":
return "multi_polygon"