Exemplo n.º 1
0
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
Exemplo n.º 3
0
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