def produce_M1_trajs_from_data(zone='LF', data_version=None, put_fake_sectors=False, save_file=None, **kwargs_distance): # Get navpoint network paras_nav = paras_strategic(zone=zone, mode='navpoints', data_version=data_version, **kwargs_distance) seth = get_set(paras_nav, force=False) G_nav, flights_nav = seth.G, seth.flights trajectories = [] for f in seth.flights.values(): #print f['route_m1'] #print zip(*f['route_m1']) #raise Exception() points, altitudes = zip(*f['route_m1']) if not put_fake_sectors: traj = [(G_nav.node[points[i]]['coord'][0]/60., G_nav.node[points[i]]['coord'][1]/60., altitudes[i],\ f['route_m1t'][i][1]) for i in range(len(points))] else: traj = [(G_nav.node[points[i]]['coord'][0]/60., G_nav.node[points[i]]['coord'][1]/60., altitudes[i], \ f['route_m1t'][i][1], 0) for i in range(len(points))] # else: # raise Exception("I can't put sectors, not implemented yet.") # # The problem with the following is that G is not a network from the ABM but from distance. # traj = [(G_nav.node[points[i]]['coord'][0]/60., G_nav.node[points[i]]['coord'][1]/60., # altitudes[i], f['route_m1t'][i][1], G_nav.node[points[i]]['sec']) for i in range(len(points))] trajectories.append(traj) if save_file!=None: write_trajectories_for_tact(trajectories, fil=save_file) return trajectories
def trajectories_from_data(zone='LF', fmt='(n, z, t)', data_version=None, save_file=None, **kwargs_distance): """ Produce some trajectories with signature ['(n, z, t)', '(n, z), t', '(n), t', or '(n, t)' """ try: assert fmt in ['(n, z, t)', '(n, z), t', '(n), t', '(n, t)']#, ('n', 'z', 'timeint'), (('n', 'z'), 'timeint')] except: Exception("Format", fmt, "is not implemented.") # Get navpoints network paras_nav = paras_strategic(zone=zone, mode='sectors', data_version=data_version, **kwargs_distance) seth = get_set(paras_nav, force=False) G, flights_nav = seth.G, seth.flights trajectories = [] for f in seth.flights.values(): points, altitudes = zip(*f['route_m1']) if fmt == '(n, z, t)': trajectories.append([(points[i], altitudes[i], f['route_m1t'][i][1]) for i in range(len(points))]) elif fmt == '(n, t)': trajectories.append([(points[i], f['route_m1t'][i][1]) for i in range(len(points))]) elif fmt == '(n, z), t': trajectories.append(([(points[i], altitudes[i]) for i in range(len(points))], f['route_m1t'][0][1])) elif fmt == '(n), t': trajectories.append(([points[i] for i in range(len(points))], f['route_m1t'][0][1])) return trajectories, G
def build_net_distance(zone='LF', data_version=None, layer=350., checks=True, show=True, **kwargs_distance): from paras_G import paras_G # TODO Change this, this is really bad. # Get navpoint network paras_nav = paras_strategic(zone=zone, mode='navpoints', data_version=data_version, **kwargs_distance) seth = get_set(paras_nav, force=False) G_nav, flights_nav = seth.G, seth.flights #print "Number of navpoints with degree 0:", len([n for n in G_nav.nodes() if G_nav.degree(n)]) #print "Number of flights:", len(flights_nav) paras_G['net_nav'] = G_nav print "Number of nodes in navpoint network:", len(G_nav.nodes()) # Get sector network G_sec, polygons = build_network_based_on_shapes(paras_nav['password_db'], paras_nav['airac'], zone, layer) paras_G['net_sec'] = G_sec print "Number of nodes in sec network:", len(G_sec.nodes()) # Get polygons paras_G['polygons'] = polygons print "Number of polygons:", len(paras_G['polygons']) # Select the flights used to build the capacities and weights paras_G['flights_selected'] = flights_nav.values() # Generate weights (times of travel) based on traffic paras_G['generate_weights_from_traffic'] = True # Generate capacities based on traffic paras_G['generate_capacities_from_traffic'] = True # Other parameters paras_G['Nfp']=2 paras_G['small_sec_thr'] = 0 paras_G['make_entry_exit_points'] = False paras_G['make_borders_points'] = False paras_G['attach_termination_nodes'] = True paras_G['singletons'] = True paras_G['expansion'] = 0.1 # Extract entry/exit from traffic data: route = 'route_' + paras_nav['nodes'] #entry_exit = [(f[route][0][0], f[route][-1][0]) for f in paras_G['flights_selected']] #airports = set([e for ee in entry_exit for e in ee]) #paras_G['airports_nav'] = airports paras_G['airports_nav'] = [] paras_G['function_airports_nav'] = extract_airports_from_traffic #paras_G['pairs_nav'] = entry_exit paras_G['pairs_nav'] = [] paras_G['airports_sec'] = None paras_G['pairs_sec'] = None paras_G['type_of_net'] = 'R' # Building name paras_G['name'] = name(paras_nav, data_version) # if checks: # try: # for f in paras_G['flights_selected']: # for n, alt in f[route]: # assert n in G_nav.nodes() # except AssertionError: # raise Exception("Some nodes in trajectories are missing in the network's nodes.") # try: # for a in airports: # assert a in G_nav.nodes() # except AssertionError: # raise Exception("Some airports are missing in the network's nodes.") # Make network G = prepare_hybrid_network(paras_G, rep="../networks", show=show) return G
def build_paras_G(zone='LF', data_version=None, layer=350., checks=True, show=True, name='LF', max_sectors=None, **kwargs_distance): #from paras_G import paras_G # TODO Change this, this is really bad. paras_G = Paras({}) paras_G['name'] = name # Get flights paras = paras_strategic(zone=zone, mode='sectors', data_version=data_version, **kwargs_distance) seth = get_set(paras, force=False) G_dummy, flights = seth.G, seth.flights #paras_G['G_dummy'] = G_dummy # TO REMOVE AFTER DEBUG # Get sector network paras_G['file_net_sec'] = None G, polygons = build_network_based_on_shapes(paras['password_db'], paras['airac'], zone, layer) polygons = fix_overlapping_polygons(polygons) G, polygons = recompute_centroids(G, polygons) paras_G['net_sec'] = G print "Number of nodes in sec network:", len(G.nodes()) paras_G['type_of_net'] = 'R' # Get polygons paras_G['file_polygons'] = None paras_G['polygons'] = polygons print "Number of polygons:", len(paras_G['polygons']) # Select the flights used to build the capacities and weights print 'Converting trajectories' trajconverter = TrajConverter() trajconverter.set_G(G_dummy) new_trajs = convert_distance_trajectories_to_abm_format(flights.values()[:], fmt='(n, z, t)') trajconverter = TrajConverter() trajconverter.set_G(G_dummy) converted_trajs = trajconverter.convert(new_trajs, fmt_in='(n, z, t)', fmt_out='(x, y, z, t)', input_minutes=True) final_trajs = detect_sectors(polygons, converted_trajs) if max_sectors!=None: G, polygons, final_trajs = reduce_sectors(max_sectors, G, polygons, final_trajs) paras_G['file_flights_selected'] = None paras_G['flights_selected'] = final_trajs paras_G['format_flights'] = '(n, z, t)' # Generate capacities based on traffic paras_G['file_capacities'] = None paras_G['generate_capacities_from_traffic'] = True paras_G['min_capacity'] = 1 # Take airports from traffic paras_G['file_airports_sec'] = None paras_G['generate_airports_from_traffic'] = True # Generate weights (times of travel) based on traffic paras_G['file_weights'] = None paras_G['generate_weights_from_traffic'] = True paras_G['generate_only_average_weight_from_traffic'] = True # Take connections from data paras_G['generate_connections_from_traffic'] = True paras_G['min_dis'] = 2 # Other parameters paras_G['Nfp'] = 10 # if checks: # try: # for f in paras_G['flights_selected']: # for n, alt in f[route]: # assert n in G.nodes() # except AssertionError: # raise Exception("Some nodes in trajectories are missing in the network's nodes.") # try: # for a in airports: # assert a in G.nodes() # except AssertionError: # raise Exception("Some airports are missing in the network's nodes.") paras_G = extract_data_from_files(paras_G) paras_G.analyse_dependance() return paras_G