busroute.py

Sat, 10 Jun 2017 20:56:38 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sat, 10 Jun 2017 20:56:38 +0300
changeset 15
a22cdf28930f
parent 14
b4fbc92cd915
child 16
d94cde20abee
permissions
-rw-r--r--

Lisätty bussipysäkkien ryhmittely

5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
2 def supista_reitti(reitti, kokonainen = False):
12
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
3 def abstract_sign(sign):
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
4 abstractions = {
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
5 'Moikoinen': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
6 'Maanpää': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
7 'Papinsaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
8 'Häppilä': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
9 'Friskala': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
10 'Kukola': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
11 'Oriniemi': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
12 'Haarla': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
13 'Lauttasaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
14 'Pikisaari': 'Hirvensalo',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
15 'Vienola': 'Pahaniemi',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
16 'Takakirves': 'Kärsämäki',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
17 'Liljalaakso': 'Länsinummi',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
18 'Pernon telakka': 'Perno',
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
19 }
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
20 try:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
21 start = sign.index('Kauppatori')
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
22 except ValueError:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
23 return sign
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
24 result = []
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
25 for i, place in enumerate(sign):
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
26 if i >= start:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
27 abstract_place = abstractions.get(place, place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
28 if abstract_place not in result:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
29 result.append(abstract_place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
30 else:
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
31 result.append(place)
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
32 return result
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
33 if not reitti:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
34 return ''
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
35 kunnat = {'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki'}
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
36 replacements = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
37 "Ylioppilaskylä-Itä": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
38 "Ylioppilaskylä-Länsi": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
39 "Caribia": "Ylioppilaskylä",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
40 "Jokila": "Lieto",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
41 "Piispala": "Lieto",
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
42 'Saaro': 'Ruissalo',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
43 'Silvola': 'Vahto',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
44 'Hemmola': 'Vahto',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
45 'Paasniittu': 'Ruskon keskusta',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
46 'Kahari': 'Ruskon keskusta',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
47 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
48 have_already = set()
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
49 i = 0
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
50 while i < len(reitti):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
51 if reitti[i] in replacements:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
52 reitti[i] = replacements[reitti[i]]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
53 if reitti[i] in have_already:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
54 del reitti[i]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
55 else:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
56 have_already.add(reitti[i])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
57 i += 1
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
58 prioriteetit = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
59 'Ihala': 150,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
60 'Kauppakeskus Mylly': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
61 'Kuninkoja': 80,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
62 'Moikoinen': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
63 'Raision keskusta': 100,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
64 'Friskala': 20,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
65 'Kukola': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
66 'Kaistarniemi': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
67 'Papinsaari': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
68 'Oriniemi': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
69 'Pikisaari': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
70 'Häppilä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
71 'Haarla': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
72 'Ylioppilaskylä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
73 'Halinen': 70,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
74 'Kakskerta': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
75 'Pansio': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
76 'Räntämäki': 10,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
77 'Verkahovi': 20,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
78 'Skanssi': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
79 'Vaala': 20,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
80 'Varissuo': 60,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
81 'Kohmo': 80,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
82 'Kupittaa': 70,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
83 'Kauppatori': 1e15,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
84 'Lentoasema': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
85 'Runosmäki': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
86 'Lieto': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
87 'Liedon asemanseutu': 200,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
88 'Ilmarinen': 50,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
89 'Vahto': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
90 'Ruskon keskusta': 200,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
91 'Oriketo': 30,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
92 'Harittu': 40,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
93 'Jäkärlä': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
94 'Paattinen': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
95 'Kaarinan keskusta': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
96 'Naantalin keskusta': 200,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
97 'Uittamo': 50,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
98 'Piikkiö': 100,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
99 'Paimio': 100,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
100 'Pargas': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
101 'Yli-Maaria': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
102 'Saramäki': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
103 'Tarvasjoki': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
104 'Marttila': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
105 'Koski Tl': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
106 'Katariina': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
107 'Länsikeskus': 50,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
108 'Kaanaa': 100,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
109 'Satava': 50,
6
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
110 'Suikkila': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
111 'Raunistula': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
112 'Räntämäki': 50,
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
113 'Moisio': 25,
13
55241f0e1079 Rajattu Pääskyvuoren ja Varissuon alueet ja lisätty Pääskyvuoren prioriteettia. Nyt Pääskyvuori näkyy niissä P2:n kylteissä jotka menevät Pääskyvuoreen
Teemu Piippo <teemu@hecknology.net>
parents: 12
diff changeset
114 'Pääskyvuori': 100,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
115 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
116
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
117 if 'Kauppatori' not in reitti:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
118 prioriteetit['Länsikeskus'] = prioriteetit['Skanssi'] = prioriteetit['Kauppatori']
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
119
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
120 # nimiä joista voidaan joustaa tarvittaessa
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
121 helpot_supistukset = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
122 'Raision keskusta': 'Raisio',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
123 'Ruskon keskusta': 'Rusko',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
124 'Naantalin keskusta': 'Naantali',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
125 'Kaarinan keskusta': 'Kaarina',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
126 'Liedon asemanseutu': 'Lieto as.',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
127 'Kauppakeskus Mylly': 'Mylly',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
128 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
129
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
130 # jos ei nyt millään vaan mahdu muuten...
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
131 vakavat_supistukset = {
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
132 'Kauppatori': 'Tori',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
133 'Ylioppilaskylä': 'Yo-kylä',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
134 }
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
135
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
136 lähtö = reitti[0]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
137 määränpää = reitti[-1]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
138 reitti_arvot = {}
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
139 f = lambda i: i**-0.6
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
140 jakaja = max(f(i + 1) for i in range(len(reitti)))
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
141 for i, pysäkki in enumerate(reitti):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
142 # muunna indeksi siten että myöhemmät alueet korostuvat
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
143 i = f(i + 1) / jakaja
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
144 # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
145 i *= prioriteetit.get(pysäkki, 1)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
146 reitti_arvot[pysäkki] = i
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
147 # nollaa lähtöpaikan arvo ettei se mitenkään tule kylttiin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
148 if lähtö in reitti_arvot:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
149 reitti_arvot[lähtö] = 0
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
150 # varmista että määränpää tulee kylttiin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
151 reitti_arvot[määränpää] = 1e10
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
152 # muodosta kyltti-tiedot järjestettynä reittiarvon mukaan
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
153 painot = sorted([
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
154 (pysäkki, reitti_arvot[pysäkki], i) \
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
155 for i, pysäkki in enumerate(reitti) \
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
156 if reitti_arvot[pysäkki] >= 1
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
157 ], key = lambda pysäkki: -pysäkki[1])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
158 # enintään neljä tulee kylttiin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
159 painot = painot[:4]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
160 # jos neljäs kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan neljäs pois
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
161 if len(painot) == 4 and painot[3][0] != määränpää and painot[3][1] < (4000 / len(reitti) ** 1.5):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
162 del painot[3]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
163 # sama kolmannelle
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
164 if len(painot) == 3 and painot[2][0] != määränpää and painot[2][1] < (500 / len(reitti) ** 1.5):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
165 del painot[2]
14
b4fbc92cd915 Hienosäätöä
Teemu Piippo <teemu@hecknology.net>
parents: 13
diff changeset
166 if len(painot) == 2 and painot[1][0] != määränpää and painot[1][1] < (150 / len(reitti) ** 1.5):
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
167 del painot[1]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
168 # lajitellaan painoarvot uudestaan reittijärjestykseen jotta kyltti tulee oikeinpäin
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
169 painot = sorted(painot, key = lambda paino: paino[2])
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
170 # muodostetaan kyltti..
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
171 kyltti = [paino[0] for paino in painot]
12
a47c9bde457d Abstraktoi kyltti (jolloin kauppatorin jälkeiset alueet esitetään vähemmän tarkasti)
Teemu Piippo <teemu@hecknology.net>
parents: 7
diff changeset
172 kyltti = abstract_sign(kyltti)
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
173 # supista nimet jos mahdollista
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
174 def viimeistele(kyltti, supistus_taso = 0):
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
175 if supistus_taso > 0:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
176 kyltti = [helpot_supistukset.get(paikka, paikka) for paikka in kyltti]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
177 if supistus_taso > 1:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
178 kyltti = [vakavat_supistukset.get(paikka, paikka) for paikka in kyltti]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
179 return kyltti
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
180 tulos = viimeistele(kyltti)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
181 if len(' - '.join(kyltti)) > 20:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
182 tulos = viimeistele(kyltti, supistus_taso = 1)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
183 if len(' - '.join(kyltti)) > 70:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
184 tulos = viimeistele(kyltti, supistus_taso = 2)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
185 if kokonainen:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
186 tulos = [lähtö] + tulos
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
187 lyhyt_lähtö = replacements.get(lähtö, lähtö)
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
188 if lyhyt_lähtö != tulos[-1] and helpot_supistukset.get(lyhyt_lähtö, lyhyt_lähtö) in kunnat | {'Kauppatori'} and tulos[-1] in kunnat | {'Kauppatori'}:
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
189 tulos = ['Turku' if k == 'Kauppatori' else k for k in tulos]
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
190 return tulos

mercurial