summaryrefslogtreecommitdiff
path: root/chimere/migrations/0003_convert_tiny_urls.py
blob: fb39210e6f8640173ce9f8b38cb7f6bdc93d72d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations
import ogr
import osr


def convert_tiny_urls(apps, schema_editor):
    TinyUrl = apps.get_model('chimere', 'TinyUrl')
    in_ref = osr.SpatialReference()
    in_ref.ImportFromEPSG(3857)
    out_ref = osr.SpatialReference()
    out_ref.ImportFromEPSG(settings.CHIMERE_EPSG_DISPLAY_PROJECTION)
    transform = osr.CoordinateTransformation(in_ref, out_ref)

    for tiny_url in TinyUrl.objects.all():
        new_param = {
            'zoom': '',
            'lat': '',
            'lon': '',
            'checked_categories': '',
            'current_feature': '',
            'routing_speed': '',
            'routing_transport': '',
            'routing_start_lat': '',
            'routing_start_lon': '',
            'routing_end_lat': '',
            'routing_end_lon': '',
            'steps': ''
        }
        for parameter in tiny_url.parameters.split('&'):
            items = parameter.split('=')
            if len(items) != 2:
                continue
            param, value = items
            if param in ('zoom', 'routing_speed', 'routing_transport',
                         'routing_start_lat', 'routing_start_lon',
                         'routing_end_lat', 'routing_end_lon'):
                new_param[param] = value
            elif param in ('lat', 'lon'):
                x, y = 242500, 6230000
                if param == 'lat':
                    y = int(float(value))
                else:
                    x = int(float(value))
                point = ogr.Geometry(ogr.wkbPoint)
                point.AddPoint(x, y)
                point.Transform(transform)
                if param == 'lat':
                    new_param[param] = point.GetY()
                else:
                    new_param[param] = point.GetX()
            elif param == 'checked_categories':
                if '%2C' in value:
                    value = '-'.join(value.split('%2C'))
                if '_' in value:
                    value = '-'.join(value.split('_'))
                new_param[param] = value
            elif param == 'current_feature':
                if value:
                    new_param[param] = 'marker-' + value
            elif param == 'routing_steps':
                if not value:
                    continue
                vals = value.split('%2C')
                steps = []
                for idx in range(int(len(vals) / 2)):
                    steps.append("{}:{}".format(vals[2 * idx],
                                                vals[2 * idx + 1]))
                new_param['steps'] = ';'.join(steps)

        if not new_param['zoom'] or int(new_param['zoom']) < 12:
            new_param['zoom'] = '12'

        new_param['coord'] = ''
        if new_param['lon'] and new_param['lat']:
            new_param['coord'] = '{lon}:{lat}'.format(**new_param)
        new_param['routing_start'] = ''
        if new_param['routing_start_lat'] and new_param['routing_start_lon']:
            new_param['routing_start'] = \
                "{routing_start_lat}:{routing_start_lon}".format(**new_param)
        new_param['routing_end'] = ''
        if new_param['routing_end_lat'] and new_param['routing_end_lon']:
            new_param['routing_end'] = \
                "{routing_end_lat}:{routing_end_lon}".format(**new_param)

        tiny_url.parameters = \
            "{zoom};{coord};"\
            ";{checked_categories};{current_feature}"\
            "{routing_speed};{routing_transport};"\
            "{routing_start};"\
            "{routing_end};"\
            "{steps}".format(**new_param)
        if TinyUrl.objects.filter(parameters=tiny_url.parameters).count():
            tiny_url.delete()
        else:
            tiny_url.save()


class Migration(migrations.Migration):

    dependencies = [
        ('chimere', '0002_property_route'),
    ]

    operations = [
        migrations.RunPython(convert_tiny_urls),
    ]