Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
 def get_edge_by_laneID(self, lane_id):
     return self.net.getEdge(sumolib._laneID2edgeID(lane_id))