busroute.py

changeset 27
f89504285945
parent 24
e6bdb9c54096
child 31
60045b362d71
equal deleted inserted replaced
26:69cc75506d4f 27:f89504285945
1 #!/usr/bin/env python3 1 #!/usr/bin/env python3
2
3 replacements = {
4 "Ylioppilaskylä-Itä": "Ylioppilaskylä",
5 "Ylioppilaskylä-Länsi": "Ylioppilaskylä",
6 "Caribia": "Ylioppilaskylä",
7 "Jokila": "Lieto",
8 "Piispala": "Lieto",
9 'Saaro': 'Ruissalo',
10 'Silvola': 'Vahto',
11 'Hemmola': 'Vahto',
12 'Paasniittu': 'Ruskon keskusta',
13 'Kahari': 'Ruskon keskusta',
14 'Kemiö': 'Kemiönsaari',
15 'Kasnäs': 'Kemiönsaari',
16 }
17
18 # nimiä joista voidaan joustaa tarvittaessa
19 abbreviations = {
20 'Raision keskusta': 'Raisio',
21 'Ruskon keskusta': 'Rusko',
22 'Naantalin keskusta': 'Naantali',
23 'Kaarinan keskusta': 'Kaarina',
24 'Kauppakeskus Mylly': 'Mylly',
25 }
26
27 def simplify_name(name):
28 name = replacements.get(name, name)
29 name = abbreviations.get(name, name)
30 return name
31
2 def reduce_schedule(reitti, trip_length, whole = False): 32 def reduce_schedule(reitti, trip_length, whole = False):
3 length = ((trip_length / 600) + len(reitti)) / 2 33 length = ((trip_length / 600) + len(reitti)) / 2
4 def abstract_sign(sign):
5 abstractions = {
6 'Moikoinen': 'Hirvensalo',
7 'Maanpää': 'Hirvensalo',
8 'Papinsaari': 'Hirvensalo',
9 'Häppilä': 'Hirvensalo',
10 'Friskala': 'Hirvensalo',
11 'Kukola': 'Hirvensalo',
12 'Oriniemi': 'Hirvensalo',
13 'Haarla': 'Hirvensalo',
14 'Lauttasaari': 'Hirvensalo',
15 'Pikisaari': 'Hirvensalo',
16 'Pernon telakka': 'Perno',
17 }
18 try:
19 start = sign.index('Kauppatori')
20 except ValueError:
21 return sign
22 result = []
23 for i, place in enumerate(sign):
24 if i >= start:
25 abstract_place = abstractions.get(place, place)
26 if abstract_place not in result:
27 result.append(abstract_place)
28 else:
29 result.append(place)
30 return result
31 if not reitti: 34 if not reitti:
32 return '' 35 return ''
33 eksoalueet = { 36 eksoalueet = {
34 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki', 37 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki',
35 'Kaivopuisto', 38 'Kaivopuisto',
36 }
37 replacements = {
38 "Ylioppilaskylä-Itä": "Ylioppilaskylä",
39 "Ylioppilaskylä-Länsi": "Ylioppilaskylä",
40 "Caribia": "Ylioppilaskylä",
41 "Jokila": "Lieto",
42 "Piispala": "Lieto",
43 'Saaro': 'Ruissalo',
44 'Silvola': 'Vahto',
45 'Hemmola': 'Vahto',
46 'Paasniittu': 'Ruskon keskusta',
47 'Kahari': 'Ruskon keskusta',
48 'Kemiö': 'Kemiönsaari',
49 'Kasnäs': 'Kemiönsaari',
50 } 39 }
51 have_already = set() 40 have_already = set()
52 i = 0 41 i = 0
53 while i < len(reitti): 42 while i < len(reitti):
54 if reitti[i] in replacements: 43 if reitti[i] in replacements:
89 'Lieto': 100, 78 'Lieto': 100,
90 'Lieto as': 200, 79 'Lieto as': 200,
91 'Ilmarinen': 50, 80 'Ilmarinen': 50,
92 'Vahto': 50, 81 'Vahto': 50,
93 'Ruskon keskusta': 200, 82 'Ruskon keskusta': 200,
94 'Oriketo': 30, 83 'Oriketo': 50,
95 'Harittu': 40, 84 'Harittu': 40,
96 'Jäkärlä': 50, 85 'Jäkärlä': 50,
97 'Paattinen': 100, 86 'Paattinen': 100,
98 'Kaarinan keskusta': 200, 87 'Kaarinan keskusta': 200,
99 'Naantalin keskusta': 200, 88 'Naantalin keskusta': 200,
100 'Uittamo': 50, 89 'Uittamo': 50,
101 'Piikkiö': 100, 90 'Piikkiö': 100,
102 'Paimio': 100, 91 'Paimio': 100,
103 'Pargas': 50, 92 'Pargas': 50,
104 'Yli-Maaria': 50, 93 'Yli-Maaria': 70,
105 'Saramäki': 50, 94 'Saramäki': 50,
106 'Tarvasjoki': 100, 95 'Tarvasjoki': 100,
107 'Marttila': 100, 96 'Marttila': 100,
108 'Koski Tl': 100, 97 'Koski Tl': 100,
109 'Katariina': 50, 98 'Katariina': 50,
121 "Kemiönsaari": 500, 110 "Kemiönsaari": 500,
122 } 111 }
123 112
124 if 'Kauppatori' not in reitti: 113 if 'Kauppatori' not in reitti:
125 priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori'] 114 priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori']
126
127 # nimiä joista voidaan joustaa tarvittaessa
128 abbreviations = {
129 'Raision keskusta': 'Raisio',
130 'Ruskon keskusta': 'Rusko',
131 'Naantalin keskusta': 'Naantali',
132 'Kaarinan keskusta': 'Kaarina',
133 'Kauppakeskus Mylly': 'Mylly',
134 }
135 115
136 from_place = reitti[0] 116 from_place = reitti[0]
137 destination = reitti[-1] 117 destination = reitti[-1]
138 reitti_arvot = {} 118 reitti_arvot = {}
139 f = lambda i: i**-0.3 119 f = lambda i: i**-0.3
157 ], key = lambda stop: -stop[1]) 137 ], key = lambda stop: -stop[1])
158 # enintään neljä tulee kylttiin 138 # enintään neljä tulee kylttiin
159 weights = weights[:3] 139 weights = weights[:3]
160 # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois 140 # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois
161 try: 141 try:
162 if weights[2][0] != destination and weights[2][1] < (1000 / length ** 1.15): 142 if weights[2][0] != destination and weights[2][1] < (1200 / length ** 0.9):
163 del weights[2] 143 del weights[2]
164 except IndexError: 144 except IndexError:
165 pass 145 pass
166 try: 146 try:
167 if weights[1][0] != destination and weights[1][1] < (500 / length ** 1.15): 147 if weights[1][0] != destination and weights[1][1] < (500 / length ** 1.15):
170 pass 150 pass
171 # lajitellaan painoarvot uudestaan reittijärjestykseen jotta sign tulee oikeinpäin 151 # lajitellaan painoarvot uudestaan reittijärjestykseen jotta sign tulee oikeinpäin
172 weights = sorted(weights, key = lambda paino: paino[2]) 152 weights = sorted(weights, key = lambda paino: paino[2])
173 # muodostetaan sign.. 153 # muodostetaan sign..
174 sign = [paino[0] for paino in weights] 154 sign = [paino[0] for paino in weights]
175 #sign = abstract_sign(sign)
176 # supista nimet jos mahdollista 155 # supista nimet jos mahdollista
177 def finalise(sign, abbreviation_level = 0): 156 def finalise(sign, abbreviation_level = 0):
178 if abbreviation_level > 0: 157 if abbreviation_level > 0:
179 sign = [abbreviations.get(paikka, paikka) for paikka in sign] 158 sign = [abbreviations.get(paikka, paikka) for paikka in sign]
180 return sign 159 return sign

mercurial