Mercurial > hg > nsaunier > traffic-intelligence
comparison python/storage.py @ 910:b58a1061a717
loading is faster for longest object features
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Wed, 28 Jun 2017 15:36:25 -0400 |
| parents | cd038493f8c6 |
| children | 1cd878812529 |
comparison
equal
deleted
inserted
replaced
| 909:cd038493f8c6 | 910:b58a1061a717 |
|---|---|
| 232 | 232 |
| 233 return objects | 233 return objects |
| 234 | 234 |
| 235 def loadUserTypesFromTable(cursor, objectNumbers): | 235 def loadUserTypesFromTable(cursor, objectNumbers): |
| 236 objectCriteria = getObjectCriteria(objectNumbers) | 236 objectCriteria = getObjectCriteria(objectNumbers) |
| 237 queryStatement = 'SELECT object_id, road_user_type from objects' | 237 queryStatement = 'SELECT object_id, road_user_type FROM objects' |
| 238 if objectNumbers is not None: | 238 if objectNumbers is not None: |
| 239 queryStatement += ' WHERE object_id '+objectCriteria | 239 queryStatement += ' WHERE object_id '+objectCriteria |
| 240 cursor.execute(queryStatement) | 240 cursor.execute(queryStatement) |
| 241 userTypes = {} | 241 userTypes = {} |
| 242 for row in cursor: | 242 for row in cursor: |
| 263 | 263 |
| 264 if trajectoryType == 'object': | 264 if trajectoryType == 'object': |
| 265 cursor = connection.cursor() | 265 cursor = connection.cursor() |
| 266 try: | 266 try: |
| 267 # attribute feature numbers to objects | 267 # attribute feature numbers to objects |
| 268 objectCriteria = getObjectCriteria(objectNumbers) | |
| 269 queryStatement = 'SELECT trajectory_id, object_id FROM objects_features' | 268 queryStatement = 'SELECT trajectory_id, object_id FROM objects_features' |
| 270 if objectNumbers is not None: | 269 if objectNumbers is not None: |
| 271 queryStatement += ' WHERE object_id '+objectCriteria | 270 queryStatement += ' WHERE object_id '+getObjectCriteria(objectNumbers) |
| 272 queryStatement += ' ORDER BY object_id' # order is important to group all features per object | 271 queryStatement += ' ORDER BY object_id' # order is important to group all features per object |
| 272 logging.debug(queryStatement) | |
| 273 cursor.execute(queryStatement) | 273 cursor.execute(queryStatement) |
| 274 logging.debug(queryStatement) | |
| 275 | 274 |
| 276 featureNumbers = {} | 275 featureNumbers = {} |
| 277 for row in cursor: | 276 for row in cursor: |
| 278 objId = row[1] | 277 objId = row[1] |
| 279 if objId not in featureNumbers: | 278 if objId not in featureNumbers: |
| 301 printDBError(error) | 300 printDBError(error) |
| 302 objects = [] | 301 objects = [] |
| 303 | 302 |
| 304 connection.close() | 303 connection.close() |
| 305 return objects | 304 return objects |
| 305 | |
| 306 def loadObjectFeatureFrameNumbers(filename, objectNumbers = None): | |
| 307 'Loads the feature frame numbers for each object' | |
| 308 connection = sqlite3.connect(filename) | |
| 309 cursor = connection.cursor() | |
| 310 try: | |
| 311 queryStatement = 'SELECT OF.object_id, TL.trajectory_id, TL.length FROM (SELECT trajectory_id, max(frame_number)-min(frame_number) AS length FROM positions GROUP BY trajectory_id) TL, objects_features OF WHERE TL.trajectory_id = OF.trajectory_id' | |
| 312 if objectNumbers is not None: | |
| 313 queryStatement += ' AND object_id '+getObjectCriteria(objectNumbers) | |
| 314 queryStatement += ' ORDER BY OF.object_id, TL.length DESC' | |
| 315 logging.debug(queryStatement) | |
| 316 cursor.execute(queryStatement) | |
| 317 objectFeatureNumbers = {} | |
| 318 for row in cursor: | |
| 319 objId = row[0] | |
| 320 if objId in objectFeatureNumbers: | |
| 321 objectFeatureNumbers[objId].append(row[1]) | |
| 322 else: | |
| 323 objectFeatureNumbers[objId] = [row[1]] | |
| 324 return objectFeatureNumbers | |
| 325 except sqlite3.OperationalError as error: | |
| 326 printDBError(error) | |
| 327 return None | |
| 306 | 328 |
| 307 def addCurvilinearTrajectoriesFromSqlite(filename, objects): | 329 def addCurvilinearTrajectoriesFromSqlite(filename, objects): |
| 308 '''Adds curvilinear positions (s_coordinate, y_coordinate, lane) | 330 '''Adds curvilinear positions (s_coordinate, y_coordinate, lane) |
| 309 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)''' |
| 310 connection = sqlite3.connect(filename) | 332 connection = sqlite3.connect(filename) |
