def createRoutes(options, trpMap, stopNames): print("creating routes...") stopsUntil = {} for stop in sumolib.output.parse_fast(options.stopinfos, 'stopinfo', ['id', 'ended', 'busStop']): stopsUntil[(stop.id, stop.busStop)] = float(stop.ended) ft = formatTime if options.hrtime else lambda x : x with codecs.open(options.outfile, 'w', encoding="UTF8") as foutflows: flows = [] actualDepart = {} # departure may be delayed when the edge is not yet empty sumolib.writeXMLHeader( foutflows, "$Id$", "routes") if not options.novtypes: writeTypes(foutflows, options.vtypeprefix) collections.defaultdict(int) for vehicle in sumolib.output.parse(options.routes, 'vehicle'): id = vehicle.id lineRef, name, completeness = trpMap[id] flowID = "%s_%s" % (vehicle.type, lineRef) try: if vehicle.route is not None: edges = vehicle.route[0].edges else: edges = vehicle.routeDistribution[0].route[1].edges except StandardError: if options.ignoreErrors: sys.stderr.write("Warning: Could not parse edges for vehicle '%s'\n" % id) continue else: sys.exit("Could not parse edges for vehicle '%s'\n" % id) flows.append((id, flowID, lineRef, vehicle.type, float(vehicle.depart))) actualDepart[id] = float(vehicle.depart) parking = ' parking="true"' if vehicle.type == "bus" and options.busparking else '' stops = vehicle.stop foutflows.write(' <route id="%s" edges="%s" >\n' % (flowID, edges)) if vehicle.stop is not None: for stop in stops: if (id, stop.busStop) in stopsUntil: stopname = ' <!-- %s -->' % stopNames[stop.busStop] if stop.busStop in stopNames else '' untilZeroBased = stopsUntil[(id, stop.busStop)] - actualDepart[id] foutflows.write( ' <stop busStop="%s" duration="%s" until="%s"%s/>%s\n' % ( stop.busStop, stop.duration, ft(untilZeroBased), parking, stopname)) else: sys.stderr.write("Warning: Missing stop '%s' for flow '%s'\n" % (stop.busStop, id)) else: sys.stderr.write("Warning: No stops for flow '%s'\n" % id) foutflows.write(' </route>\n') flow_duration = options.end - options.begin for vehID, flowID, lineRef, type, begin in flows: line, name, completeness = trpMap[vehID] foutflows.write(' <flow id="%s" type="%s" route="%s" begin="%s" end="%s" period="%s" line="%s" %s>\n' % ( flowID, type, flowID, ft(begin), ft(begin + flow_duration), options.period, lineRef, options.flowattrs)) foutflows.write(' <param key="name" value=%s/>\n <param key="completeness" value="%s"/>\n </flow>\n' % (quoteattr(name), completeness)) foutflows.write('</routes>\n') print("done.")
def createRoutes(options, trpMap, stopNames): print("creating routes...") stopsUntil = collections.defaultdict(list) for stop in sumolib.output.parse_fast(options.stopinfos, 'stopinfo', ['id', 'ended', 'busStop']): stopsUntil[(stop.id, stop.busStop)].append(float(stop.ended)) ft = formatTime if options.hrtime else lambda x: x with codecs.open(options.outfile, 'w', encoding="UTF8") as foutflows: flows = [] actualDepart = { } # departure may be delayed when the edge is not yet empty sumolib.writeXMLHeader( foutflows, "$Id: ptlines2flows.py v1_3_1+0313-ccb31df3eb [email protected] 2019-09-02 13:26:32 +0200 $", "routes") if not options.novtypes: writeTypes(foutflows, options.vtypeprefix, None) collections.defaultdict(int) for vehicle in sumolib.output.parse(options.routes, 'vehicle'): id = vehicle.id ptline = trpMap[id] flowID = "%s_%s" % (vehicle.type, ptline.ref) try: if vehicle.route is not None: edges = vehicle.route[0].edges else: edges = vehicle.routeDistribution[0].route[1].edges except BaseException: if options.ignoreErrors: sys.stderr.write( "Warning: Could not parse edges for vehicle '%s'\n" % id) continue else: sys.exit("Could not parse edges for vehicle '%s'\n" % id) flows.append( (id, flowID, ptline.ref, vehicle.type, float(vehicle.depart))) actualDepart[id] = float(vehicle.depart) parking = ' parking="true"' if vehicle.type == "bus" and options.busparking else '' stops = vehicle.stop color = ' color="%s"' % ptline.color if ptline.color is not None else "" foutflows.write(' <route id="%s"%s edges="%s" >\n' % (flowID, color, edges)) if vehicle.stop is not None: for stop in stops: if (id, stop.busStop) in stopsUntil: until = stopsUntil[(id, stop.busStop)] stopname = ' <!-- %s -->' % stopNames[ stop.busStop] if stop.busStop in stopNames else '' untilZeroBased = until[0] - actualDepart[id] if len(until) > 1: stopsUntil[(id, stop.busStop)] = until[1:] foutflows.write( ' <stop busStop="%s" duration="%s" until="%s"%s/>%s\n' % (stop.busStop, options.stopduration, ft(untilZeroBased), parking, stopname)) else: sys.stderr.write( "Warning: Missing stop '%s' for flow '%s'\n" % (stop.busStop, id)) else: sys.stderr.write("Warning: No stops for flow '%s'\n" % id) foutflows.write(' </route>\n') flow_duration = options.end - options.begin for vehID, flowID, lineRef, type, begin in flows: ptline = trpMap[vehID] foutflows.write( ' <flow id="%s" type="%s" route="%s" begin="%s" end="%s" period="%s" line="%s" %s>\n' % (flowID, type, flowID, ft(begin), ft(begin + flow_duration), int(float(ptline.period)), ptline.ref, options.flowattrs)) if ptline.name is not None: foutflows.write(' <param key="name" value=%s/>\n' % quoteattr(ptline.name)) if ptline.completeness is not None: foutflows.write( ' <param key="completeness" value=%s/>\n' % quoteattr(ptline.completeness)) foutflows.write(' </flow>\n') foutflows.write('</routes>\n') print("done.")
def createRoutes(options, trpMap, stopNames): print("creating routes...") stopsUntil = collections.defaultdict(list) for stop in sumolib.output.parse_fast(options.stopinfos, 'stopinfo', ['id', 'ended', 'busStop']): stopsUntil[(stop.id, stop.busStop)].append(float(stop.ended)) ft = formatTime if options.hrtime else lambda x: x with codecs.open(options.outfile, 'w', encoding="UTF8") as foutflows: flows = [] actualDepart = {} # departure may be delayed when the edge is not yet empty sumolib.writeXMLHeader( foutflows, "$Id$", "routes") if not options.novtypes: writeTypes(foutflows, options.vtypeprefix) collections.defaultdict(int) for vehicle in sumolib.output.parse(options.routes, 'vehicle'): id = vehicle.id lineRef, name, completeness, period = trpMap[id] flowID = "%s_%s" % (vehicle.type, lineRef) try: if vehicle.route is not None: edges = vehicle.route[0].edges else: edges = vehicle.routeDistribution[0].route[1].edges except BaseException: if options.ignoreErrors: sys.stderr.write("Warning: Could not parse edges for vehicle '%s'\n" % id) continue else: sys.exit("Could not parse edges for vehicle '%s'\n" % id) flows.append((id, flowID, lineRef, vehicle.type, float(vehicle.depart))) actualDepart[id] = float(vehicle.depart) parking = ' parking="true"' if vehicle.type == "bus" and options.busparking else '' stops = vehicle.stop foutflows.write(' <route id="%s" edges="%s" >\n' % (flowID, edges)) if vehicle.stop is not None: for stop in stops: if (id, stop.busStop) in stopsUntil: until = stopsUntil[(id, stop.busStop)] stopname = ' <!-- %s -->' % stopNames[stop.busStop] if stop.busStop in stopNames else '' untilZeroBased = until[0] - actualDepart[id] if len(until) > 1: stopsUntil[(id, stop.busStop)] = until[1:] foutflows.write( ' <stop busStop="%s" duration="%s" until="%s"%s/>%s\n' % ( stop.busStop, stop.duration, ft(untilZeroBased), parking, stopname)) else: sys.stderr.write("Warning: Missing stop '%s' for flow '%s'\n" % (stop.busStop, id)) else: sys.stderr.write("Warning: No stops for flow '%s'\n" % id) foutflows.write(' </route>\n') flow_duration = options.end - options.begin for vehID, flowID, lineRef, type, begin in flows: line, name, completeness, period = trpMap[vehID] foutflows.write(' <flow id="%s" type="%s" route="%s" begin="%s" end="%s" period="%s" line="%s" %s>\n' % ( flowID, type, flowID, ft(begin), ft(begin + flow_duration), int(float(period)), lineRef, options.flowattrs)) if name is not None: foutflows.write(' <param key="name" value=%s/>\n' % quoteattr(name)) if completeness is not None: foutflows.write(' <param key="completeness" value=%s/>\n' % quoteattr(completeness)) foutflows.write(' </flow>\n') foutflows.write('</routes>\n') print("done.")