annotate trafficintelligence/sumo.py @ 1212:af329f3330ba

work in progress on 3D safety analysis
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 02 May 2023 17:11:24 -0400
parents 3972d85e3b6c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)