diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-12 17:03:24 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-12 17:05:56 +0100 | 
| commit | fc5579137bfa56ac7729ea82f28554a3250a0d34 (patch) | |
| tree | b92b5ef5c085e03669a9227fe2512ed7e9d459ed /ishtar_common/utils.py | |
| parent | 71b9f7aadd53120957eb3ed288123b1a4e6fe81b (diff) | |
| download | Ishtar-fc5579137bfa56ac7729ea82f28554a3250a0d34.tar.bz2 Ishtar-fc5579137bfa56ac7729ea82f28554a3250a0d34.zip | |
Add a mapping module - Finds: add explicit x, y, z - automatically update point and point_2d
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 | 
