diff options
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 |
commit | 8bec0a17da159e3dd78cdc6e66c3c7171c092989 (patch) | |
tree | 0e9886baa8fc743c009e93c02a5dfa38671f4c37 /ishtar_common/utils.py | |
parent | cde6d2c13a479c24b6a93929938b06c353e7c2c4 (diff) | |
parent | 10e0ac399ae479f1bf646945ac7c809e168506fe (diff) | |
download | Ishtar-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.py | 38 |
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 |