comparison trafficintelligence/storage.py @ 1039:5621e4ad2428

removing prefix option to loadtrajectories from SQLite
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 04 Jul 2018 12:24:37 -0400
parents 6a6c37eb3a74
children 20799ac9524e
comparison
equal deleted inserted replaced
1038:d24deb61f550 1039:5621e4ad2428
238 userTypes = {} 238 userTypes = {}
239 for row in cursor: 239 for row in cursor:
240 userTypes[row[0]] = row[1] 240 userTypes[row[0]] = row[1]
241 return userTypes 241 return userTypes
242 242
243 def loadTrajectoriesFromSqlite(filename, trajectoryType, objectNumbers = None, withFeatures = False, timeStep = None, tablePrefix = None): 243 def loadTrajectoriesFromSqlite(filename, trajectoryType, objectNumbers = None, withFeatures = False, timeStep = None):
244 '''Loads the trajectories (in the general sense, 244 '''Loads the trajectories (in the general sense,
245 either features, objects (feature groups) or bounding box series) 245 either features, objects (feature groups) or bounding box series)
246 The number loaded is either the first objectNumbers objects, 246 The number loaded is either the first objectNumbers objects,
247 or the indices in objectNumbers from the database''' 247 or the indices in objectNumbers from the database'''
248 objects = [] 248 objects = []
249 with sqlite3.connect(filename) as connection: 249 with sqlite3.connect(filename) as connection:
250 if tablePrefix is None: 250 objects = loadTrajectoriesFromTable(connection, 'positions', trajectoryType, objectNumbers, timeStep)
251 prefix = '' 251 objectVelocities = loadTrajectoriesFromTable(connection, 'velocities', trajectoryType, objectNumbers, timeStep)
252 else:
253 prefix = tablePrefix + '_'
254 objects = loadTrajectoriesFromTable(connection, prefix+'positions', trajectoryType, objectNumbers, timeStep)
255 objectVelocities = loadTrajectoriesFromTable(connection, prefix+'velocities', trajectoryType, objectNumbers, timeStep)
256 252
257 if len(objectVelocities) > 0: 253 if len(objectVelocities) > 0:
258 for o,v in zip(objects, objectVelocities): 254 for o,v in zip(objects, objectVelocities):
259 if o.getNum() == v.getNum(): 255 if o.getNum() == v.getNum():
260 o.velocities = v.positions 256 o.velocities = v.positions
322 return objectFeatureNumbers 318 return objectFeatureNumbers
323 except sqlite3.OperationalError as error: 319 except sqlite3.OperationalError as error:
324 printDBError(error) 320 printDBError(error)
325 return None 321 return None
326 322
323 def loadObjectTrajectoriesFromSqlite():
324 '''Loads object trajectories
325 either simply objects or features (defaults to loadTrajectoriesFromSqlite)
326 or the longest features for each object '''
327
328
327 def addCurvilinearTrajectoriesFromSqlite(filename, objects): 329 def addCurvilinearTrajectoriesFromSqlite(filename, objects):
328 '''Adds curvilinear positions (s_coordinate, y_coordinate, lane) 330 '''Adds curvilinear positions (s_coordinate, y_coordinate, lane)
329 from a database to an existing MovingObject dict (indexed by each objects's num)''' 331 from a database to an existing MovingObject dict (indexed by each objects's num)'''
330 with sqlite3.connect(filename) as connection: 332 with sqlite3.connect(filename) as connection:
331 cursor = connection.cursor() 333 cursor = connection.cursor()
348 if objNum in objects: 350 if objNum in objects:
349 objects[objNum].curvilinearPositions.addPositionSYL(row[2],row[3],row[4]) 351 objects[objNum].curvilinearPositions.addPositionSYL(row[2],row[3],row[4])
350 if len(missingObjectNumbers) > 0: 352 if len(missingObjectNumbers) > 0:
351 print('List of missing objects to attach corresponding curvilinear trajectories: {}'.format(missingObjectNumbers)) 353 print('List of missing objects to attach corresponding curvilinear trajectories: {}'.format(missingObjectNumbers))
352 354
353 def saveTrajectoriesToTable(connection, objects, trajectoryType, tablePrefix = None): 355 def saveTrajectoriesToTable(connection, objects, trajectoryType):
354 'Saves trajectories in table tableName' 356 'Saves trajectories in table tableName'
355 cursor = connection.cursor() 357 cursor = connection.cursor()
356 # Parse feature and/or object structure and commit to DB 358 # Parse feature and/or object structure and commit to DB
357 if(trajectoryType == 'feature' or trajectoryType == 'object'): 359 if(trajectoryType == 'feature' or trajectoryType == 'object'):
358 # Extract features from objects 360 # Extract features from objects
364 if len(features) == 0: 366 if len(features) == 0:
365 print('Warning, objects have no features') # todo save centroid trajectories? 367 print('Warning, objects have no features') # todo save centroid trajectories?
366 elif trajectoryType == 'feature': 368 elif trajectoryType == 'feature':
367 features = objects 369 features = objects
368 # Setup feature queries 370 # Setup feature queries
369 if tablePrefix is None: 371 createTrajectoryTable(cursor, "positions")
370 prefix = '' 372 createTrajectoryTable(cursor, "velocities")
371 else: 373 positionQuery = insertTrajectoryQuery("positions")
372 prefix = tablePrefix+'_' 374 velocityQuery = insertTrajectoryQuery("velocities")
373 createTrajectoryTable(cursor, prefix+"positions")
374 createTrajectoryTable(cursor, prefix+"velocities")
375 positionQuery = insertTrajectoryQuery(prefix+"positions")
376 velocityQuery = insertTrajectoryQuery(prefix+"velocities")
377 # Setup object queries 375 # Setup object queries
378 if trajectoryType == 'object': 376 if trajectoryType == 'object':
379 createObjectsTable(cursor) 377 createObjectsTable(cursor)
380 createObjectsFeaturesTable(cursor) 378 createObjectsFeaturesTable(cursor)
381 objectQuery = insertObjectQuery() 379 objectQuery = insertObjectQuery()