Mercurial Hosting > traffic-intelligence
annotate trafficintelligence/sumo.py @ 1122:58efbe18f102
slight modification
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 10 Jul 2019 16:08:41 -0400 |
parents | cc5cb04b04b0 |
children | 3972d85e3b6c |
rev | line source |
---|---|
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
2 '''Libraries for the SUMO traffic simulation software |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
3 http://sumo.dlr.de |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
4 ''' |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
5 |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
6 #import csv |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
7 |
966
40af0f20ee2d
reworking the functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
965
diff
changeset
|
8 def loadTazEdges(inFilename): |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
9 '''Converts list of OSM edges per OSM edge and groups per TAZ |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
10 format is csv with first two columns the OSM id and TAZ id, then the list of SUMO edge id |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
11 |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
12 Returns the list of SUMO edge per TAZ''' |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
13 data = [] |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
14 tazs = {} |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
15 with open(inFilename,'r') as f: |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
16 f.readline() # skip the headers |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
17 for r in f: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
18 tmp = r.strip().split(',') |
998
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
19 tazID = tmp[1] |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
20 for edge in tmp[2:]: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
21 if len(edge) > 0: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
22 if tazID in tazs: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
23 if edge not in tazs[tazID]: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
24 tazs[tazID].append(edge) |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
25 else: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
26 tazs[tazID] = [edge] |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
27 return tazs |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
28 |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
29 def edge2Taz(tazs): |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
30 '''Returns the associative array of the TAZ of each SUMO edge''' |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
31 edge2Tazs = {} |
998
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
32 for taz, edges in tazs.items(): |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
33 for edge in edges: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
34 if edge in edge2Tazs: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
35 print('error for edge: {} (taz {}/{})'.format(edge, edge2Tazs[edge], taz)) |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
36 edge2Tazs[edge] = taz |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
37 return edge2Tazs |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
38 |
966
40af0f20ee2d
reworking the functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
965
diff
changeset
|
39 def saveTazEdges(outFilename, tazs): |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
40 with open(outFilename,'w') as out: |
998
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
41 out.write('<tazs>\n') |
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
42 for tazID in tazs: |
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
43 out.write('<taz id="{}" edges="'.format(tazID)+' '.join(tazs[tazID])+'"/>\n') |
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
44 out.write('</tazs>\n') |
933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
968
diff
changeset
|
45 |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
46 # TODO add utils from process-cyber.py? |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
47 |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
48 # if __name__ == "__main__": |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
49 # import doctest |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
50 # import unittest |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
51 # suite = doctest.DocFileSuite('tests/sumo.txt') |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
52 # #suite = doctest.DocTestSuite() |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
53 # unittest.TextTestRunner().run(suite) |