Mercurial Hosting > traffic-intelligence
diff trafficintelligence/storage.py @ 1044:75a6ad604cc5
work on motion patterns
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 05 Jul 2018 17:06:40 -0400 |
parents | fc7c0f38e8a6 |
children | c9c03c97ed9f |
line wrap: on
line diff
--- a/trafficintelligence/storage.py Wed Jul 04 17:39:39 2018 -0400 +++ b/trafficintelligence/storage.py Thu Jul 05 17:06:40 2018 -0400 @@ -247,24 +247,18 @@ attributes[row[0]] = row[1] return attributes -def loadTrajectoriesFromSqlite(filename, trajectoryType, objectNumbers = None, withFeatures = False, timeStep = None, maxNObjectFeatures = 1): +def loadTrajectoriesFromSqlite(filename, trajectoryType, objectNumbers = None, withFeatures = False, timeStep = None, nLongestFeaturesPerObject = None): '''Loads the trajectories (in the general sense, - either features, objects (feature groups), longest features per object, or bounding box series) + either features, objects (feature groups), longest features per object, or bounding box series) + types are only feature or object + if object, features can be loaded with withFeatures or nLongestObjectFeatures used to select the n longest features The number loaded is either the first objectNumbers objects, or the indices in objectNumbers from the database''' objects = [] with sqlite3.connect(filename) as connection: - if trajectoryType == 'objectfeature': - objectFeatureNumbers = loadObjectFeatureFrameNumbers(filename, objectNumbers) - featureNumbers = [] - for numbers in objectFeatureNumbers.values(): - featureNumbers += numbers[:min(len(numbers), maxNObjectFeatures)] - objects = loadTrajectoriesFromTable(connection, 'positions', 'feature', featureNumbers, timeStep) - objectVelocities = loadTrajectoriesFromTable(connection, 'velocities', 'feature', featureNumbers, timeStep) - else: - objects = loadTrajectoriesFromTable(connection, 'positions', trajectoryType, objectNumbers, timeStep) - objectVelocities = loadTrajectoriesFromTable(connection, 'velocities', trajectoryType, objectNumbers, timeStep) + objects = loadTrajectoriesFromTable(connection, 'positions', trajectoryType, objectNumbers, timeStep) + objectVelocities = loadTrajectoriesFromTable(connection, 'velocities', trajectoryType, objectNumbers, timeStep) if len(objectVelocities) > 0: for o,v in zip(objects, objectVelocities): @@ -283,7 +277,7 @@ queryStatement += ' WHERE object_id '+getObjectCriteria(objectNumbers) queryStatement += ' ORDER BY object_id' # order is important to group all features per object logging.debug(queryStatement) - cursor.execute(queryStatement) + cursor.execute(queryStatement) featureNumbers = {} for row in cursor: @@ -303,13 +297,16 @@ obj.setUserType(userType) obj.setNObjects(nObjects) + # add features if withFeatures: - nFeatures = 0 for obj in objects: - nFeatures = max(nFeatures, max(obj.featureNumbers)) - features = loadTrajectoriesFromSqlite(filename, 'feature', nFeatures+1, timeStep = timeStep) + obj.features = loadTrajectoriesFromSqlite(filename, 'feature', obj.featureNumbers, timeStep = timeStep) + elif nLongestFeaturesPerObject is not None: for obj in objects: - obj.setFeatures(features) + queryStatement = 'SELECT trajectory_id, max(frame_number)-min(frame_number) AS length FROM positions WHERE trajectory_id '+getObjectCriteria(obj.featureNumbers)+' GROUP BY trajectory_id ORDER BY length DESC' + logging.debug(queryStatement) + cursor.execute(queryStatement) + obj.features = loadTrajectoriesFromSqlite(filename, 'feature', [row[0] for i,row in enumerate(cursor) if i<nLongestFeaturesPerObject], timeStep = timeStep) except sqlite3.OperationalError as error: printDBError(error) @@ -338,12 +335,6 @@ printDBError(error) return None -def loadObjectTrajectoriesFromSqlite(): - '''Loads object trajectories - either simply objects or features (defaults to loadTrajectoriesFromSqlite) - or the longest features for each object ''' - - 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)'''