def write_to_file(vehicles, f): writeHeader(f, os.path.basename(__file__), 'routes') numRefs = defaultdict(int) for _, v in vehicles: if options.trips and v.name == "vehicle": numRefs["trip"] += 1 else: numRefs[v.name] += 1 if v.name == "vType": f.write(v.toXML(u' ')) else: writer(f, v) f.write(u'</routes>\n') if numRefs: print("Wrote", ", ".join(["%s %ss" % (k[1], k[0]) for k in sorted(numRefs.items())])) else: print("Wrote nothing")
def main(options): net = readNet(options.network) edges = set([e.getID() for e in net.getEdges()]) if options.orig_net is not None: orig_net = readNet(options.orig_net) else: orig_net = None print("Valid area contains %s edges" % len(edges)) if options.trips: writer = write_trip else: writer = write_route busStopEdges = {} if options.stops_output: busStops = io.open(options.stops_output, 'w', encoding="utf8") writeHeader(busStops, os.path.basename(__file__), 'additional') if options.additional_input: num_busstops = 0 kept_busstops = 0 num_taz = 0 kept_taz = 0 for busStop in parse(options.additional_input, ('busStop', 'trainStop')): num_busstops += 1 edge = busStop.lane[:-2] busStopEdges[busStop.id] = edge if options.stops_output and edge in edges: kept_busstops += 1 if busStop.access: busStop.access = [acc for acc in busStop.access if acc.lane[:-2] in edges] busStops.write(busStop.toXML(u' ')) for taz in parse(options.additional_input, 'taz'): num_taz += 1 taz_edges = [e for e in taz.edges.split() if e in edges] if taz_edges: taz.edges = " ".join(taz_edges) if options.stops_output: kept_taz += 1 busStops.write(taz.toXML(u' ')) if num_busstops > 0 and num_taz > 0: print("Kept %s of %s busStops and %s of %s tazs" % ( kept_busstops, num_busstops, kept_taz, num_taz)) elif num_busstops > 0: print("Kept %s of %s busStops" % (kept_busstops, num_busstops)) elif num_taz > 0: print("Kept %s of %s tazs" % (kept_taz, num_taz)) if options.stops_output: busStops.write(u'</additional>\n') busStops.close() def write_to_file(vehicles, f): writeHeader(f, os.path.basename(__file__), 'routes') numRefs = defaultdict(int) for _, v in vehicles: if options.trips and v.name == "vehicle": numRefs["trip"] += 1 else: numRefs[v.name] += 1 if v.name == "vType": f.write(v.toXML(u' ')) else: writer(f, v) f.write(u'</routes>\n') if numRefs: print("Wrote", ", ".join(["%s %ss" % (k[1], k[0]) for k in sorted(numRefs.items())])) else: print("Wrote nothing") startEndEdgeMap = {} if options.pt_input: allRouteFiles = options.routeFiles options.routeFiles = [options.pt_input] startEndRouteEdge = {} with io.open(options.pt_output if options.pt_output else options.pt_input + ".cut", 'w', encoding="utf8") as f: writeHeader(f, os.path.basename(__file__), 'routes') for _, v in cut_routes(edges, orig_net, options, busStopEdges): f.write(v.toXML(u' ')) if v.name == "route": routeEdges = v.edges.split() startEndRouteEdge[v.id] = (routeEdges[0], routeEdges[-1]) elif isinstance(v.route, list): routeEdges = v.route[0].edges.split() startEndEdgeMap[v.line] = (routeEdges[0], routeEdges[-1]) elif v.route is not None: startEndEdgeMap[v.line] = startEndRouteEdge[v.route] f.write(u'</routes>\n') options.routeFiles = allRouteFiles if options.big: # write output unsorted tmpname = options.output + ".unsorted" with io.open(tmpname, 'w', encoding="utf8") as f: write_to_file(cut_routes(edges, orig_net, options, busStopEdges, startEndEdgeMap), f) # sort out of memory sort_routes.main([tmpname, '--big', '--outfile', options.output]) else: routes = list(cut_routes(edges, orig_net, options, busStopEdges, startEndEdgeMap)) routes.sort(key=lambda v: v[0]) with io.open(options.output, 'w', encoding="utf8") as f: write_to_file(routes, f)