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()