108 'Rautatieasema': 50, |
107 'Rautatieasema': 50, |
109 'Rymättylä': 50, |
108 'Rymättylä': 50, |
110 "Sauvo": 500, |
109 "Sauvo": 500, |
111 "Kemiönsaari": 500, |
110 "Kemiönsaari": 500, |
112 'Suovuori': 300, |
111 'Suovuori': 300, |
|
112 'Eerikvalla': 50, |
|
113 'Petäsmäki': 50, |
|
114 'Tortinmäki': 50, |
|
115 'Aura': 100, |
|
116 'Friskala': -1, |
113 } |
117 } |
114 |
118 |
115 if 'Kauppatori' not in reitti: |
119 if 'Kauppatori' not in reitti: |
116 priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori'] |
120 priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori'] |
117 |
121 |
118 from_place = reitti[0] |
122 from_place = reitti[0] |
119 destination = reitti[-1] |
123 destination = reitti[-1] |
120 reitti_arvot = {} |
124 reitti_arvot = {} |
121 f = lambda i: i**-0.3 |
125 f = lambda i: i**-0.3 |
122 factor = 1 / max(f(i + 1) for i in range(len(reitti))) |
126 factor = 1 / max(f(i + 1) for i in range(len(reitti))) |
|
127 while priorities.get(reitti[-1], 0) < 0: |
|
128 del reitti[-1] |
|
129 destination = reitti[-1] |
123 for i, stop in enumerate(reitti): |
130 for i, stop in enumerate(reitti): |
124 # muunna indeksi siten että myöhemmät alueet korostuvat |
131 # muunna indeksi siten että myöhemmät alueet korostuvat |
125 i = f(i + 1) * factor |
132 i = f(i + 1) * factor |
126 # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset |
133 # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset |
127 i *= priorities.get(stop, 1) |
134 i *= priorities.get(stop, 1) |
139 ], key = lambda stop: -stop[1]) |
146 ], key = lambda stop: -stop[1]) |
140 # enintään neljä tulee kylttiin |
147 # enintään neljä tulee kylttiin |
141 weights = weights[:3] |
148 weights = weights[:3] |
142 # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois |
149 # jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois |
143 try: |
150 try: |
144 if weights[2][0] != destination and weights[2][1] < (900 / length ** 0.8): |
151 if weights[2][0] != destination and weights[2][1] < (725 / length ** 0.8): |
145 del weights[2] |
152 del weights[2] |
146 except IndexError: |
153 except IndexError: |
147 pass |
154 pass |
148 try: |
155 try: |
149 if weights[1][0] != destination and weights[1][1] < (500 / length ** 1.15): |
156 if weights[1][0] != destination and weights[1][1] < (500 / length ** 1.15): |
165 del sign[i] |
172 del sign[i] |
166 if len(' - '.join(sign)) > 20: |
173 if len(' - '.join(sign)) > 20: |
167 result = finalise(sign, abbreviation_level = 1) |
174 result = finalise(sign, abbreviation_level = 1) |
168 if whole: |
175 if whole: |
169 result = [from_place] + result |
176 result = [from_place] + result |
|
177 if not result: |
|
178 result = [destination] |
170 short_from_place = replacements.get(from_place, from_place) |
179 short_from_place = replacements.get(from_place, from_place) |
171 if ( |
180 if ( |
172 short_from_place != result[-1] |
181 short_from_place != result[-1] |
173 and abbreviations.get(short_from_place, short_from_place) in eksoalueet | {'Kauppatori'} |
182 and abbreviations.get(short_from_place, short_from_place) in eksoalueet | {'Kauppatori'} |
174 and result[-1] in eksoalueet | {'Kauppatori'} |
183 and result[-1] in eksoalueet | {'Kauppatori'} |