diff -r 145b453ba8f2 -r cab8d38fe5c6 busroute.py --- a/busroute.py Tue Aug 29 17:34:09 2017 +0300 +++ b/busroute.py Tue Aug 29 21:01:57 2017 +0300 @@ -1,30 +1,43 @@ #!/usr/bin/env python3 +from configparser import ConfigParser + replacements = { - "Ylioppilaskylä-Itä": "Ylioppilaskylä", - "Ylioppilaskylä-Länsi": "Ylioppilaskylä", - "Caribia": "Ylioppilaskylä", - "Jokila": "Lieto", - "Piispala": "Lieto", - 'Saaro': 'Ruissalo', - 'Silvola': 'Vahto', - 'Hemmola': 'Vahto', - 'Paasniittu': 'Ruskon keskusta', - 'Kahari': 'Ruskon keskusta', - 'Kemiö': 'Kemiönsaari', - 'Kasnäs': 'Kemiönsaari', - 'Pernon telakka': 'Perno', + "ylioppilaskylä-itä": "ylioppilaskylä", + "ylioppilaskylä-länsi": "ylioppilaskylä", + "jokila": "lieto", + "piispala": "lieto", + 'saaro': 'ruissalo', + 'silvola': 'vahto', + 'hemmola': 'vahto', + 'paasniittu': 'ruskon keskusta', + 'kahari': 'ruskon keskusta', + 'kemiö': 'kemiönsaari', + 'kasnäs': 'kemiönsaari', + 'pernon telakka': 'perno', } # nimiä joista voidaan joustaa tarvittaessa abbreviations = { - 'Raision keskusta': 'Raisio', - 'Ruskon keskusta': 'Rusko', - 'Naantalin keskusta': 'Naantali', - 'Kaarinan keskusta': 'Kaarina', - 'Kauppakeskus Mylly': 'Mylly', + 'raision keskusta': 'raisio', + 'ruskon keskusta': 'rusko', + 'naantalin keskusta': 'naantali', + 'kaarinan keskusta': 'kaarina', + 'kauppakeskus mylly': 'mylly', } +region_info = ConfigParser() +region_info.read('regions.ini') +municipalities = set(region_info.sections()) +municipalities_per_region = {} + +for municipality in municipalities: + for region in region_info[municipality].keys(): + municipalities_per_region[region] = municipality + +for place_from, place_to in replacements.items(): + municipalities_per_region[place_to] = municipalities_per_region[place_from] + def simplify_name(name): name = replacements.get(name, name) name = abbreviations.get(name, name) @@ -34,10 +47,6 @@ length = ((trip_length / 600) + len(reitti)) / 2 if not reitti: return '' - eksoalueet = { - 'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki', - 'Kaivopuisto', - } have_already = set() i = 0 while i < len(reitti): @@ -49,77 +58,78 @@ have_already.add(reitti[i]) i += 1 priorities = { - 'Ihala': 150, - 'Kauppakeskus Mylly': 200, - 'Kuninkoja': 80, - 'Moikoinen': 80, - 'Raision keskusta': 150, - 'Kukola': 50, - 'Kaistarniemi': 50, - 'Papinsaari': 50, - 'Oriniemi': 50, - 'Pikisaari': 50, - 'Häppilä': 20, - 'Haarla': 80, - 'Ylioppilaskylä': 50, - 'Halinen': 70, - 'Kakskerta': 200, - 'Pansio': 50, - 'Räntämäki': 10, - 'Verkahovi': 20, - 'Skanssi': 200, - 'Vaala': 20, - 'Varissuo': 60, - 'Kohmo': 80, - 'Kupittaa': 70, - 'Kauppatori': 1e15, - 'Lentoasema': 50, - 'Runosmäki': 50, - 'Lieto': 100, - 'Lieto as': 200, - 'Ilmarinen': 50, - 'Vahto': 50, - 'Ruskon keskusta': 200, - 'Oriketo': 50, - 'Harittu': 40, - 'Jäkärlä': 50, - 'Paattinen': 100, - 'Kaarinan keskusta': 200, - 'Naantalin keskusta': 200, - 'Uittamo': 50, - 'Piikkiö': 100, - 'Paimio': 100, - 'Pargas': 100, - 'Nagu': 100, - 'Yli-Maaria': 70, - 'Saramäki': 50, - 'Tarvasjoki': 100, - 'Marttila': 100, - 'Koski Tl': 100, - 'Katariina': 50, - 'Länsikeskus': 50, - 'Kaanaa': 100, - 'Satava': 50, - 'Suikkila': 50, - 'Raunistula': 50, - 'Räntämäki': 50, - 'Moisio': 25, - 'Pääskyvuori': 100, - 'Rautatieasema': 50, - 'Logomo': 100, - 'Rymättylä': 50, - "Sauvo": 500, - "Kemiönsaari": 500, - 'Suovuori': 300, - 'Eerikvalla': 50, - 'Petäsmäki': 50, - 'Tortinmäki': 50, - 'Aura': 100, - 'Friskala': -1, + 'ihala': 150, + 'kauppakeskus mylly': 200, + 'kuninkoja': 80, + 'moikoinen': 80, + 'raision keskusta': 150, + 'kukola': 50, + 'kaistarniemi': 50, + 'papinsaari': 50, + 'oriniemi': 50, + 'pikisaari': 50, + 'häppilä': 20, + 'haarla': 80, + 'ylioppilaskylä': 50, + 'halinen': 70, + 'kakskerta': 200, + 'pansio': 50, + 'räntämäki': 10, + 'verkahovi': 20, + 'skanssi': 200, + 'vaala': 20, + 'varissuo': 60, + 'kohmo': 80, + 'kupittaa': 70, + 'kauppatori': 1e15, + 'lentoasema': 50, + 'runosmäki': 50, + 'lieto': 100, + 'lieto as': 200, + 'ilmarinen': 50, + 'vahto': 50, + 'ruskon keskusta': 200, + 'oriketo': 50, + 'harittu': 40, + 'jäkärlä': 50, + 'paattinen': 100, + 'kaarinan keskusta': 200, + 'naantalin keskusta': 200, + 'uittamo': 50, + 'piikkiö': 100, + 'paimio': 100, + 'pargas': 100, + 'nagu': 100, + 'yli-maaria': 70, + 'saramäki': 50, + 'tarvasjoki': 100, + 'marttila': 100, + 'koski tl': 100, + 'katariina': 50, + 'länsikeskus': 50, + 'kaanaa': 100, + 'satava': 50, + 'suikkila': 50, + 'raunistula': 50, + 'räntämäki': 50, + 'moisio': 25, + 'pääskyvuori': 100, + 'rautatieasema': 50, + 'logomo': 100, + 'rymättylä': 50, + "sauvo": 500, + "kemiönsaari": 500, + 'suovuori': 300, + 'eerikvalla': 50, + 'petäsmäki': 50, + 'tortinmäki': 50, + 'aura': 100, + 'friskala': -1, + 'merimasku': 50, } - if 'Kauppatori' not in reitti: - priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori'] + if 'kauppatori' not in reitti: + priorities['länsikeskus'] = priorities['skanssi'] = priorities['kauppatori'] from_place = reitti[0] destination = reitti[-1] @@ -160,29 +170,31 @@ except IndexError: pass # lajitellaan painoarvot uudestaan reittijärjestykseen jotta sign tulee oikeinpäin - weights = sorted(weights, key = lambda paino: paino[2]) + weights = sorted(weights, key = lambda weight_data: weight_data[2]) # muodostetaan sign.. sign = [paino[0] for paino in weights] - # supista nimet jos mahdollista - def finalise(sign, abbreviation_level = 0): - if abbreviation_level > 0: - sign = [abbreviations.get(paikka, paikka) for paikka in sign] - return sign - result = finalise(sign) - for i in range(len(sign) - 1): - if sign[i + 1].startswith(sign[i]): - del sign[i] + to_place = sign[-1] + if from_place != to_place: + municipality_from = municipalities_per_region.get(from_place) + municipality_to = municipalities_per_region.get(to_place) + if municipality_from and municipality_to and municipality_from not in ['Turku', municipality_to]: + def convert_region(region): + municipality = municipalities_per_region.get(region, region) + if municipality != municipality_from: + return municipality + else: + return region + sign = [convert_region(region) for region in sign] + # supista nimet tarvittaessa if len(' - '.join(sign)) > 20: - result = finalise(sign, abbreviation_level = 1) + sign = [abbreviations.get(place, place) for place in sign] + old_sign = sign.copy() + sign = [] + for place in old_sign: + if place not in sign: + sign.append(place) if whole: - result = [from_place] + result - if not result: - result = [destination] - short_from_place = replacements.get(from_place, from_place) - if ( - short_from_place != result[-1] - and abbreviations.get(short_from_place, short_from_place) in eksoalueet | {'Kauppatori'} - and result[-1] in eksoalueet | {'Kauppatori'} - ): - result = ['Turku' if k == 'Kauppatori' else k for k in result] - return result + sign = [from_place] + sign + if not sign: + sign = [destination] + return sign