bussit.py

changeset 5
a65b680f1774
parent 4
312c432bb9e6
equal deleted inserted replaced
4:312c432bb9e6 5:a65b680f1774
1 #!/usr/bin/env python3 1 #!/usr/bin/env python3
2 import enum, json 2 import enum, json
3 from sys import stderr 3 from sys import stderr
4 from datetime import date, time, datetime, timedelta 4 from datetime import date, time, datetime, timedelta
5 from copy import copy
5 from misc import * 6 from misc import *
7 from geometria import *
6 Suunta = enum.Enum('Suunta', [('Taaksepäin', 0), ('Eteenpäin', 1)]) 8 Suunta = enum.Enum('Suunta', [('Taaksepäin', 0), ('Eteenpäin', 1)])
7 9
8 def muunna_ajovuoro_tunniste(tunniste): 10 def muunna_ajovuoro_tunniste(tunniste):
9 return tunniste 11 return tunniste
10 12
25 def ajetaan_päivänä(self, päivä): 27 def ajetaan_päivänä(self, päivä):
26 try: 28 try:
27 return self.palvelu in palvelut_per_päivä[päivä] 29 return self.palvelu in palvelut_per_päivä[päivä]
28 except KeyError: 30 except KeyError:
29 return False 31 return False
32 def suppea_reitti(self, pysäkistä = None):
33 if pysäkistä and pysäkistä in self.reitti:
34 reitti = copy(self.reitti)
35 reitti = reitti[reitti.index(pysäkistä):]
36 else:
37 reitti = self.reitti
38 käytetyt_alueet = set()
39 tulos = []
40 for pysähdys in reitti:
41 pysäkki = pysähdys.pysäkki
42 if pysäkki.alue and pysäkki.alue not in käytetyt_alueet:
43 käytetyt_alueet.add(pysäkki.alue)
44 tulos.append(pysäkki.alue)
45 return tulos
30 46
31 class Linja: 47 class Linja:
32 def __init__(self, tietue): 48 def __init__(self, tietue):
33 self.tunniste = tietue['route_id'] 49 self.tunniste = tietue['route_id']
34 self.viite = tietue['route_short_name'] 50 self.viite = tietue['route_short_name']
96 break 112 break
97 # ja siirry seuraavaan päivään. 113 # ja siirry seuraavaan päivään.
98 päivä += timedelta(1) 114 päivä += timedelta(1)
99 # Typistä lopputulos haluttuun tulosmäärään. 115 # Typistä lopputulos haluttuun tulosmäärään.
100 return taulu[:määrä] 116 return taulu[:määrä]
117 @property
118 def linkki_karttaan(self):
119 return 'http://www.openstreetmap.org/#map=19/%f/%f' % (self.sijainti.leveys, self.sijainti.pituus)
101 120
102 class Pysähdys: 121 class Pysähdys:
103 def __init__(self, saapumisaika, lähtöaika, pysäkki, ajo): 122 def __init__(self, saapumisaika, lähtöaika, pysäkki, ajo):
104 self.saapumisaika, self.lähtöaika, self.pysäkki, self.ajo = saapumisaika, lähtöaika, \ 123 self.saapumisaika, self.lähtöaika, self.pysäkki, self.ajo = saapumisaika, lähtöaika, \
105 pysäkki, ajo 124 pysäkki, ajo
165 yield palvelu 184 yield palvelu
166 185
167 print('Ladataan pysäkit... ', file = stderr, end = '', flush = True) 186 print('Ladataan pysäkit... ', file = stderr, end = '', flush = True)
168 with open('gtfs/stops.txt') as file: 187 with open('gtfs/stops.txt') as file:
169 for rivi in lue_csv(file): 188 for rivi in lue_csv(file):
170 sijainti = (float(rivi['stop_lat']), float(rivi['stop_lon'])) 189 sijainti = Sijainti(float(rivi['stop_lat']), float(rivi['stop_lon']))
171 pysäkki = Pysäkki(rivi['stop_id'], rivi['stop_name'], sijainti) 190 pysäkki = Pysäkki(rivi['stop_id'], rivi['stop_name'], sijainti)
172 pysäkit[pysäkki.tunniste] = pysäkki 191 pysäkit[pysäkki.tunniste] = pysäkki
173 with open('pysäkkialueet.json') as file: 192 with open('pysäkkialueet.json') as file:
174 for pysäkkitunniste, alue in json.load(file).items(): 193 for pysäkkitunniste, alue in json.load(file).items():
175 pysäkit[pysäkkitunniste].alue = alue 194 pysäkit[pysäkkitunniste].alue = alue

mercurial