itienary_processing.py

Thu, 30 Jul 2020 21:52:31 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 30 Jul 2020 21:52:31 +0300
changeset 2
7378b802ddf8
child 3
10ce28475e9c
permissions
-rwxr-xr-x

destination processing

2
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
2 import sqlalchemy
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
3 import sqlalchemy.orm
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
4 from regions import parse_regions
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
5 from datamodel import *
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
6 engine = sqlalchemy.create_engine('sqlite:///gtfs.db')
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
7 GtfsBase.metadata.create_all(engine)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
8 session = sqlalchemy.orm.sessionmaker(bind = engine)()
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
9 regions = parse_regions('föli.osm')
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
10
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
11 def filter_itinerary(raw_itinerary):
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
12 encountered = set()
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
13 for region in raw_itinerary:
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
14 if region and region not in encountered:
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
15 yield region
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
16 encountered.add(region)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
17
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
18 def get_stoptimes(session):
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
19 yield from session \
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
20 .query(GtfsStopTime) \
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
21 .filter(GtfsStopTime.destination == None) \
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
22 .limit(1000)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
23
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 def length_left(stoptime):
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 return stoptime.trip.shape.length - stoptime.shape_distance_traveled
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
26
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
27 amount = session.query(GtfsStopTime).filter(GtfsStopTime.destination == None).count()
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
28 k = 0
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
29 got_stoptimes = amount != 0
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
30
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
31 while got_stoptimes:
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
32 print('%.2f%%' % (k * 100 / amount))
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
33 got_stoptimes = False
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
34 for stoptime in get_stoptimes(session):
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
35 got_stoptimes = True
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
36 k += 1
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
37 itinerary = list(filter_itinerary(
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
38 entry.stop.stop_region
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
39 for entry in session.query(GtfsStopTime)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
40 .filter(GtfsStopTime.trip_id == stoptime.trip_id)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
41 .filter(GtfsStopTime.stop_sequence > stoptime.stop_sequence)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
42 ))
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
43 from busroute import destinations_list
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
44 dests = destinations_list(
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
45 itinerary = itinerary,
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
46 trip_length = float(length_left(stoptime)),
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
47 regions = regions,
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
48 )
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
49 stoptime.destination = '-'.join(dests)
7378b802ddf8 destination processing
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
50 session.commit()

mercurial