main
ifiguero 2025-02-23 16:49:15 -03:00
parent 6f0776630b
commit 47b1e0bc24
1 changed files with 32 additions and 17 deletions

View File

@ -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)