예제 #1
0
파일: cutRoutes.py 프로젝트: wisliang/sumo
 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")
예제 #2
0
파일: cutRoutes.py 프로젝트: wisliang/sumo
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)