Projet

Général

Profil

0002-okina-calculate-distance-for-each-stop-point-43137.patch

Thomas Noël, 25 mai 2020 23:52

Télécharger (2,74 ko)

Voir les différences:

Subject: [PATCH 2/2] okina: calculate distance for each stop point (#43137)

 passerelle/apps/okina/models.py | 18 +++++++++++++++---
 tests/test_okina.py             |  2 ++
 2 files changed, 17 insertions(+), 3 deletions(-)
passerelle/apps/okina/models.py
16 16

  
17 17
import json
18 18

  
19
from pyproj import Geod
20

  
19 21
from django.db import models
20 22
from django.http import HttpResponse
21 23
from django.utils.http import urlencode
......
137 139
                'mode': {'description': _('Search mode: CLOSE_SCHOLAR (default) = 3km, FAR_ALL = 15km')},
138 140
            })
139 141
    def search(self, request, lat, lon, institution, address='', mode='CLOSE_SCHOLAR'):
142
        lat = float(lat.replace(',', '.'))
143
        lon = float(lon.replace(',', '.'))
140 144
        payload = {
141
                'from-lat': lat.replace(',', '.'),
142
                'from-long': lon.replace(',', '.'),
145
                'from-lat': '%s' % lat,
146
                'from-long': '%s' % lon,
143 147
                'from-address': address,
144 148
                'institution-id': institution,
145 149
                'type': mode,
......
148 152
        for stop in stops:
149 153
            stop['id'] = '%s' % stop['id']
150 154
            stop['text'] = stop['commercial_name']
151
            stop['latlon'] = '%s;%s' % (stop.get('latitude') or '0.00', stop.get('longitude') or '0.00')
155
            try:
156
                slat = float(stop.get('latitude'))
157
                slon = float(stop.get('longitude'))
158
                geod = Geod(ellps='WGS84')
159
                stop['distance'] = int(geod.inv(lon, lat, slon, slat)[2])
160
            except (ValueError, TypeError):
161
                slat = slon = 0.0
162
                stop['distance'] = None
163
            stop['latlon'] = '%s;%s' % (slat, slon)
152 164
        return {'data': stops}
153 165

  
154 166
    @endpoint(name='stop-areas',
tests/test_okina.py
1748 1748
        assert resp.json['data'][0]['id'] == '3312'
1749 1749
        assert resp.json['data'][0]['text'] == 'Le Grand Verger'
1750 1750
        assert resp.json['data'][0]['latlon'] == '46.8444186;1.708197'
1751
        assert resp.json['data'][0]['distance'] == 1826
1752

  
1751 1753
        # french decimals
1752 1754
        resp = app.get(endpoint + '?lat=46,8&lon=1,71&address=nowhere&mode=FAR_ALL&institution=280',
1753 1755
                       status=200)
1754
-