annotate trafficintelligence/iframework.py @ 1295:51893de43293

adding comments and preparing functions to load bounding boxes from dltrack
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 14 Feb 2025 15:01:40 -0500
parents 4dd446835e7d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
1 ''' Framework to record data to measure the three street functions: access, transit and place '''
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
2
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
3 from enum import Enum
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
4 from pathlib import Path
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
5 from datetime import datetime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6
1248
c4c50678c856 clean api update in sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1175
diff changeset
7 from sqlalchemy.ext.declarative import declared_attr
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8 from sqlalchemy import Table, Column, Integer, Boolean, String, Float, DateTime, Enum as SQLEnum, ForeignKey, CheckConstraint, create_engine
1248
c4c50678c856 clean api update in sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1175
diff changeset
9 from sqlalchemy.orm import relationship, backref, sessionmaker, declarative_base
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
10
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
11 Base = declarative_base()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
12
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
13 GenderEnum = Enum('GenderEnum', 'male female unknown')
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
14 ModeEnum = Enum('ModeEnum', 'car_driver car_passenger transit taxi motorcycle cycling walking other') # the idea is that the mode could be sufficient to record all events (line and zone crossings), whether the actual, more precise vehicle, is
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
15 VehicleEnum = Enum('VehicleEnum', 'car bike van truck bus taxi motorcycle scooter skate rollers mobility_scooter')
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
16 ActivityEnum = Enum('ActivityEnum', 'unknown strolling jogging shopping sitting talking resting eating playing doing_exercise smoking using_cellphone observing reading_writing performing selling playing_with_pet taking_pet_for_walk')
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
17 DisabilityEnum = Enum('DisabilityEnum', 'none wheelchair walker cane white_cane')
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
18 AgeEnum = Enum('AgeEnum', 'unknown infant toddler child teen young_adult adult senior') # 0-1, 1-4, 4-12, 12-18...
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
19
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
20 # should there be a survey object for site info, observer, etc?
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
21
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
22 class Mode(Base):
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
23 '''A mode is personal, because in a group (family), some might have a scooter or rollers'''
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
24 __tablename__ = 'modes'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
25 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
26 personIdx = Column(Integer, ForeignKey('persons.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
27 vehicleIdx = Column(Integer, ForeignKey('vehicles.idx'))
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
28 name = Column(SQLEnum(ModeEnum), nullable=False)
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
29 startTime = Column(DateTime) # None first time if only one mode
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
30 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
31
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
32 person = relationship('Person', backref = backref('modes'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
33 vehicle = relationship('Vehicle')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
34 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
35
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
36 def __init__(self, name, person, vehicle = None, startTime = None, p = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
37 self.person = person
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
38 self.name = name
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
39 self.vehicle = vehicle
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
40 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
41 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
42
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
43 @staticmethod
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
44 def initGroup(name, group, vehicle = None, startTime = None):
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
45 return [Mode(name, p, startTime) for p in group.getPersons()]
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
46
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
47 class Group(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
48 __tablename__ = 'groups'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
49 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
50
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
51 def __init__(self, persons):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
52 for p in persons:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
53 GroupBelonging(p, self)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
54
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
55 def getPersons(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
56 return [gb.person for gb in self.groupBelongings]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
57
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
58 class GroupBelonging(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
59 __tablename__ = 'groupbelongings'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
60 groupIdx = Column(Integer, ForeignKey('groups.idx'), primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
61 personIdx = Column(Integer, ForeignKey('persons.idx'), primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
62 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
63 startTime = Column(DateTime) # None first time if only one group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
64
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
65 person = relationship('Person', backref = backref('groupBelongings'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
66 group = relationship('Group', backref = backref('groupBelongings'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
67 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
68
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
69 def __init__(self, person, group, startTime = None, p = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
70 self.person = person
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
71 self.group = group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
72 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
73 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
74
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
75 # in aggregated form, there is a total number of observations for a given time interval, a number for each binary variable and k-1 variables for a categorical variable with k categories
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
76 class Person(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
77 __tablename__ = 'persons'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
78 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
79 #groupIdx = Column(Integer, ForeignKey('groups.idx'))
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
80 age = Column(SQLEnum(AgeEnum), nullable=True) #Column(String)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
81 gender = Column(SQLEnum(GenderEnum), nullable=False)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
82 disability = Column(String) #Column(SQLEnum(DisabilityEnum) #Boolean in Studio
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
83 stroller = Column(Boolean) # the booleans could be strings or enum to have more information
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
84 bag = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
85 animal = Column(Boolean)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
86 # databaseFilename = Column(String) # refers to trajectory database, relative path
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
87 # objectIdx = Column(Integer) # refers to object id in trajectory database
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
88
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
89 #group = relationship('Group', backref = backref('persons'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
90
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
91 def __init__(self, age = 'unknown', gender = 'unknown', disability = False, stroller = False, bag = False, animal = False):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
92 self.age = age
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
93 self.gender = gender
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
94 self.disability = disability
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
95 self.stroller = stroller
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
96 self.bag = bag
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
97 self.animal = animal
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
98
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
99 def getAgeNum(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
100 if str.isnumeric(self.age):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
101 return int(self.age)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
102 elif '.' in self.age:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
103 try:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
104 return float(self.age)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
105 except ValueError:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
106 pass
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
107 else:
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
108 return self.age
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
109
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
110 def getGroups(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
111 if len(self.groupBelongings) > 0:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
112 return [gb.group for gb in self.groupBelongings]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
113 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
114 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
115
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
116 class Vehicle(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
117 __tablename__ = 'vehicles'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
118 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
119 category = Column(SQLEnum(VehicleEnum), nullable=False)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
120 trailer = Column(Boolean)
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
121 # databaseFilename = Column(String) # refers to trajectory database, relative path
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
122 # objectIdx = Column(Integer) # refers to object id in trajectory database
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
123
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
124 def __init__(self, category, trailer = False):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
125 self.category = category
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
126 self.trailer = trailer
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
127
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
128 class Point(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
129 __tablename__ = 'points'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
130 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
131 x = Column(Float)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
132 y = Column(Float)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
133
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
134 def __init__(self, x, y):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
135 self.x = x
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
136 self.y = y
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
137
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
138 pointLineAssociation = Table('pointlines', Base.metadata,
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
139 Column('pointIdx', Integer, ForeignKey('points.idx')),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
140 Column('lineIdx', Integer, ForeignKey('lines.idx')))
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
141
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
142 class Line(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
143 __tablename__ = 'lines'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
144 idx = Column(Integer, primary_key=True)
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
145 name = Column(String)
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
146 # todo define lines for access counting: add type? - AccessLine?
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
147
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
148 points = relationship('Point', secondary=pointLineAssociation)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
149
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
150 def __init__(self, name, x1, y1, x2, y2):
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
151 self.name = name
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
152 self.points = [Point(x1, y1), Point(x2, y2)]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
153
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
154 pointZoneAssociation = Table('pointzones', Base.metadata,
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
155 Column('pointIdx', Integer, ForeignKey('points.idx')),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
156 Column('zoneIdx', Integer, ForeignKey('zones.idx')))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
157
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
158 class Zone(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
159 __tablename__ = 'zones'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
160 idx = Column(Integer, primary_key=True)
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
161 name = Column(String)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
163 points = relationship('Point', secondary=pointZoneAssociation)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
164
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
165 def __init__(self, name, xs = None, ys = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
166 'xs and ys are the list of x and y coordinates'
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
167 self.name = name
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
168 if xs is not None and ys is not None:
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
169 for x, y in zip(xs, ys):
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
170 self.addPoint(x, y)
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
171
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
172 def addPoint(self, x, y):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
173 self.points.append(Point(x, y))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
174
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
175 class AbstractCrossing:
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
176 def initPersonGroupCrossing(self, group, person, modeName, vehicle):
1175
35725db5e83f naming changed for framework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1173
diff changeset
177 ''' initiates with the crossing the group or person
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
178
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
179 design question: what should be done about simple line counting,
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
180 without information about persons'''
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
181 if person is None and group is not None: # create group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
182 self.group = group
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
183 if modeName is not None:
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
184 Mode.initGroup(modeName, group, vehicle)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
185 elif person is not None and group is None: # create person
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
186 self.group = Group([person])
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
187 if modeName is not None:
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
188 Mode(modeName, person, vehicle)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
189 else:
1175
35725db5e83f naming changed for framework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1173
diff changeset
190 print('Warning: crossing person and group or both None')
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
191
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
192 class LineCrossing(AbstractCrossing,Base):
1175
35725db5e83f naming changed for framework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1173
diff changeset
193 __tablename__ = 'linecrossings' # formerly 'linepassings'
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
194 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
195 lineIdx = Column(Integer, ForeignKey('lines.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
196 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
197 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
198 instant = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
199 speed = Column(Float)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
200 # wrongDirection = Column(Boolean)
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
201 rightToLeft = Column(Boolean)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
202
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
203 line = relationship('Line')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
204 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
205 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
206
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
207 def __init__(self, line, instant, speed = None, wrongDirection = None, p = None, group = None, person = None, modeName = None, vehicle = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
208 # makes it possible to create person and mode for just counting
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
209 # pass modeName as string to instantiate after
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
210 self.line = line
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
211 self.instant = instant
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
212 self.speed = speed
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
213 self.wrongDirection = wrongDirection
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
214 self.point = p
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
215 self.initPersonGroupCrossing(group, person, modeName, vehicle)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
216
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
217 class ZoneCrossing(AbstractCrossing,Base):
1164
f1a33f458d7e changing ZonePassing to ZoneCrossing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1163
diff changeset
218 __tablename__ = 'zonecrossings'
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
219 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
220 zoneIdx = Column(Integer, ForeignKey('zones.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
221 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
222 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
223 instant = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
224 entering = Column(Boolean)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
225 speed = Column(Float)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
226
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
227 zone = relationship('Zone')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
228 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
229 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
230
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
231 def __init__(self, zone, instant, entering, speed = None, p = None, group = None, person = None, modeName = None, vehicle = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
232 self.zone = zone
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
233 self.instant = instant
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
234 self.entering = entering
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
235 self.speed = speed
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
236 self.point = p
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
237 self.initPersonGroupCrossing(group, person, modeName, vehicle)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
238
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
239 class Activity(AbstractCrossing,Base):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
240 __tablename__ = 'activities'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
241 idx = Column(Integer, primary_key=True)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
242 activity = Column(SQLEnum(ActivityEnum), nullable=False) #Column(String)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
243 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
244 # can an activity be done in a vehicle? Is it relevant? Can it be unambiguously identified?
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
245 startTime = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
246 endTime = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
247 zoneIdx = Column(Integer, ForeignKey('zones.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
248 pointIdx = Column(Integer, ForeignKey('points.idx'))
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
249
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
250 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
251 zone = relationship('Zone')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
252 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
253
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
254 def __init__(self, activity, startTime, endTime, zone, p = None, group = None, person = None, modeName = None, vehicle = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
255 self.activity = activity
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
256 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
257 self.endTime = endTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
258 self.zone = zone
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
259 self.point = p
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
260 self.initPersonGroupCrossing(group, person, modeName, vehicle)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
261
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
262 def createDatabase(filename, insertInExisting = False, createOnlyGroupTables = False):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
263 'creates a session to query the filename'
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
264 if Path(filename).is_file() and not insertInExisting:
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
265 print('The file '+filename+' exists')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
266 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
267 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
268 engine = create_engine('sqlite:///'+filename)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
269 if createOnlyGroupTables:
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
270 Base.metadata.create_all(engine, tables = [Base.metadata.tables['modes'], Base.metadata.tables['groups'], Base.metadata.tables['groupbelongings'], Base.metadata.tables['persons'], Base.metadata.tables['vehicles'], Base.metadata.tables['points']])
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
271 else:
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
272 Base.metadata.create_all(engine)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
273 Session = sessionmaker(bind=engine)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
274 return Session()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
275
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
276 def connectDatabase(filename):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
277 'creates a session to query the filename'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
278 if Path(filename).is_file():
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
279 engine = create_engine('sqlite:///'+filename)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
280 Session = sessionmaker(bind=engine)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
281 return Session()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
282 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
283 print('The file '+filename+' does not exist')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
284 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
285
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
286 if __name__ == '__main__': # demo code
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
287 session = createDatabase('test.sqlite')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
288 if session is None:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
289 session = connectDatabase('test.sqlite')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
290 # count example
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
291 p = Person('infant', 'female', bag = True)
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
292 veh1 = Vehicle('car')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
293 modes = [Mode('cardriver', p, veh1), Mode('walking', p, startTime = datetime(2020,7,7,11,20))]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
294
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
295 line = Line('line1', 0.,0.,0.,10.)
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
296 zone = Zone('zone1', [0., 0., 1., 1.], [0., 1., 1., 0.])
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
297 destination = Zone('destination1', [10., 10., 11., 11.], [10., 11., 11., 10.])
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
298 counts = [LineCrossing(line, datetime(2020,7,2,23,20+i), person = Person(AgeEnum(1+i), 'female', disability = True), modeName = 'walking') for i in range(5)]
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
299 group1 = Group([Person(AgeEnum(3+i),'female', False, False, True, False) for i in range(3)])
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
300 groupMode1 = Mode.initGroup('walking', group1)
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
301 activities = [Activity('strolling', datetime(2020,7,2,23,0), datetime(2020,7,2,23,10), zone, person = Person('adult', 'male', True, False, True, False)),
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
302 Activity('eating', datetime(2020,7,2,23,10), datetime(2020,7,2,23,12), zone, person = Person('senior', 'male', True, False, True, False)),
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
303 Activity('playing', datetime(2020,7,2,22,0), datetime(2020,7,2,23,0), zone, group = group1)]
1172
f9ab0cbb92da updates to iframework, to better reflect transport modes (suggestion)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1164
diff changeset
304 counts.append(LineCrossing(line, datetime(2020,7,2,23,5), group = group1))
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
305 counts.append(LineCrossing(line, datetime(2020,7,2,23,7), person = Person('young_adult', 'unknown'), modeName = 'cardriver', vehicle = Vehicle('car')))
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
306 counts.append(LineCrossing(line, datetime(2020,7,2,23,9), person = Person('teen', 'unknown'), modeName = 'other', vehicle = Vehicle('scooter')))
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
307 counts.append(LineCrossing(line, datetime(2020,7,2,23,11), person = Person('teen', 'female'), modeName = 'cycling'))
1173
c1766bb5076c udpated the iframework metadata to allow adding it to an existing database, and creating only a subset of tables for group/person attributes
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1172
diff changeset
308 counts.append(LineCrossing(line, datetime(2020,7,2,23,13), person = Person(), modeName = 'cardriver')) # example of counting cars without knowing the driver and passenger's attributes
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
309 counts.append(LineCrossing(line, datetime(2020,7,2,23,15), group = Group([Person(AgeEnum(6+i)) for i in range(3)]), modeName = 'car_passenger'))
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
310
1293
4dd446835e7d update closer to Studio iframework
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1248
diff changeset
311 counts.append(ZoneCrossing(zone, datetime(2020,7,7,9,5), True, person = Person('adult', 'male', False, False, True, False)))
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
312
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
313 session.add_all([line, p, zone, group1, destination]+modes+groupMode1+counts+activities)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
314
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
315 session.commit()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
316 session.close()