File size: 3,398 Bytes
bc9904d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import pandas as pd
import googlemaps
import os

def load_data(flag, broker_id):
    if flag == 0: # broker data
        df_segments = pd.read_csv('../api_local/segments_data.csv')
        df_carriers = pd.read_csv('../api_local/carriers_info.csv')
    else: #global data
        df_segments = pd.read_csv('segments_data.csv')
        df_carriers = pd.read_csv('carriers_info.csv')
    return df_segments, df_carriers

def query_type(route_c2c, route_s2s, df_segments):
    if route_s2s in df_segments['s2s_route'].values:
        #print('Existe State to State')
        if route_c2c in df_segments['c2c_route'].values:
            #print('Existe City to City')
            return 'city2city'
        else:
           # print('No existe City to City')
            return 'state2state'
    else:
        #print('No existe State to State')
        return 'pickup'

def get_distance(c2c_route, route_s2s, query_type, broker_id):
    if query_type == 'city2city':
        df_distances = pd.read_csv(f'../data/{broker_id}/distances.csv')
        distance = df_distances.loc[df_distances['c2c_route'] == c2c_route, 'distance'].values
        print(f"Distancia encontrada en el dataset: {distance[0]} millas.")
        return distance[0]
    else:
            df_distances = pd.read_csv('../data/API_distances_saved.csv')
            if c2c_route in df_distances['c2c_route'].values:
                distance = df_distances.loc[df_distances['c2c_route'] == c2c_route, 'distance'].values
                print(f"Distancia encontrada en el API_distances_saved: {distance[0]} millas.")
                return distance[0]
            else:
                print(f"La ruta '{c2c_route}' no se encontró en el dataset. Consultando API de Google Maps...")
                return get_distance_api(c2c_route, route_s2s)

def get_distance_api(route_c2c, route_s2s):
    API_KEY = 'AIzaSyBQ0cBrxzx6Gh7EYC1nBpBCQKvi4vC15dc'
    gmaps = googlemaps.Client(key=API_KEY)

    try:
        origenc, destinoc = route_c2c.split(' - ')
        origens, destinos = route_s2s.split(' - ')
        
        origen = f"{origens}, {origenc}"
        destino = f"{destinos}, {destinoc}"
        
        result = gmaps.distance_matrix(
            origins=origen,
            destinations=destino,
            mode="driving",
            units="imperial"  # Distancia en millas
        )

        distance_text = result['rows'][0]['elements'][0]['distance']['text']  # Ejemplo: "124 mi"
        distance_miles = float(distance_text.split(' ')[0].replace(',', ''))  # Convertir "124 mi" a 124.0
        print(f"Distancia obtenida de Google Maps API: {distance_miles} millas.")

        filename = '../data/API_distances_saved.csv'

        if os.path.exists(filename):
            df = pd.read_csv(filename)
        else:
            df = pd.DataFrame(columns=['c2c_route', 'distance'])

        # Agregar la nueva ruta y distancia
        new_entry = {'c2c_route': route_c2c, 'distance': distance_miles}
        df = pd.concat([df, pd.DataFrame([new_entry])], ignore_index=True)

        # Guardar el DataFrame actualizado en el archivo
        df.to_csv(filename, index=False)
        print(f"Ruta y distancia guardadas en {filename}.")

        return distance_miles
    
    except Exception as e:
        print(f"Error al obtener la distancia para la ruta '{route_c2c}' usando la API de Google Maps: {e}")
        return None