Mercurial > hg > nsaunier > traffic-intelligence
comparison python/storage.py @ 341:2f39c4ed0b62
first version of indicator saving to sqlite
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 20 Jun 2013 14:31:24 -0400 |
| parents | 1046b7346886 |
| children | 4d69486869a5 |
comparison
equal
deleted
inserted
replaced
| 340:1046b7346886 | 341:2f39c4ed0b62 |
|---|---|
| 1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
| 2 # -*- coding: utf-8 -*- | 2 # -*- coding: utf-8 -*- |
| 3 '''Various utilities to save and load data''' | 3 '''Various utilities to save and load data''' |
| 4 | 4 |
| 5 import utils | 5 import utils, moving, events |
| 6 import moving | |
| 7 | 6 |
| 8 __metaclass__ = type | 7 __metaclass__ = type |
| 9 | 8 |
| 10 | 9 |
| 11 ngsimUserTypes = {'twowheels':1, | 10 ngsimUserTypes = {'twowheels':1, |
| 14 | 13 |
| 15 ######################### | 14 ######################### |
| 16 # Sqlite | 15 # Sqlite |
| 17 ######################### | 16 ######################### |
| 18 | 17 |
| 19 def writeTrajectoriesToSqlite(objects, outFilename, trajectoryType, objectNumbers = -1): | 18 def saveTrajectoriesToSqlite(objects, outFilename, trajectoryType, objectNumbers = -1): |
| 20 """ | 19 """ |
| 21 This function writers trajectories to a specified sqlite file | 20 This function writers trajectories to a specified sqlite file |
| 22 @param[in] objects -> a list of trajectories | 21 @param[in] objects -> a list of trajectories |
| 23 @param[in] trajectoryType - | 22 @param[in] trajectoryType - |
| 24 @param[out] outFile -> the .sqlite file containting the written objects | 23 @param[out] outFile -> the .sqlite file containting the written objects |
| 27 | 26 |
| 28 import sqlite3 | 27 import sqlite3 |
| 29 connection = sqlite3.connect(outFilename) | 28 connection = sqlite3.connect(outFilename) |
| 30 cursor = connection.cursor() | 29 cursor = connection.cursor() |
| 31 | 30 |
| 32 schema = "CREATE TABLE \"positions\"(trajectory_id INTEGER,frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))" | 31 schema = "CREATE TABLE IF NOT EXISTS \"positions\"(trajectory_id INTEGER,frame_number INTEGER, x_coordinate REAL, y_coordinate REAL, PRIMARY KEY(trajectory_id, frame_number))" |
| 33 cursor.execute(schema) | 32 cursor.execute(schema) |
| 34 | 33 |
| 35 trajectory_id = 0 | 34 trajectory_id = 0 |
| 36 frame_number = 0 | 35 frame_number = 0 |
| 37 if trajectoryType == 'feature': | 36 if trajectoryType == 'feature': |
| 203 | 202 |
| 204 def deleteIndicators(filename): | 203 def deleteIndicators(filename): |
| 205 'Deletes all indicator data in db' | 204 'Deletes all indicator data in db' |
| 206 pass | 205 pass |
| 207 | 206 |
| 207 def createInteractionTable(cursor): | |
| 208 cursor.execute('CREATE TABLE IF NOT EXISTS interactions (id INTEGER PRIMARY KEY, object_id1 INTEGER, object_id2 INTEGER, FOREIGN KEY(object_id1) REFERENCES objects(id), FOREIGN KEY(object_id2) REFERENCES objects(id))') | |
| 209 | |
| 210 def createIndicatorTables(cursor): | |
| 211 # cursor.execute('CREATE TABLE IF NOT EXISTS indicators (id INTEGER PRIMARY KEY, interaction_id INTEGER, indicator_type INTEGER, FOREIGN KEY(interaction_id) REFERENCES interactions(id))') | |
| 212 # cursor.execute('CREATE TABLE IF NOT EXISTS indicator_values (indicator_id INTEGER, frame_number INTEGER, value REAL, FOREIGN KEY(indicator_id) REFERENCES indicators(id), PRIMARY KEY(indicator_id, frame_number))') | |
| 213 cursor.execute('CREATE TABLE IF NOT EXISTS indicators (interaction_id INTEGER, indicator_type INTEGER, frame_number INTEGER, value REAL, FOREIGN KEY(interaction_id) REFERENCES interactions(id), PRIMARY KEY(interaction_id, indicator_type, frame_number))') | |
| 214 | |
| 215 def saveInteraction(cursor, interaction): | |
| 216 roadUserNumbers = list(interaction.getRoadUserNumbers()) | |
| 217 cursor.execute('INSERT INTO interactions VALUES({}, {}, {})'.format(interaction.getNum(), roadUserNumbers[0], roadUserNumbers[1])) | |
| 218 | |
| 208 def saveInteractions(filename, interactions): | 219 def saveInteractions(filename, interactions): |
| 209 'Saves the interactions in the table' | 220 'Saves the interactions in the table' |
| 210 import sqlite3 | 221 import sqlite3 |
| 211 connection = sqlite3.connect(filename) | 222 connection = sqlite3.connect(filename) |
| 212 cursor = connection.cursor() | 223 cursor = connection.cursor() |
| 213 cursor.execute('CREATE TABLE interactions IF NOT EXISTS (id INTEGER PRIMARY KEY, object_id1 INTEGER, object_id2 INTEGER, FOREIGN KEY(object_id1) REFERENCES objects(id), FOREIGN KEY(object_id2) REFERENCES objects(id))') | 224 createInteractionTable(cursor) |
| 214 # get the highest interaction id | 225 for inter in interactions: |
| 215 for i in interactions: | 226 saveInteraction(cursor, inter) |
| 216 cursor.execute('INSERT INTO interactions VALUES({})'.format(i.getNum())) # todo getRoadUserNumbers() | 227 connection.commit() |
| 217 # CREATE TABLE IF NOT EXISTS interactions (id INTEGER PRIMARY KEY, object_id1 INTEGER, object_id2 INTEGER, FOREIGN KEY(object_id1) REFERENCES objects(id), FOREIGN KEY(object_id2) REFERENCES objects(id)); | 228 connection.close() |
| 218 # CREATE TABLE IF NOT EXISTS indicators (id INTEGER PRIMARY KEY, interaction_id INTEGER, indicator_type INTEGER, FOREIGN KEY(interaction_id) REFERENCES interactions(id)) | 229 |
| 219 # CREATE TABLE IF NOT EXISTS indicator_values (indicator_id INTEGER, frame_number INTEGER, value REAL, FOREIGN KEY(indicator_id) REFERENCES indicators(id), PRIMARY KEY(indicator_id, frame_number)) | 230 def saveIndicator(cursor, interactionNum, indicator): |
| 220 | 231 for instant in indicator.getTimeInterval(): |
| 221 connection.close() | 232 if indicator[instant]: |
| 222 | 233 cursor.execute('INSERT INTO indicators VALUES({}, {}, {}, {})'.format(interactionNum, events.Interaction.indicatorNameToIndices[indicator.getName()], instant, indicator[instant])) |
| 223 def saveIndicators(filename, indicators): | 234 |
| 235 def saveIndicators(filename, interactions, indicatorNames): | |
| 224 'Saves the indicator values in the table' | 236 'Saves the indicator values in the table' |
| 225 import sqlite3 | 237 import sqlite3 |
| 226 connection = sqlite3.connect(filename) | 238 connection = sqlite3.connect(filename) |
| 227 | 239 cursor = connection.cursor() |
| 228 | 240 createInteractionTable(cursor) |
| 229 connection.close() | 241 createIndicatorTables(cursor) |
| 242 for inter in interactions: | |
| 243 saveInteraction(cursor, inter) | |
| 244 for indicatorName in indicatorNames: | |
| 245 indicator = inter.getIndicator(indicatorName) | |
| 246 if indicator != None: | |
| 247 saveIndicator(cursor, inter.getNum(), indicator) | |
| 248 connection.commit() | |
| 249 connection.close() | |
| 250 | |
| 230 | 251 |
| 231 ######################### | 252 ######################### |
| 232 # txt files | 253 # txt files |
| 233 ######################### | 254 ######################### |
| 234 | 255 |
