Mercurial Hosting > traffic-intelligence
annotate trafficintelligence/iframework.py @ 1166:7b4d732f82b3
adding an option to use image coordinates in point-correspondence file when undistorting
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Thu, 10 Jun 2021 23:51:42 -0400 |
parents | f1a33f458d7e |
children | f9ab0cbb92da |
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() |