def fcd2fzp(inpFCD, outSTRM, further): """ Reformats the contents of the given fcd-output file into a .fzp file, readable by PHEM. The fcd-output "fcd" must be a valid file name of an fcd-output. The "sIDm" parameter must be a map from SUMO-edge ids to their numerical representation as generated by toSTR(inpNET, outSTRM). Returns two maps, the first from vehicle ids to a numerical representation, the second from vehicle type ids to a numerical representation. """ sIDm = further["phemStreetMap"] if outSTRM != None: print( "t,WeltX,WeltY,Veh. No,v,Gradient,veh.Typ-Id,Str-Id", file=outSTRM) vIDm = sumolib._Running(further["orig-ids"], True) vtIDm = sumolib._Running() vtIDm.g("PKW") vtIDm.g("PKW_equipped") vtIDm.g("LKW") vtIDm.g("BUS") for q in inpFCD: if q.vehicle: for v in q.vehicle: vid = vIDm.g(v.id) aType = _convType(v.type) vtid = vtIDm.g(aType) sid = sIDm.g(sumolib._laneID2edgeID(v.lane)) percSlope = math.sin(float(v.slope)) * 100. if outSTRM != None: print("%s,%s,%s,%s,%s,%s,%s,%s" % ( sumolib._intTime(q.time), float(v.x), float(v.y), vid, float(v.speed) * 3.6, percSlope, vtid, sid), file=outSTRM) return vIDm, vtIDm
def fcd2fzp(inpFCD, outSTRM, further): """ Reformats the contents of the given fcd-output file into a .fzp file, readable by PHEM. The fcd-output "fcd" must be a valid file name of an fcd-output. The "sIDm" parameter must be a map from SUMO-edge ids to their numerical representation as generated by toSTR(inpNET, outSTRM). Returns two maps, the first from vehicle ids to a numerical representation, the second from vehicle type ids to a numerical representation. """ sIDm = further["phemStreetMap"] if outSTRM!=None: print("t,WeltX,WeltY,Veh. No,v,Gradient,veh.Typ-Id,Str-Id", file=outSTRM) vIDm = sumolib._Running() vtIDm = sumolib._Running() vtIDm.g("PKW") vtIDm.g("PKW_equipped") vtIDm.g("LKW") vtIDm.g("BUS") for q in inpFCD: if q.vehicle: for v in q.vehicle: vid = vIDm.g(v.id) aType = _convType(v.type) vtid = vtIDm.g(aType) sid = sIDm.g(sumolib._laneID2edgeID(v.lane)) percSlope = math.sin(float(v.slope))*100. if outSTRM!=None: print("%s,%s,%s,%s,%s,%s,%s,%s" % ( sumolib._intTime(q.time), float(v.x), float(v.y), vid, float(v.speed)*3.6, percSlope, vtid, sid), file=outSTRM) return vIDm, vtIDm
def getStopEdges(addFile): """find edge for each stopping place""" stopEdges = {} for busstop in sumolib.xml.parse(addFile, 'busStop'): stopEdges[busstop.id] = sumolib._laneID2edgeID(busstop.lane) print("read %s busStops on %s edges" % (len(stopEdges), len(set(stopEdges.values())))) return stopEdges
def getStopRoutes(options, stopEdges): """parse routes and determine the list of edges between stops return: setOfUniqueRoutes, busstopDict """ uniqueRoutes = set() stopRoutes = defaultdict(list) # busStop -> [(edges, stopObj), ....] vehicleStopRoutes = defaultdict(list) # vehID -> [(edges, stopObj), ....] numRoutes = 0 numStops = 0 begin = parseTime(options.begin) for vehicle in sumolib.xml.parse(options.routeFile, 'vehicle', heterogeneous=True): depart = parseTime(vehicle.depart) if depart < begin: continue numRoutes += 1 edges = tuple(vehicle.route[0].edges.split()) uniqueRoutes.add(edges) lastIndex = -1 routeIndex = 0 tripId = vehicle.id line = vehicle.getAttributeSecure("line", "") for stop in vehicle.stop: numStops += 1 if stop.busStop is None: stop.setAttribute("busStop", stop.lane) stopEdges[stop.lane] = sumolib._laneID2edgeID(stop.lane) stopEdge = stopEdges[stop.busStop] while edges[routeIndex] != stopEdge: routeIndex += 1 assert (routeIndex < len(edges)) edgesBefore = edges[lastIndex + 1:routeIndex + 1] stop.setAttribute("prevTripId", tripId) stop.setAttribute("prevLine", line) stop.setAttribute("vehID", vehicle.id) tripId = stop.getAttributeSecure("tripId", tripId) line = stop.getAttributeSecure("line", line) stopRoutes[stop.busStop].append((edgesBefore, stop)) vehicleStopRoutes[vehicle.id].append((edgesBefore, stop)) lastIndex = routeIndex print("read %s routes (%s unique) and %s stops at %s busStops" % (numRoutes, len(uniqueRoutes), numStops, len(stopRoutes))) return uniqueRoutes, stopRoutes, vehicleStopRoutes
def get_edge_by_laneID(self, lane_id): return self.net.getEdge(sumolib._laneID2edgeID(lane_id))