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),
]
|