Mercurial Hosting > traffic-intelligence
annotate trafficintelligence/sumo.py @ 1234:dd969637381e
work on tracker interface
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 14 Sep 2023 16:18:36 -0400 |
parents | 3972d85e3b6c |
children |
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 ''' |
1131
3972d85e3b6c
work on loading data for sumo
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1028
diff
changeset
|
5 import pandas as pd |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
6 |
1131
3972d85e3b6c
work on loading data for sumo
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1028
diff
changeset
|
7 |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
8 |
966
40af0f20ee2d
reworking the functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
965
diff
changeset
|
9 def loadTazEdges(inFilename): |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
10 '''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
|
11 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
|
12 |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
13 Returns the list of SUMO edge per TAZ''' |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
14 data = [] |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
15 tazs = {} |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
16 with open(inFilename,'r') as f: |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
17 f.readline() # skip the headers |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
18 for r in f: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
19 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
|
20 tazID = tmp[1] |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
21 for edge in tmp[2:]: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
22 if len(edge) > 0: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
23 if tazID in tazs: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
24 if edge not in tazs[tazID]: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
25 tazs[tazID].append(edge) |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
26 else: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
27 tazs[tazID] = [edge] |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
28 return tazs |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
29 |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
30 def edge2Taz(tazs): |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
31 '''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
|
32 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
|
33 for taz, edges in tazs.items(): |
968
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
34 for edge in edges: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
35 if edge in edge2Tazs: |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
36 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
|
37 edge2Tazs[edge] = taz |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
38 return edge2Tazs |
32a34a143c27
work on sumo and metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
966
diff
changeset
|
39 |
966
40af0f20ee2d
reworking the functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
965
diff
changeset
|
40 def saveTazEdges(outFilename, tazs): |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 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
|
45 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
|
46 |
964
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
47 # TODO add utils from process-cyber.py? |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
48 |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
49 # if __name__ == "__main__": |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
50 # import doctest |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
51 # import unittest |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
52 # suite = doctest.DocFileSuite('tests/sumo.txt') |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
53 # #suite = doctest.DocTestSuite() |
e3ec6caab984
utilities for SUMO traffic simulation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
54 # unittest.TextTestRunner().run(suite) |