Mercurial Hosting > traffic-intelligence
diff python/storage.py @ 780:1b22d81ef5ff dev
cleaned and checked storage with functions for curvilinear trajectories
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 08 Feb 2016 12:24:26 -0500 |
parents | bd684e57c431 |
children | f1040d739bbf |
line wrap: on
line diff
--- a/python/storage.py Mon Feb 08 12:07:47 2016 -0500 +++ b/python/storage.py Mon Feb 08 12:24:26 2016 -0500 @@ -255,10 +255,10 @@ connection.close() return objects -def loadCurvilinearTrajectoriesFromSqlite(filename, objects, objectNumbers = None): - '''load alignement curvilinear positions (s_coordinate, y_coordinate, lane) - from an object database to an existing MovingObject list''' - connection = sqlite3.connect(inputFilename) +def addCurvilinearTrajectoriesFromSqlite(filename, objects): + '''Adds curvilinear positions (s_coordinate, y_coordinate, lane) + from a database to an existing MovingObject dict (indexed by each objects's num)''' + connection = sqlite3.connect(filename) cursor = connection.cursor() try: @@ -271,17 +271,16 @@ for row in cursor: if objNum != row[0]: objNum = row[0] - objects[objNum].curvilinearPositions = moving.CurvilinearPositions() - else: - objects[objNum].curvilinearPositions.addPositionsSYL(row[2],row[3],row[4]) - - return objects + objects[objNum].curvilinearPositions = moving.CurvilinearTrajectory() + objects[objNum].curvilinearPositions.addPositionSYL(row[2],row[3],row[4]) def saveTrajectoriesToSqlite(outputFilename, objects, trajectoryType, withFeatures = False): '''Writes features, ie the trajectories positions (and velocities if exist) with their instants to a specified sqlite file + Either feature positions (and velocities if they exist) + or curvilinear positions will be saved at a time - TODO: Not implemented for other trajectoryType than features + TODO: Not implemented for trajectoryType MovingObject with features For objects, with features will control whether the features corresponding to the object are also saved''' @@ -289,15 +288,12 @@ try: cursor = connection.cursor() - if trajectoryType in ['feature', 'curvilinear']: + if trajectoryType == 'feature': cursor.execute("CREATE TABLE IF NOT EXISTS positions (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))") cursor.execute("CREATE TABLE IF NOT EXISTS velocities (trajectory_id INTEGER, frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))") - if trajectoryType == 'curvilinear': - cursor.execute("CREATE TABLE IF NOT EXISTS curvilinear_positions (trajectory_id INTEGER, frame_number INTEGER, s_coordinate REAL, y_coordinate REAL, lane TEXT, PRIMARY KEY(trajectory_id, frame_number))") positionQuery = "insert into positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" velocityQuery = "insert into velocities (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" - curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, x_coordinate, y_coordinate) values (?,?,?,?)" for obj in objects: num = obj.getNum() frame_number = obj.getFirstInstant() @@ -312,16 +308,19 @@ v = velocities[i] cursor.execute(velocityQuery, (num, frame_number, v.x, v.y)) frame_number += 1 - # curvilinear trajectories - if trajectoryType == 'curvilinear' and hasattr(obj, 'curvilinearPositions') is not None: - frame_number = obj.getFirstInstant() - for position in obj.getCurvilinearPositions(): - cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2])) - frame_number += 1 - connection.commit() + elif trajectoryType == 'curvilinear': + cursor.execute("CREATE TABLE IF NOT EXISTS curvilinear_positions (trajectory_id INTEGER, frame_number INTEGER, s_coordinate REAL, y_coordinate REAL, lane TEXT, PRIMARY KEY(trajectory_id, frame_number))") + curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, s_coordinate, y_coordinate, lane) values (?,?,?,?,?)" + for obj in objects: + num = obj.getNum() + frame_number = obj.getFirstInstant() + for position in obj.getCurvilinearPositions(): + cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2])) + frame_number += 1 #elif trajectoryType == 'object': else: print('Unknown trajectory type {}'.format(trajectoryType)) + connection.commit() except sqlite3.OperationalError as error: printDBError(error) connection.close()