def main(options): parser = make_parser() isBZ2 = False dataDir = options.datadir districts = os.path.join(dataDir, options.districtfile) matrix = os.path.join(dataDir, options.mtxfile) netfile = os.path.join(dataDir, options.netfile) print 'generate Trip file for:', netfile if "bz2" in netfile: netfile = bz2.BZ2File(netfile) isBZ2 = True matrixSum = 0. tripList = [] net = Net() odConnTable = {} vehIDtoODMap = {} sumolib.net.readNet(options.netfile, net=net) if isBZ2: parser.parse(StringIO.StringIO(netfile.read())) netfile.close() else: parser.parse(netfile) parser.setContentHandler(DistrictsReader(net)) parser.parse(districts) matrixPshort, startVertices, endVertices, currentMatrixSum, begin, period = getMatrix( net, options.debug, matrix, matrixSum)[:6] for edge in net.getEdges(): edge.helpacttime = 0. if options.debug: print len(net._edges), "edges read" print len(net._startVertices), "start vertices read" print len(net._endVertices), "target vertices read" print 'currentMatrixSum:', currentMatrixSum if options.getconns: if options.debug: print 'generate odConnTable' for start, startVertex in enumerate(startVertices): if startVertex._id not in odConnTable: odConnTable[startVertex._id] = {} for source in startVertex.sourceConnNodes: targets = net.getTargets() D, P = dijkstraPlain(source, targets) for end, endVertex in enumerate(endVertices): if startVertex._id != endVertex._id and matrixPshort[start][end] > 0.: if endVertex._id not in odConnTable[startVertex._id]: odConnTable[startVertex._id][endVertex._id] = [] net.checkRoute( startVertex, endVertex, start, end, P, odConnTable, source, options) else: if options.debug: print 'import and use the given odConnTable' sys.path.append(options.datadir) from odConnTables import odConnTable # output trips if options.verbose: print 'output the trip file' vehID = 0 subVehID = 0 random.seed(42) matrixSum = 0. fouttrips = file(options.tripfile, 'w') fouttrips.write('<?xml version="1.0"?>\n') print >> fouttrips, """<!-- generated on %s by $Id: generateTripsXml.py 18096 2015-03-17 09:50:59Z behrisch $ --> """ % datetime.datetime.now() fouttrips.write("<tripdefs>\n") if options.demandscale != 1.: print 'demand scale %s is used.' % options.demandscale for start in range(len(startVertices)): for end in range(len(endVertices)): matrixPshort[start][end] *= options.demandscale for start, startVertex in enumerate(startVertices): for end, endVertex in enumerate(endVertices): if startVertex._id != endVertex._id and matrixPshort[start][end] > 0.: counts = 0. if options.odestimation: if matrixPshort[start][end] < 1.: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) else: matrixSum += matrixPshort[start][end] while (counts < float(math.ceil(matrixPshort[start][end])) and (matrixPshort[start][end] - counts) > 0.5 and float(subVehID) < matrixSum)or float(subVehID) < matrixSum: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) subVehID += 1 else: matrixSum += matrixPshort[start][end] while (counts < float(math.ceil(matrixPshort[start][end])) and (matrixPshort[start][end] - counts) > 0.5 and float(vehID) < matrixSum) or float(vehID) < matrixSum: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) if options.debug: print 'total demand:', matrixSum print vehID, 'trips generated' tripList.sort(key=operator.attrgetter('depart')) departpos = "free" if __name__ == "__main__": departpos = options.departpos for trip in tripList: fouttrips.write(' <trip id="%s" depart="%s" from="%s" to="%s" fromtaz="%s" totaz="%s" departlane="free" departpos="%s" departspeed="max"/>\n' % (trip.label, trip.depart, trip.sourceEdge, trip.sinkEdge, trip.sourceDistrict, trip.sinkDistrict, departpos)) fouttrips.write("</tripdefs>") fouttrips.close() return odConnTable, vehIDtoODMap
def main(options): parser = make_parser() isBZ2 = False dataDir = options.datadir districts = os.path.join(dataDir, options.districtfile) matrix = os.path.join(dataDir, options.mtxfile) netfile = os.path.join(dataDir, options.netfile) print('generate Trip file for:', netfile) if "bz2" in netfile: netfile = bz2.BZ2File(netfile) isBZ2 = True matrixSum = 0. tripList = [] net = Net() odConnTable = {} vehIDtoODMap = {} sumolib.net.readNet(options.netfile, net=net) if isBZ2: parser.parse(StringIO.StringIO(netfile.read())) netfile.close() else: parser.parse(netfile) parser.setContentHandler(DistrictsReader(net)) parser.parse(districts) matrixPshort, startVertices, endVertices, currentMatrixSum, begin, period = getMatrix( net, options.debug, matrix, matrixSum)[:6] for edge in net.getEdges(): edge.helpacttime = 0. if options.debug: print(len(net._edges), "edges read") print(len(net._startVertices), "start vertices read") print(len(net._endVertices), "target vertices read") print('currentMatrixSum:', currentMatrixSum) if options.getconns: if options.debug: print('generate odConnTable') for start, startVertex in enumerate(startVertices): if startVertex._id not in odConnTable: odConnTable[startVertex._id] = {} for source in startVertex.sourceConnNodes: targets = net.getTargets() D, P = dijkstraPlain(source, targets) for end, endVertex in enumerate(endVertices): if startVertex._id != endVertex._id and matrixPshort[start][end] > 0.: if endVertex._id not in odConnTable[startVertex._id]: odConnTable[startVertex._id][endVertex._id] = [] net.checkRoute( startVertex, endVertex, start, end, P, odConnTable, source, options) else: if options.debug: print('import and use the given odConnTable') sys.path.append(options.datadir) from odConnTables import odConnTable # output trips if options.verbose: print('output the trip file') vehID = 0 subVehID = 0 random.seed(42) matrixSum = 0. fouttrips = open(options.tripfile, 'w') fouttrips.write('<?xml version="1.0"?>\n') print("""<!-- generated on %s by $Id: generateTripsXml.py 22608 2017-01-17 06:28:54Z behrisch $ --> """ % datetime.datetime.now(), file=fouttrips) fouttrips.write("<tripdefs>\n") if options.demandscale != 1.: print('demand scale %s is used.' % options.demandscale) for start in range(len(startVertices)): for end in range(len(endVertices)): matrixPshort[start][end] *= options.demandscale for start, startVertex in enumerate(startVertices): for end, endVertex in enumerate(endVertices): if startVertex._id != endVertex._id and matrixPshort[start][end] > 0.: counts = 0. if options.odestimation: if matrixPshort[start][end] < 1.: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) else: matrixSum += matrixPshort[start][end] while (counts < float(math.ceil(matrixPshort[start][end])) and (matrixPshort[start][end] - counts) > 0.5 and float(subVehID) < matrixSum)or float(subVehID) < matrixSum: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) subVehID += 1 else: matrixSum += matrixPshort[start][end] while (counts < float(math.ceil(matrixPshort[start][end])) and (matrixPshort[start][end] - counts) > 0.5 and float(vehID) < matrixSum) or float(vehID) < matrixSum: counts, vehID, tripList, vehIDtoODMap = addVeh( counts, vehID, begin, period, odConnTable, startVertex, endVertex, tripList, vehIDtoODMap) if options.debug: print('total demand:', matrixSum) print(vehID, 'trips generated') tripList.sort(key=operator.attrgetter('depart')) departpos = "free" if __name__ == "__main__": departpos = options.departpos for trip in tripList: fouttrips.write(' <trip id="%s" depart="%s" from="%s" to="%s" fromtaz="%s" totaz="%s" departlane="free" departpos="%s" departspeed="max"/>\n' % (trip.label, trip.depart, trip.sourceEdge, trip.sinkEdge, trip.sourceDistrict, trip.sinkDistrict, departpos)) fouttrips.write("</tripdefs>") fouttrips.close() return odConnTable, vehIDtoODMap