diff --git a/tpmcqr_service/api/utils.py b/tpmcqr_service/api/utils.py index 33333d2..93eff02 100644 --- a/tpmcqr_service/api/utils.py +++ b/tpmcqr_service/api/utils.py @@ -108,10 +108,14 @@ def calcula_distancias_parada(redis_id, parada_id): paradadb = obtiene_datos_parada(parada_id) if not paradadb: + salida_parada['stop_name'] = 'Parada no Existe' salida_parada['debug'] = 'Parada no Existe' return 400, salida_parada + salida_parada['lineas'] = [] + if not paradadb.vigente: + salida_parada['stop_name'] = paradadb.stop_names salida_parada['debug'] = 'Parada sin servicios' salida_parada['vigente'] = False return 200, info_linea @@ -121,7 +125,6 @@ def calcula_distancias_parada(redis_id, parada_id): for key in ['stop_name', 'stop_lat', 'stop_lon']: salida_parada[key] = getattr(paradadb, key) - salida_parada['lineas'] = [] for id_linea in obtiene_lineas_parada(paradadb.id_paradero): rt_linea = pickle.loads(redis_client.get(id_linea)) @@ -139,21 +142,27 @@ def calcula_distancias_parada(redis_id, parada_id): expediciones_enruta = [] expediciones_pasadas = [] - for item in rt_linea['servicios']: - if item[0] < parada_distance: - expediciones_enruta.append(item) + estimator = 'debug_estimator' + for expedicion in rt_linea['servicios']: + trip_info = estima_llegada(parada_distance, expedicion) + + if trip_info[estimator] > 0: + expediciones_enruta.append(trip_info) else: - expediciones_pasadas.append(item) + expediciones_pasadas.append(trip_info) + + expediciones_enruta.sort(key=lambda x: x[estimator]) + expediciones_pasadas.sort(key=lambda x: x[estimator]) if len(expediciones_enruta) > 0: - info_linea['servicios'].append( estima_llegada(parada_distance, expediciones_enruta.pop(-1)) ) + info_linea['servicios'].append( expediciones_enruta.pop(-1) ) if len(expediciones_enruta) > 0: - info_linea['servicios'].append( estima_llegada(parada_distance, expediciones_enruta.pop(-1)) ) + info_linea['servicios'].append( expediciones_enruta.pop(-1) ) if len(expediciones_pasadas) > 0: - info_linea['recientes'].append( estima_llegada(parada_distance, expediciones_pasadas.pop(0)) ) + info_linea['recientes'].append( expediciones_enruta.pop(0) ) if len(expediciones_pasadas) > 0: - info_linea['recientes'].append( estima_llegada(parada_distance, expediciones_pasadas.pop(0)) ) + info_linea['recientes'].append( expediciones_enruta.pop(0) ) salida_parada['lineas'].append(info_linea) @@ -167,24 +176,30 @@ def estima_llegada(parada_distance, expedicion): trip_info['drift'] = int(trip_info['ts']) - ts trip_info['trip_distance'] = parada_distance - int(trip_info['trip_traveled']) estimator = int(trip_info['trip_distance'] / 5) # 18 Km/h promedio -> 5 m/s - trip_info['debug_estimator'] = estimator + trip_info['old_estimator'] = estimator + trip_info['forward_correction'] = trip_info['drift'] * 5 # distancia avanzada desde el timestamp original (estimación de avance) + trip_info['forward_inference'] = 60 * 5 # forward position a minute to predict position + estimator = int((trip_info['trip_distance'] + trip_info['forward_correction'] - trip_info['forward_inference']) / 5) + trip_info['estimator'] = estimator if estimator > 1570: # 26:10 minutos - trip_info['trip_estimator'] = '25-30 minutos' + trip_info['trip_estimator'] = 'En 25-30 minutos' elif estimator > 1260: # #21 minutos - trip_info['trip_estimator'] = '20-25 minutos' + trip_info['trip_estimator'] = 'En 20-25 minutos' elif estimator > 950: #15:50 minutos - trip_info['trip_estimator'] = '15-20 minutos' + trip_info['trip_estimator'] = 'En 15-20 minutos' elif estimator > 640: #10:40 minutos - trip_info['trip_estimator'] = '10-15 minutos' + trip_info['trip_estimator'] = 'En 10-15 minutos' elif estimator > 330: # 5:30 - trip_info['trip_estimator'] = '5-10 minutos' + trip_info['trip_estimator'] = 'En 5-10 minutos' elif estimator > 200: # 3:20 sec - trip_info['trip_estimator'] = '3 minutos' + trip_info['trip_estimator'] = 'En 3 minutos' elif estimator > 70: # trip_info['trip_estimator'] = 'Llegando' elif estimator > 0: # - trip_info['trip_estimator'] = 'En parada' + trip_info['trip_estimator'] = 'En Parada' + elif estimator > -60: # + trip_info['trip_estimator'] = 'Avanzando' else: # salida = math.ceil(-estimator/60) trip_info['trip_estimator'] = 'Hace {} minutos'.format(salida)