Mercurial Hosting > traffic-intelligence
diff 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 |
line wrap: on
line diff
--- a/python/storage.py Tue Mar 14 14:22:14 2017 -0400 +++ b/python/storage.py Tue Mar 14 17:10:35 2017 -0400 @@ -333,72 +333,59 @@ Either feature positions (and velocities if they exist) or curvilinear positions will be saved at a time''' - ## Sanitation - if(type(objects) is not list or len(objects)==0): return False connection = sqlite3.connect(outputFilename) try: cursor = connection.cursor() - ## Extract features from objects - if(trajectoryType == 'object'): - features = [] - for obj in objects: - if(obj.hasFeatures()): - features += obj.getFeatures() - elif(trajectoryType == 'feature'): - features = objects - ## Setup feature queries + # Parse feature and/or object structure and commit to DB if(trajectoryType == 'feature' or trajectoryType == 'object'): + # Extract features from objects + if(trajectoryType == 'object'): + features = [] + for obj in objects: + if(obj.hasFeatures()): + features += obj.getFeatures() + elif(trajectoryType == 'feature'): + features = objects + # Setup feature queries createTrajectoryTable(cursor, "positions") createTrajectoryTable(cursor, "velocities") positionQuery = insertTrajectoryQuery("positions") velocityQuery = insertTrajectoryQuery("velocities") - ## Setup object queries - if(trajectoryType == 'object'): - createObjectsTable(cursor) - createObjectsFeaturesTable(cursor) - objectQuery = insertObjectQuery() - objectFeatureQuery = insertObjectFeatureQuery() - ## Parse feature and/or object structure and commit to DB - if(trajectoryType == 'feature' or trajectoryType == 'object'): - running_tally_of_unique_nums = [] + # Setup object queries + if(trajectoryType == 'object'): + createObjectsTable(cursor) + createObjectsFeaturesTable(cursor) + objectQuery = insertObjectQuery() + objectFeatureQuery = insertObjectFeatureQuery() for feature in features: num = feature.getNum() - if(num not in running_tally_of_unique_nums): - running_tally_of_unique_nums.append(num) - frame_number = feature.getFirstInstant() - for position in feature.getPositions(): - cursor.execute(positionQuery, (num, frame_number, position.x, position.y)) - frame_number += 1 - velocities = feature.getVelocities() - if velocities is not None: - frame_number = feature.getFirstInstant() - for i in xrange(velocities.length()-1): - v = velocities[i] - cursor.execute(velocityQuery, (num, frame_number, v.x, v.y)) - frame_number += 1 + frameNum = feature.getFirstInstant() + for position in feature.getPositions(): + cursor.execute(positionQuery, (num, frameNum, position.x, position.y)) + frameNum += 1 + velocities = feature.getVelocities() + if velocities is not None: + frameNum = feature.getFirstInstant() + for i in xrange(velocities.length()-1): + v = velocities[i] + cursor.execute(velocityQuery, (num, frameNum, v.x, v.y)) + frameNum += 1 if(trajectoryType == 'object'): - running_tally_of_unique_nums = [] for obj in objects: - if(obj.hasFeatures()): - n_objects = len(obj.getFeatures()) - for feature in obj.getFeatures(): - feature_num = feature.getNum() - if(feature_num not in running_tally_of_unique_nums): - running_tally_of_unique_nums.append(feature_num) - cursor.execute(objectFeatureQuery, (obj.getNum(), feature_num)) - else: - n_objects = 0 - cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), n_objects)) - ## Parse curvilinear position structure + for feature in obj.getFeatures(): + featureNum = feature.getNum() + cursor.execute(objectFeatureQuery, (obj.getNum(), featureNum)) + cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), 1)) + # Parse curvilinear position structure elif(trajectoryType == 'curvilinear'): createCurvilinearTrajectoryTable(cursor) 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() + frameNum = obj.getFirstInstant() for position in obj.getCurvilinearPositions(): - cursor.execute(curvilinearQuery, (num, frame_number, position[0], position[1], position[2])) - frame_number += 1 + cursor.execute(curvilinearQuery, (num, frameNum, position[0], position[1], position[2])) + frameNum += 1 else: print('Unknown trajectory type {}'.format(trajectoryType)) connection.commit()