diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-16 20:04:52 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-16 20:04:52 +0100 | 
| commit | 93e740521986afe34c8ade146b95d8f8e95a5fd8 (patch) | |
| tree | b092537bfc80f4db5acf987400af853827c80c94 /chimere/migrations/0003_convert_tiny_urls.py | |
| parent | 0eca93c576e26e2abe6a1f347b5b1630e8776123 (diff) | |
| download | Chimère-93e740521986afe34c8ade146b95d8f8e95a5fd8.tar.bz2 Chimère-93e740521986afe34c8ade146b95d8f8e95a5fd8.zip  | |
Add script to convert tiny url to the new format
Diffstat (limited to 'chimere/migrations/0003_convert_tiny_urls.py')
| -rw-r--r-- | chimere/migrations/0003_convert_tiny_urls.py | 110 | 
1 files changed, 110 insertions, 0 deletions
diff --git a/chimere/migrations/0003_convert_tiny_urls.py b/chimere/migrations/0003_convert_tiny_urls.py new file mode 100644 index 0000000..fb39210 --- /dev/null +++ b/chimere/migrations/0003_convert_tiny_urls.py @@ -0,0 +1,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), +    ]  | 
