annotate trafficintelligence/iframework.py @ 1164:f1a33f458d7e

changing ZonePassing to ZoneCrossing
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 23 Mar 2021 23:01:43 -0400
parents fa9c358789ac
children f9ab0cbb92da
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 from enum import Enum
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2 from pathlib import Path
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
3 from datetime import datetime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
4
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
5 from sqlalchemy.ext.declarative import declarative_base, declared_attr
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6 from sqlalchemy import Table, Column, Integer, Boolean, String, Float, DateTime, Enum as SQLEnum, ForeignKey, CheckConstraint, create_engine
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7 from sqlalchemy.orm import relationship, backref, sessionmaker
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9 """
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 """
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 Base = declarative_base()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
14
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
15 GenderEnum = Enum('GenderEnum', 'male female unknown')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
16 ModeEnum = Enum('ModeEnum', 'cardriver carpassenger transit bike walking scooter skating')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
17 VehicleEnum = Enum('VehicleEnum', 'car SUV truck bus bike scooter skate rollers')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
18
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
19 # 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
20
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
21 class Mode(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
22 'personal, because in a group (family), some might have a scooter or rollers'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
23 __tablename__ = 'modes'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
24 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
25 personIdx = Column(Integer, ForeignKey('persons.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
26 vehicleIdx = Column(Integer, ForeignKey('vehicles.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
27 transport = Column(SQLEnum(ModeEnum), nullable=False)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
28 startTime = Column(DateTime) # None first time if only one group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
29 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
30
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
31 person = relationship('Person', backref = backref('modes'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
32 vehicle = relationship('Vehicle')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
33 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
34
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
35 def __init__(self, transport, person, vehicle = None, startTime = None, p = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
36 self.person = person
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
37 self.transport = transport
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
38 self.vehicle = vehicle
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
39 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
40 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
41
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
42 @staticmethod
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
43 def initGroup(transport, group, vehicle = None, startTime = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
44 return [Mode(transport, p, startTime) for p in group.getPersons()]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
45
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
46 class Group(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
47 __tablename__ = 'groups'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
48 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
49
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
50 def __init__(self, persons):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
51 for p in persons:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
52 GroupBelonging(p, self)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
53
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
54 def getPersons(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
55 return [gb.person for gb in self.groupBelongings]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
56
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
57 class GroupBelonging(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
58 __tablename__ = 'groupbelongings'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
59 groupIdx = Column(Integer, ForeignKey('groups.idx'), primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
60 personIdx = Column(Integer, ForeignKey('persons.idx'), primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
61 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
62 startTime = Column(DateTime) # None first time if only one group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
63
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
64 person = relationship('Person', backref = backref('groupBelongings'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
65 group = relationship('Group', backref = backref('groupBelongings'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
66 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
67
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
68 def __init__(self, person, group, startTime = None, p = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
69 self.person = person
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
70 self.group = group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
71 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
72 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
73
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
74 # 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
75 class Person(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
76 __tablename__ = 'persons'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
77 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
78 #groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
79 age = Column(String)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
80 gender = Column(SQLEnum(GenderEnum), nullable=False)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
81 disability = Column(String) # could be enum
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
82 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
83 bag = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
84 animal = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
85
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
86 #group = relationship('Group', backref = backref('persons'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
87
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
88 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
89 self.age = age
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
90 self.gender = gender
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
91 self.disability = disability
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
92 self.stroller = stroller
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
93 self.bag = bag
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
94 self.animal = animal
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
95
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
96 def getAgeNum(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
97 if str.isnumeric(self.age):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
98 return int(self.age)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
99 elif '.' in self.age:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
100 try:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
101 return float(self.age)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
102 except ValueError:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
103 pass
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
104 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
105 return self.age
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
106
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
107 def getGroups(self):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
108 if len(self.groupBelongings) > 0:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
109 return [gb.group for gb in self.groupBelongings]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
110 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
111 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
112
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
113 class Vehicle(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
114 __tablename__ = 'vehicles'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
115 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
116 category = Column(SQLEnum(VehicleEnum), nullable=False)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
117 trailer = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
118
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
119 def __init__(self, category, trailer = False):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
120 self.category = category
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
121 self.trailer = trailer
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
122
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
123 class Point(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
124 __tablename__ = 'points'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
125 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
126 x = Column(Float)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
127 y = Column(Float)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
128
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
129 def __init__(self, x, y):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
130 self.x = x
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
131 self.y = y
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
132
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
133 pointLineAssociation = Table('pointlines', Base.metadata,
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
134 Column('pointIdx', Integer, ForeignKey('points.idx')),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
135 Column('lineIdx', Integer, ForeignKey('lines.idx')))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
136
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
137 class Line(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
138 __tablename__ = 'lines'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
139 idx = Column(Integer, primary_key=True)
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
140 name = Column(String)
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
141 # todo define lines for access counting: add type? - AccessLine?
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
142
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
143 points = relationship('Point', secondary=pointLineAssociation)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
144
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
145 def __init__(self, name, x1, y1, x2, y2):
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
146 self.name = name
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
147 self.points = [Point(x1, y1), Point(x2, y2)]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
148
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
149 pointZoneAssociation = Table('pointzones', Base.metadata,
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
150 Column('pointIdx', Integer, ForeignKey('points.idx')),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
151 Column('zoneIdx', Integer, ForeignKey('zones.idx')))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
152
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
153 class Zone(Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
154 __tablename__ = 'zones'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
155 idx = Column(Integer, primary_key=True)
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
156 name = Column(String)
1162
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 points = relationship('Point', secondary=pointZoneAssociation)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
159
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
160 def __init__(self, name, xs = None, ys = None):
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
161 '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
162 self.name = name
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
163 if xs is not None and ys is not None:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
164 for x,y in zip(xs, ys):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
165 self.addPoint(x,y)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
166
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
167 def addPoint(self, x, y):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
168 self.points.append(Point(x, y))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
169
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
170 class AbstractPassing:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
171 def initPersonGroupPassing(self, group, person, transport, vehicle):
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
172 ''' initiates with the passing the group or person
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
173
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
174 design question: what should be done about simple line counting,
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
175 without information about persons'''
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
176 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
177 self.group = group
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
178 if transport is not None:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
179 Mode.initGroup(transport, group, vehicle)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
180 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
181 self.group = Group([person])
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
182 if transport is not None:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
183 Mode(transport, person, vehicle)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
184 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
185 print('Warning: passing person and group or both None')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
186
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
187 class LinePassing(AbstractPassing,Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
188 __tablename__ = 'linepassings'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
189 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
190 lineIdx = Column(Integer, ForeignKey('lines.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
191 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
192 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
193 instant = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
194 speed = Column(Float)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
195 wrongDirection = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
196
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
197 line = relationship('Line')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
198 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
199 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
200
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
201 def __init__(self, line, instant, speed = None, wrongDirection = None, p = None, group = None, person = None, transport = None, vehicle = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
202 # makes it possible to create person and mode for just counting
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
203 # pass transport as string to instantiate after
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
204 self.line = line
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
205 self.instant = instant
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
206 self.speed = speed
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
207 self.wrongDirection = wrongDirection
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
208 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
209 self.initPersonGroupPassing(group, person, transport, vehicle)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
210
1164
f1a33f458d7e changing ZonePassing to ZoneCrossing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1163
diff changeset
211 class ZoneCrossing(AbstractPassing,Base):
f1a33f458d7e changing ZonePassing to ZoneCrossing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1163
diff changeset
212 __tablename__ = 'zonecrossings'
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
213 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
214 zoneIdx = Column(Integer, ForeignKey('zones.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
215 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
216 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
217 instant = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
218 entering = Column(Boolean)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
219
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
220 zone = relationship('Zone')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
221 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
222 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
223
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
224 def __init__(self, zone, instant, entering, p = None, group = None, person = None, transport = None, vehicle = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
225 self.zone = zone
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
226 self.instant = instant
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
227 self.entering = entering
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
228 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
229 self.initPersonGroupPassing(group, person, transport, vehicle)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
230
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
231 class Activity(AbstractPassing,Base):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
232 __tablename__ = 'activities'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
233 idx = Column(Integer, primary_key=True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
234 activity = Column(String) # could be enum
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
235 groupIdx = Column(Integer, ForeignKey('groups.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
236 # 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
237 startTime = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
238 endTime = Column(DateTime)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
239 zoneIdx = Column(Integer, ForeignKey('zones.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
240 pointIdx = Column(Integer, ForeignKey('points.idx'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
241
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
242 group = relationship('Group')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
243 zone = relationship('Zone')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
244 point = relationship('Point')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
245
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
246 def __init__(self, activity, startTime, endTime, zone, p = None, group = None, person = None, transport = None, vehicle = None):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
247 self.activity = activity
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
248 self.startTime = startTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
249 self.endTime = endTime
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
250 self.zone = zone
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
251 self.point = p
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
252 self.initPersonGroupPassing(group, person, transport, vehicle)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
253
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
254 def createDatabase(filename):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
255 'creates a session to query the filename'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
256 if Path(filename).is_file():
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
257 print('The file '+filename+' exists')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
258 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
259 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
260 engine = create_engine('sqlite:///'+filename)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
261 Base.metadata.create_all(engine)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
262 Session = sessionmaker(bind=engine)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
263 return Session()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
264
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
265 def connectDatabase(filename):
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
266 'creates a session to query the filename'
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
267 if Path(filename).is_file():
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
268 engine = create_engine('sqlite:///'+filename)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
269 Session = sessionmaker(bind=engine)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
270 return Session()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
271 else:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
272 print('The file '+filename+' does not exist')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
273 return None
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
274
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
275 if __name__ == '__main__': # demo code
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
276 session = createDatabase('test.sqlite')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
277 if session is None:
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
278 session = connectDatabase('test.sqlite')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
279 # count example
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
280 p = Person(6, 'female', bag = True)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
281 veh1 = Vehicle('car')
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
282 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
283
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
284 line = Line('line1', 0.,0.,0.,10.)
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
285 zone = Zone('zone1', [0., 0., 1., 1.], [0., 1., 1., 0.])
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
286 destination = Zone('destination1', [10., 10., 11., 11.], [10., 11., 11., 10.])
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
287 counts = [LinePassing(line, datetime(2020,7,2,23,20+i), person = Person(20+i, 'female', disability = True), transport = 'walking') for i in range(5)]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
288 group1 = Group([Person(13+i,'female', False, False, True, False) for i in range(3)])
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
289 groupMode1 = Mode.initGroup('walking', group1)
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
290 activities = [Activity('walking', datetime(2020,7,2,23,0), datetime(2020,7,2,23,10), zone, person = Person(40, 'male', True, False, True, False)),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
291 Activity('eating', datetime(2020,7,2,23,10), datetime(2020,7,2,23,12), zone, person = Person(40, 'male', True, False, True, False)),
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
292 Activity('playing', datetime(2020,7,2,22,0), datetime(2020,7,2,23,0), zone, group = group1)]
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
293 counts.append(LinePassing(line, datetime(2020,7,2,23,5), group = group1))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
294 counts.append(LinePassing(line, datetime(2020,7,2,23,7), person = Person(23, 'unknown'), transport = 'cardriver', vehicle = Vehicle('car')))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
295 counts.append(LinePassing(line, datetime(2020,7,2,23,9), person = Person('teen', 'unknown'), transport = 'scooter', vehicle = Vehicle('scooter')))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
296 counts.append(LinePassing(line, datetime(2020,7,2,23,11), person = Person(12, 'female'), transport = 'bike'))
1163
fa9c358789ac bug correction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1162
diff changeset
297 counts.append(LinePassing(line, datetime(2020,7,2,23,13), person = Person(), transport = 'cardriver')) # example of counting cars without knowing the driver and passenger's attributes
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
298 counts.append(LinePassing(line, datetime(2020,7,2,23,15), group = Group([Person(34+i) for i in range(3)]), transport = 'carpassenger'))
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
299
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
300
1164
f1a33f458d7e changing ZonePassing to ZoneCrossing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 1163
diff changeset
301 counts.append(ZoneCrossing(zone, datetime(2020,7,7,9,5), True, person = Person(33, 'male', False, False, True, False)))
1162
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
302
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
303 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
304
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
305 session.commit()
efd52c55a72b added indicator framework file
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
306 session.close()