Mercurial Hosting > traffic-intelligence
annotate python/storage.py @ 326:f7872d15a6cc
added user type ids
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 23 May 2013 17:57:11 +0200 |
parents | c71540470057 |
children | 42f2b46ec210 |
rev | line source |
---|---|
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
208
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
2 # -*- coding: utf-8 -*- |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
3 '''Various utilities to save and load data''' |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
4 |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
5 import utils |
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
6 import moving |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
7 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
8 __metaclass__ = type |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
9 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
10 |
50 | 11 ngsimUserTypes = {'twowheels':1, |
204
966c2cd2bd9f
added code to load object trajectories (average of features)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
203
diff
changeset
|
12 'car':2, |
966c2cd2bd9f
added code to load object trajectories (average of features)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
203
diff
changeset
|
13 'truck':3} |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
14 |
326
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
15 sqliteUserTypeNames = ['unknown', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
16 'car', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
17 'pedestrian', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
18 'motorcycle', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
19 'bicycle', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
20 'bus', |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
21 'truck'] |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
22 |
f7872d15a6cc
added user type ids
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
263
diff
changeset
|
23 |
259
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
24 ######################### |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
25 # txt files |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
26 ######################### |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
27 |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
28 |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
29 |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
30 ######################### |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
31 # Sqlite |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
32 ######################### |
8ab76b95ee72
added code to save collision points and crossing zones in txt files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
246
diff
changeset
|
33 |
208
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
34 def writeTrajectoriesToSqlite(objects, outFile, trajectoryType, objectNumbers = -1): |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
35 """ |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
36 This function writers trajectories to a specified sqlite file |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
37 @param[in] objects -> a list of trajectories |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
38 @param[in] trajectoryType - |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
39 @param[out] outFile -> the .sqlite file containting the written objects |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
40 @param[in] objectNumber : number of objects loaded |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
41 """ |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
42 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
43 import sqlite3 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
44 connection = sqlite3.connect(outFile) |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
45 cursor = connection.cursor() |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
46 |
212
ce44605f888a
minor modifications
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
211
diff
changeset
|
47 schema = "CREATE TABLE \"positions\"(trajectory_id INTEGER,frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))" |
208
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
48 cursor.execute(schema) |
212
ce44605f888a
minor modifications
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
211
diff
changeset
|
49 |
208
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
50 trajectory_id = 0 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
51 frame_number = 0 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
52 if trajectoryType == 'feature': |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
53 if type(objectNumbers) == int and objectNumbers == -1: |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
54 for trajectory in objects: |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
55 trajectory_id += 1 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
56 frame_number = 0 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
57 for position in trajectory.getPositions(): |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
58 frame_number += 1 |
212
ce44605f888a
minor modifications
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
211
diff
changeset
|
59 query = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" |
ce44605f888a
minor modifications
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
211
diff
changeset
|
60 cursor.execute(query,(trajectory_id,frame_number,position.x,position.y)) |
208
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
61 |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
62 connection.commit() |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
63 connection.close() |
d9855499fc88
Added functions to write trajectories through sqlite
Francois Belisle <belisle.francois@gmail.com>
parents:
204
diff
changeset
|
64 |
209
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
65 def loadPrototypeMatchIndexesFromSqlite(filename): |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
66 """ |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
67 This function loads the prototypes table in the database of name <filename>. |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
68 It returns a list of tuples representing matching ids : [(prototype_id, matched_trajectory_id),...] |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
69 """ |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
70 matched_indexes = [] |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
71 |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
72 import sqlite3 |
211 | 73 connection = sqlite3.connect(filename) |
209
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
74 cursor = connection.cursor() |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
75 |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
76 try: |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
77 cursor.execute('SELECT * from prototypes order by prototype_id, trajectory_id_matched') |
215
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
78 except sqlite3.OperationalError as err: |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
79 print('DB Error: {0}'.format(err)) |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
80 return [] |
209
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
81 |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
82 for row in cursor: |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
83 matched_indexes.append((row[0],row[1])) |
211 | 84 |
85 connection.close() | |
209
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
86 return matched_indexes |
746d02cea65f
Added function to read Prototype indexes matches.
Francois Belisle <belisle.francois@gmail.com>
parents:
208
diff
changeset
|
87 |
263
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
88 def getTrajectoryIdQuery(objectNumbers, trajectoryType): |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
89 if trajectoryType == 'feature': |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
90 statementBeginning = ' where trajectory_id' |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
91 elif trajectoryType == 'object': |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
92 statementBeginning = ' and OF.object_id' |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
93 else: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
94 print('no trajectory type was chosen') |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
95 |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
96 if type(objectNumbers) == int: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
97 if objectNumbers == -1: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
98 query = '' |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
99 else: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
100 query = statementBeginning+' between 0 and {0}'.format(objectNumbers) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
101 elif type(objectNumbers) == list: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
102 query = statementBeginning+' in ('+', '.join([str(n) for n in objectNumbers])+')' |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
103 return query |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
104 |
239
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
105 def loadTrajectoriesFromTable(connection, tableName, trajectoryType, objectNumbers = -1): |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
106 '''Loads trajectories (in the general sense) from the given table |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
107 can be positions or velocities |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
108 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
109 returns a moving object''' |
246
583a2c4622f9
created new module for algorithms with function to extract speeds
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
239
diff
changeset
|
110 import sqlite3 |
583a2c4622f9
created new module for algorithms with function to extract speeds
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
239
diff
changeset
|
111 |
143
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
112 cursor = connection.cursor() |
204
966c2cd2bd9f
added code to load object trajectories (average of features)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
203
diff
changeset
|
113 |
215
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
114 try: |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
115 if trajectoryType == 'feature': |
263
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
116 trajectoryIdQuery = getTrajectoryIdQuery(objectNumbers, trajectoryType) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
117 cursor.execute('SELECT * from '+tableName+trajectoryIdQuery+' order by trajectory_id, frame_number') |
215
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
118 elif trajectoryType == 'object': |
263
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
119 objectIdQuery = getTrajectoryIdQuery(objectNumbers, trajectoryType) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
120 cursor.execute('SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from '+tableName+' P, objects_features OF where P.trajectory_id = OF.trajectory_id '+objectIdQuery+' group by object_id, frame_number') |
215
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
121 else: |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
122 print('no trajectory type was chosen') |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
123 except sqlite3.OperationalError as err: |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
124 print('DB Error: {0}'.format(err)) |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
125 return [] |
239
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
126 |
143
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
127 objId = -1 |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
128 obj = None |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
129 objects = [] |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
130 for row in cursor: |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
131 if row[0] != objId: |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
132 objId = row[0] |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
133 if obj: |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
134 objects.append(obj) |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
135 obj = moving.MovingObject(row[0], timeInterval = moving.TimeInterval(row[1], row[1]), positions = moving.Trajectory([[row[2]],[row[3]]])) |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
136 else: |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
137 obj.timeInterval.last = row[1] |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
138 obj.positions.addPositionXY(row[2],row[3]) |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
139 |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
140 if obj: |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
141 objects.append(obj) |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
142 |
239
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
143 return objects |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
144 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
145 def loadTrajectoriesFromSqlite(filename, trajectoryType, objectNumbers = -1): |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
146 '''Loads nObjects or the indices in objectNumbers from the database |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
147 TODO: load feature numbers and not average feature trajectories |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
148 TODO: other ways of averaging trajectories (load all points, sorted by frame_number and leave the agregation to be done in python) |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
149 ''' |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
150 import sqlite3 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
151 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
152 connection = sqlite3.connect(filename) # add test if it open |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
153 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
154 objects = loadTrajectoriesFromTable(connection, 'positions', trajectoryType, objectNumbers) |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
155 objectVelocities = loadTrajectoriesFromTable(connection, 'velocities', trajectoryType, objectNumbers) |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
156 |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
157 if len(objectVelocities) > 0: |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
158 for o,v in zip(objects, objectVelocities): |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
159 if o.num == v.num: |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
160 o.velocities = v.positions |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
161 else: |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
162 print('Could not match positions {0} with velocities {1}'.format(o.num, v.num)) |
93c26e45efd8
modified functions to read velocities from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
235
diff
changeset
|
163 |
263
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
164 if trajectoryType == 'object': |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
165 cursor = connection.cursor() |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
166 try: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
167 objectIdQuery = getTrajectoryIdQuery(objectNumbers, trajectoryType) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
168 cursor.execute('SELECT P.trajectory_id, OF.object_id from positions P, objects_features OF where P.trajectory_id = OF.trajectory_id '+objectIdQuery+' group by P.trajectory_id order by OF.object_id') |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
169 |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
170 # attribute feature numbers to objects |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
171 objId = -1 |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
172 featureNumbers = {} |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
173 for row in cursor: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
174 if row[1] != objId: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
175 objId = row[1] |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
176 featureNumbers[objId] = [row[0]] |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
177 else: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
178 featureNumbers[objId].append(row[0]) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
179 |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
180 for obj in objects: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
181 obj.featureNumbers = featureNumbers[obj.num] |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
182 except sqlite3.OperationalError as err: |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
183 print('DB Error: {0}'.format(err)) |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
184 return [] |
c71540470057
reorganized loading trajectories and objects, added loading feature numbers for objects (the set of features grouped as one moving object
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
259
diff
changeset
|
185 |
143
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
186 connection.close() |
436b87d4b992
wrote the code to load positions from sqlite database
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
78
diff
changeset
|
187 return objects |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
188 |
235
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
189 def removeObjectsFromSqlite(filename): |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
190 'Removes the objects and object_features tables in the filename' |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
191 import sqlite3 |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
192 connection = sqlite3.connect(filename) |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
193 utils.dropTables(connection, ['objects', 'objects_features']) |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
194 connection.close() |
584613399513
added script and functions to remove object tables
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
218
diff
changeset
|
195 |
173
319a04ba9033
function name change
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
143
diff
changeset
|
196 def loadTrajectoriesFromNgsimFile(filename, nObjects = -1, sequenceNum = -1): |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
197 '''Reads data from the trajectory data provided by NGSIM project |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
198 and returns the list of Feature objects''' |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
199 objects = [] |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
200 |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
201 input = utils.openCheck(filename) |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
202 if not input: |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
203 import sys |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
204 sys.exit() |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
205 |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
206 def createObject(numbers): |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
207 firstFrameNum = int(numbers[1]) |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
208 # do the geometry and usertype |
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
209 |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
210 firstFrameNum = int(numbers[1]) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
211 lastFrameNum = firstFrameNum+int(numbers[2])-1 |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
212 #time = moving.TimeInterval(firstFrameNum, firstFrameNum+int(numbers[2])-1) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
213 obj = moving.MovingObject(num = int(numbers[0]), |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
214 timeInterval = moving.TimeInterval(firstFrameNum, lastFrameNum), |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
215 positions = moving.Trajectory([[float(numbers[6])],[float(numbers[7])]]), |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
216 userType = int(numbers[10])) |
78
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
217 obj.userType = int(numbers[10]) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
218 obj.laneNums = [int(numbers[13])] |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
219 obj.precedingVehicles = [int(numbers[14])] # lead vehicle (before) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
220 obj.followingVehicles = [int(numbers[15])] # following vehicle (after) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
221 obj.spaceHeadways = [float(numbers[16])] # feet |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
222 obj.timeHeadways = [float(numbers[17])] # seconds |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
223 obj.curvilinearPositions = moving.Trajectory([[float(numbers[5])],[float(numbers[4])]]) # X is the longitudinal coordinate |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
224 obj.speeds = [float(numbers[11])] |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
225 obj.size = [float(numbers[8]), float(numbers[9])] # 8 lengh, 9 width # TODO: temporary, should use a geometry object |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
226 return obj |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
227 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
228 numbers = input.readline().strip().split() |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
229 if (len(numbers) > 0): |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
230 obj = createObject(numbers) |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
231 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
232 for line in input: |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
233 numbers = line.strip().split() |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
234 if obj.num != int(numbers[0]): |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
235 # check and adapt the length to deal with issues in NGSIM data |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
236 if (obj.length() != obj.positions.length()): |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
237 print 'length pb with object %s (%d,%d)' % (obj.num,obj.length(),obj.positions.length()) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
238 obj.last = obj.getFirstInstant()+obj.positions.length()-1 |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
239 #obj.velocities = utils.computeVelocities(f.positions) # compare norm to speeds ? |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
240 objects.append(obj) |
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
241 if (nObjects>0) and (len(objects)>=nObjects): |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
242 break |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
243 obj = createObject(numbers) |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
244 else: |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
245 obj.positions.addPositionXY(float(numbers[6]), float(numbers[7])) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
246 obj.curvilinearPositions.addPositionXY(float(numbers[5]), float(numbers[4])) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
247 obj.speeds.append(float(numbers[11])) |
78
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
248 obj.laneNums.append(int(numbers[13])) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
249 obj.precedingVehicles.append(int(numbers[14])) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
250 obj.followingVehicles.append(int(numbers[15])) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
251 obj.spaceHeadways.append(float(numbers[16])) |
99e807c29753
added loading other information from NGSIM
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
72
diff
changeset
|
252 obj.timeHeadways.append(float(numbers[17])) |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
253 |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
254 if (obj.size[0] != float(numbers[8])): |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
255 print 'changed length obj %d' % (f.num) |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
256 if (obj.size[1] != float(numbers[9])): |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
257 print 'changed width obj %d' % (f.num) |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
258 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
259 input.close() |
7
ffddccfab7f9
loading shell objects from NGSIM works
Nicolas Saunier <nico@confins.net>
parents:
0
diff
changeset
|
260 return objects |
0
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
261 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
262 def convertNgsimFile(inFile, outFile, append = False, nObjects = -1, sequenceNum = 0): |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
263 '''Reads data from the trajectory data provided by NGSIM project |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
264 and converts to our current format.''' |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
265 if append: |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
266 out = open(outFile,'a') |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
267 else: |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
268 out = open(outFile,'w') |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
269 nObjectsPerType = [0,0,0] |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
270 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
271 features = loadNgsimFile(inFile, sequenceNum) |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
272 for f in features: |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
273 nObjectsPerType[f.userType-1] += 1 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
274 f.write(out) |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
275 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
276 print nObjectsPerType |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
277 |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
278 out.close() |
aed8eb63cdde
initial commit with non-functional python code for NGSIM
Nicolas Saunier <nico@confins.net>
parents:
diff
changeset
|
279 |
215
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
280 if __name__ == "__main__": |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
281 import doctest |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
282 import unittest |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
283 suite = doctest.DocFileSuite('tests/storage.txt') |
5e2983b05d4e
created first doctest tests for storage
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
212
diff
changeset
|
284 unittest.TextTestRunner().run(suite) |
72
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
285 # #doctest.testmod() |
575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
50
diff
changeset
|
286 # #doctest.testfile("example.txt") |