Mercurial Hosting > traffic-intelligence
comparison python/storage.py @ 880:000555430b28
adapted code from Paul St-Aubin and udpated MovingObject.setFeatures to truly find the right features in a list that may not start at 0
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 14 Mar 2017 17:10:35 -0400 |
parents | f9ea5083588e |
children | 4749b71aa7fb |
comparison
equal
deleted
inserted
replaced
879:f9ea5083588e | 880:000555430b28 |
---|---|
331 '''Writes features, ie the trajectory positions (and velocities if exist) | 331 '''Writes features, ie the trajectory positions (and velocities if exist) |
332 with their instants to a specified sqlite file | 332 with their instants to a specified sqlite file |
333 Either feature positions (and velocities if they exist) | 333 Either feature positions (and velocities if they exist) |
334 or curvilinear positions will be saved at a time''' | 334 or curvilinear positions will be saved at a time''' |
335 | 335 |
336 ## Sanitation | |
337 if(type(objects) is not list or len(objects)==0): return False | |
338 connection = sqlite3.connect(outputFilename) | 336 connection = sqlite3.connect(outputFilename) |
339 try: | 337 try: |
340 cursor = connection.cursor() | 338 cursor = connection.cursor() |
341 ## Extract features from objects | 339 # Parse feature and/or object structure and commit to DB |
342 if(trajectoryType == 'object'): | |
343 features = [] | |
344 for obj in objects: | |
345 if(obj.hasFeatures()): | |
346 features += obj.getFeatures() | |
347 elif(trajectoryType == 'feature'): | |
348 features = objects | |
349 ## Setup feature queries | |
350 if(trajectoryType == 'feature' or trajectoryType == 'object'): | 340 if(trajectoryType == 'feature' or trajectoryType == 'object'): |
341 # Extract features from objects | |
342 if(trajectoryType == 'object'): | |
343 features = [] | |
344 for obj in objects: | |
345 if(obj.hasFeatures()): | |
346 features += obj.getFeatures() | |
347 elif(trajectoryType == 'feature'): | |
348 features = objects | |
349 # Setup feature queries | |
351 createTrajectoryTable(cursor, "positions") | 350 createTrajectoryTable(cursor, "positions") |
352 createTrajectoryTable(cursor, "velocities") | 351 createTrajectoryTable(cursor, "velocities") |
353 positionQuery = insertTrajectoryQuery("positions") | 352 positionQuery = insertTrajectoryQuery("positions") |
354 velocityQuery = insertTrajectoryQuery("velocities") | 353 velocityQuery = insertTrajectoryQuery("velocities") |
355 ## Setup object queries | 354 # Setup object queries |
356 if(trajectoryType == 'object'): | 355 if(trajectoryType == 'object'): |
357 createObjectsTable(cursor) | 356 createObjectsTable(cursor) |
358 createObjectsFeaturesTable(cursor) | 357 createObjectsFeaturesTable(cursor) |
359 objectQuery = insertObjectQuery() | 358 objectQuery = insertObjectQuery() |
360 objectFeatureQuery = insertObjectFeatureQuery() | 359 objectFeatureQuery = insertObjectFeatureQuery() |
361 ## Parse feature and/or object structure and commit to DB | |
362 if(trajectoryType == 'feature' or trajectoryType == 'object'): | |
363 running_tally_of_unique_nums = [] | |
364 for feature in features: | 360 for feature in features: |
365 num = feature.getNum() | 361 num = feature.getNum() |
366 if(num not in running_tally_of_unique_nums): | 362 frameNum = feature.getFirstInstant() |
367 running_tally_of_unique_nums.append(num) | 363 for position in feature.getPositions(): |
368 frame_number = feature.getFirstInstant() | 364 cursor.execute(positionQuery, (num, frameNum, position.x, position.y)) |
369 for position in feature.getPositions(): | 365 frameNum += 1 |
370 cursor.execute(positionQuery, (num, frame_number, position.x, position.y)) | 366 velocities = feature.getVelocities() |
371 frame_number += 1 | 367 if velocities is not None: |
372 velocities = feature.getVelocities() | 368 frameNum = feature.getFirstInstant() |
373 if velocities is not None: | 369 for i in xrange(velocities.length()-1): |
374 frame_number = feature.getFirstInstant() | 370 v = velocities[i] |
375 for i in xrange(velocities.length()-1): | 371 cursor.execute(velocityQuery, (num, frameNum, v.x, v.y)) |
376 v = velocities[i] | 372 frameNum += 1 |
377 cursor.execute(velocityQuery, (num, frame_number, v.x, v.y)) | |
378 frame_number += 1 | |
379 if(trajectoryType == 'object'): | 373 if(trajectoryType == 'object'): |
380 running_tally_of_unique_nums = [] | |
381 for obj in objects: | 374 for obj in objects: |
382 if(obj.hasFeatures()): | 375 for feature in obj.getFeatures(): |
383 n_objects = len(obj.getFeatures()) | 376 featureNum = feature.getNum() |
384 for feature in obj.getFeatures(): | 377 cursor.execute(objectFeatureQuery, (obj.getNum(), featureNum)) |
385 feature_num = feature.getNum() | 378 cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), 1)) |
386 if(feature_num not in running_tally_of_unique_nums): | 379 # Parse curvilinear position structure |
387 running_tally_of_unique_nums.append(feature_num) | |
388 cursor.execute(objectFeatureQuery, (obj.getNum(), feature_num)) | |
389 else: | |
390 n_objects = 0 | |
391 cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), n_objects)) | |
392 ## Parse curvilinear position structure | |
393 elif(trajectoryType == 'curvilinear'): | 380 elif(trajectoryType == 'curvilinear'): |
394 createCurvilinearTrajectoryTable(cursor) | 381 createCurvilinearTrajectoryTable(cursor) |
395 curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, s_coordinate, y_coordinate, lane) values (?,?,?,?,?)" | 382 curvilinearQuery = "insert into curvilinear_positions (trajectory_id, frame_number, s_coordinate, y_coordinate, lane) values (?,?,?,?,?)" |
396 for obj in objects: | 383 for obj in objects: |
397 num = obj.getNum() | 384 num = obj.getNum() |
398 frame_number = obj.getFirstInstant() | 385 frameNum = obj.getFirstInstant() |
399 for position in obj.getCurvilinearPositions(): | 386 for position in obj.getCurvilinearPositions(): |
400 cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2])) | 387 cursor.execute(curvilinearQuery, (num, frameNum, position[0], position[1], position[2])) |
401 frame_number += 1 | 388 frameNum += 1 |
402 else: | 389 else: |
403 print('Unknown trajectory type {}'.format(trajectoryType)) | 390 print('Unknown trajectory type {}'.format(trajectoryType)) |
404 connection.commit() | 391 connection.commit() |
405 except sqlite3.OperationalError as error: | 392 except sqlite3.OperationalError as error: |
406 printDBError(error) | 393 printDBError(error) |