summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-12 22:25:51 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-01-12 22:25:51 +0100
commit8bec0a17da159e3dd78cdc6e66c3c7171c092989 (patch)
tree0e9886baa8fc743c009e93c02a5dfa38671f4c37 /ishtar_common/utils.py
parentcde6d2c13a479c24b6a93929938b06c353e7c2c4 (diff)
parent10e0ac399ae479f1bf646945ac7c809e168506fe (diff)
downloadIshtar-8bec0a17da159e3dd78cdc6e66c3c7171c092989.tar.bz2
Ishtar-8bec0a17da159e3dd78cdc6e66c3c7171c092989.zip
Merge branch 'master' into v0.9
Conflicts: archaeological_warehouse/migrations/0004_auto__chg_field_container_responsible.py
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 9b3c85694..ddd9268ce 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -20,7 +20,9 @@
import hashlib
import random
+from django import forms
from django.conf import settings
+from django.contrib.gis.geos import GEOSGeometry
from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
@@ -151,3 +153,39 @@ def get_random_item_image_link(request):
image_nb - ope_image_nb - cr_image_nb])
# should never happen except in case of deletion during the excution
return ''
+
+
+def convert_coordinates_to_point(x, y, z=None, srid=4326):
+ if z:
+ geom = GEOSGeometry('POINT({} {} {})'.format(x, y, z), srid=srid)
+ else:
+ geom = GEOSGeometry('POINT({} {})'.format(x, y), srid=srid)
+ if not geom.valid:
+ raise forms.ValidationError(geom.valid_reason)
+ return geom
+
+
+def post_save_point(sender, **kwargs):
+ """
+ Convert raw x, y, z point to real geo field
+ """
+ if not kwargs.get('instance'):
+ return
+ instance = kwargs.get('instance')
+ point = None
+ point_2d = None
+ if instance.x and instance.y and \
+ instance.spatial_reference_system and \
+ instance.spatial_reference_system.srid != 0:
+ point_2d = convert_coordinates_to_point(
+ instance.x, instance.y, srid=instance.spatial_reference_system.srid)
+ if instance.z:
+ point = convert_coordinates_to_point(
+ instance.x, instance.y, instance.z,
+ srid=instance.spatial_reference_system.srid)
+ if point_2d != instance.point_2d or point != instance.point:
+ instance.point = point
+ instance.point_2d = point_2d
+ instance.skip_history_when_saving = True
+ instance.save()
+ return