# HG changeset patch # User Teemu Piippo # Date 1523629960 -10800 # Node ID 3b86597c5a88aad420bd494c130f81fae8ed54f0 # Parent 9139a94e540c8a73ee5b28c1683e65e3db6652d1 major update, moved the map to an osm patch diff -r 9139a94e540c -r 3b86597c5a88 Makefile --- a/Makefile Thu Mar 29 23:55:36 2018 +0300 +++ b/Makefile Fri Apr 13 17:32:40 2018 +0300 @@ -1,7 +1,7 @@ all: gtfs.zip regions-per-stop.json -regions-per-stop.json: regions.ini regions.gmp gtfs.zip - ./compute-regions.py > regions-per-stop.json || rm -f regions-per-stop.json +regions-per-stop.json: föli.osm gtfs.zip + ./compute-regions.py föli.osm > regions-per-stop.json || rm -f regions-per-stop.json gtfs.zip: wget http://data.foli.fi/gtfs/gtfs.zip diff -r 9139a94e540c -r 3b86597c5a88 buses.py --- a/buses.py Thu Mar 29 23:55:36 2018 +0300 +++ b/buses.py Fri Apr 13 17:32:40 2018 +0300 @@ -173,20 +173,18 @@ clusters_by_name = {} services_for_day = {} -def load_buses(gtfs_zip_path): +def load_buses(gtfs_zip_path, regions): global viimeinen_käyttöpäivä from zipfile import ZipFile with ZipFile(gtfs_zip_path) as gtfs_zip: - print('Ladataan linjat... ', file = stderr, end = '', flush = True) + print('Loading routes... ', file = stderr, end = '', flush = True) with gtfs_zip.open('routes.txt') as file: for row in read_csv(map(bytes.decode, file)): route = BusRoute(row) routes[route.reference] = route routes_per_id[route.id] = route - print('%d linjaa' % len(routes), file = stderr) - - print('Ladataan ajovuorot... ', file = stderr, end = '', flush = True) - + print('%d routes' % len(routes), file = stderr) + print('Loading trips... ', file = stderr, end = '', flush = True) shape_distances = {} try: with gtfs_zip.open('shapes.txt') as file: @@ -212,14 +210,14 @@ print('Trip %s already exists' % trip.name) else: all_trips[trip.name] = trip - print('%d ajoa' % len(all_trips), file = stderr) + print('%d trips' % len(all_trips), file = stderr) def read_date(teksti): return date(int(teksti[:4]), int(teksti[4:6]), int(teksti[6:])) def read_time(teksti): - tunti, minuutti, sekunti = map(int, teksti.split(':')) - return timedelta(hours = tunti, minutes = minuutti, seconds = sekunti) + hour, minute, second = map(int, teksti.split(':')) + return timedelta(hours = hour, minutes = minute, seconds = second) print('Ladataan päiväykset... ', file = stderr, flush = True) @@ -266,10 +264,10 @@ if day in service.dates: yield service - print('Ladataan pysäkit... ', file = stderr, end = '', flush = True) + print('Loading stops... ', file = stderr, end = '', flush = True) with gtfs_zip.open('stops.txt') as file: for row in read_csv(map(bytes.decode, file)): - location = Sijainti(float(row['stop_lat']), float(row['stop_lon'])) + location = Location(float(row['stop_lat']), float(row['stop_lon'])) stop = BusStop( reference = row['stop_id'], name = row['stop_name'], @@ -287,13 +285,12 @@ for bus_stop in bus_stops.values(): if not hasattr(bus_stop, 'region'): bus_stop.region = None - print('%d pysäkkiä' % len(bus_stops), file = stderr) - + print('%d stops' % len(bus_stops), file = stderr) class BusStopCluster: def __init__(self): self.stops = set() - self._center = None + self.cached_center = None self.name = None @property def url_name(self): @@ -302,26 +299,26 @@ assert not stop.cluster stop.cluster = self self.stops.add(stop) - self._center = None + self.cached_center = None @property def center(self): - if not self._center: + if not self.cached_center: if self.stops: from statistics import median pointtype = type(next(iter(self.stops)).location) - self._center = pointtype( + self.cached_center = pointtype( median(stop.location.x for stop in self.stops), median(stop.location.y for stop in self.stops), ) else: raise ValueError('an empty cluster has no center point') - return self._center + return self.cached_center def merge(self, other): for bus_stop in other.stops: bus_stop.cluster = self self.stops |= other.stops other.stops = set() - other._center = None + other.cached_center = None def schedule(self, *, max_amount = 50): result = [] for stop in self.stops: @@ -345,7 +342,7 @@ stops_to_cluster = {bus_stop} # etsi pysäkin samannimiset vastaparit for pair_candidate in bus_stops_by_name[bus_stop.name]: - distance = pair_candidate.location.etäisyys(bus_stop.location) + distance = pair_candidate.location.distance(bus_stop.location) if pair_candidate is not bus_stop and distance <= 0.4: stops_to_cluster.add(pair_candidate) for stop_to_cluster in stops_to_cluster: @@ -368,7 +365,7 @@ possibilities = set() for cluster in all_clusters: if cluster is not bus_stop.cluster: - distance = cluster.center.etäisyys(bus_stop.location) + distance = cluster.center.distance(bus_stop.location) if distance <= 0.4: possibilities.add((distance, cluster)) if possibilities: @@ -385,27 +382,24 @@ def name_clusters(): from collections import defaultdict - from pprint import pprint clusters_per_name = defaultdict(set) for cluster in all_clusters: name_representing_stop = min((len(stop.reference), stop.reference, stop) for stop in cluster.stops)[2] clusters_per_name[name_representing_stop.name].add(cluster) for name, clusters in clusters_per_name.items(): if len(clusters) == 1: - # Ryhmä on ainoa jolla on varaus tälle nimelle. Sen kuin vaan. + # Simple case: this cluster is the only one that wants this name. next(iter(clusters)).name = name else: if profile['regions']['use-regions']: - # Olisiko kaikki klusterit eri alueilla? + # Find out if all clusters are in different areas common_regions = shared_elements_in_n_sets({stop.region for stop in cluster.stops} for cluster in clusters) - # Esitys: ryhmä -> ne alueet jotka ovat tälle ryhmälle ainutlaatuisia + # Proposal: cluster -> the areas unique to the cluster proposal = { cluster: {stop.region for stop in cluster.stops} - common_regions - {None} for cluster in clusters } - # Jos enintään yksi klusteri tässä esityksessä on kokonaan ilman omaa aluetta, jolla se voisi eritellä, - # niin nimetään klusterit näiden alueiden mukaan. - # Se klusteri jolla ei ole omaa aluetta (jos on) jätetään ilman aluepäätettä. + # If at most one cluster is without its own unique region, name the others by region and this one without any. if sum([1 for unique_areas in proposal.values() if not unique_areas]) <= 1: for cluster, unique_areas in proposal.items(): individual_cluster_name = name @@ -413,7 +407,7 @@ individual_cluster_name += ' (' + min(unique_areas) + ')' cluster.name = individual_cluster_name break - # Typerä reunatapaus. Indeksoidaan numeroin... + # If all else fails, just number them. for n, (_, cluster) in enumerate(sorted( min((stop.reference.lower(), cluster) for stop in cluster.stops) for cluster in clusters @@ -421,7 +415,7 @@ individual_cluster_name = name + '-' + str(n) cluster.name = individual_cluster_name - print('Ryhmitellään pysäkit...') + print('Clustering bus stops...') cluster_bus_stops() name_clusters() @@ -431,7 +425,7 @@ else: clusters_by_name[cluster.url_name] = cluster - print('Ladataan aikataulut... ', end = '', flush = True, file = stderr) + print('Loading schedules... ', end = '', flush = True, file = stderr) with gtfs_zip.open('stop_times.txt') as file: row_count = sum(line.count(b'\n') for line in file) with gtfs_zip.open('stop_times.txt') as file: @@ -448,8 +442,8 @@ stop.involved_trips.add(trip) progress += 1 if progress % 1000 == 0: - print('\rLadataan aikataulut... %.1f%%' % (progress * 100 / row_count), end = ' ', file = stderr) - print('\rLadataan aikataulut... ladattu', file = stderr) + print('\rLoading schedules... %.1f%%' % (progress * 100 / row_count), end = ' ', file = stderr) + print('\rLoading schedules... complete', file = stderr) for trip in all_trips.values(): from busroute import simplify_name @@ -502,3 +496,6 @@ if __name__ == '__main__': profile.read('profiles/föli.ini') load_buses('gtfs.zip') + import busroute + from regions import parse_regions + busroute.regions = parse_regions('föli.osm') diff -r 9139a94e540c -r 3b86597c5a88 busroute.py --- a/busroute.py Thu Mar 29 23:55:36 2018 +0300 +++ b/busroute.py Fri Apr 13 17:32:40 2018 +0300 @@ -1,38 +1,42 @@ #!/usr/bin/env python3 -from configparser import ConfigParser -from math import inf from misc import profile -region_info = ConfigParser() -region_info.read('regions.ini') +regions = {} -def simplify_name(name): - return profile['replacements'].get(name, name) +def priority(region_name): + if region_name in regions: + return float(regions[region_name]['priority']) + else: + return 0 -def greatly_simplify_name(name): - return profile['more replacements'].get(name, simplify_name(name)) +def simplify_name(region_name): + region = regions.get(region_name) + if region: + return region.get('short_name', region_name) + else: + return region_name def reduce_schedule(route, trip_length, whole = False, format = 'medium'): - priorities = profile['priorities'] length = ((trip_length / 600) * 3 + len(route) * 2) / 5 have_already = set() i = 0 if not route: return '' while i < len(route): - if route[i] in profile['replacements']: - route[i] = profile['replacements'][route[i]] - if route[i] in have_already: + region = regions.get(route[i]) + if region and region.get('replacement'): + route[i] = region['replacement'] + if not route[i] or route[i] in have_already: del route[i] else: have_already.add(route[i]) i += 1 from_place = route[0] destination = route[-1] - reitti_arvot = {} + route_weights = {} f = lambda i: i**-0.3 factor = 1 / max(f(i + 1) for i in range(len(route))) - while float(priorities.get(route[-1], 0)) < 0: + while priority(route[-1]) < 0: del route[-1] if not route: return '' @@ -41,18 +45,18 @@ # muunna indeksi siten että myöhemmät alueet korostuvat i = f(i + 1) * factor # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset - i *= float(priorities.get(stop, 1)) - reitti_arvot[stop] = i + i *= priority(stop) + route_weights[stop] = i # nollaa lähtöpaikan arvo ettei se mitenkään tule kylttiin - if from_place in reitti_arvot: - reitti_arvot[from_place] = 0 + if from_place in route_weights: + route_weights[from_place] = 0 # varmista että destination tulee kylttiin - reitti_arvot[destination] = 1e10 + route_weights[destination] = 1e10 # muodosta sign-tiedot järjestettynä reittiarvon mukaan weights = sorted([ - (stop, reitti_arvot[stop], i) \ + (stop, route_weights[stop], i) \ for i, stop in enumerate(route) \ - if reitti_arvot[stop] >= 1 + if route_weights[stop] >= 1 ], key = lambda stop: -stop[1]) if format == 'long': weights = weights[:4] diff -r 9139a94e540c -r 3b86597c5a88 compute-regions.py --- a/compute-regions.py Thu Mar 29 23:55:36 2018 +0300 +++ b/compute-regions.py Fri Apr 13 17:32:40 2018 +0300 @@ -4,67 +4,33 @@ from geometry import * from zipfile import ZipFile from configparser import ConfigParser +from regions import parse_regions representatives = {} -region_data = ConfigParser() -region_data.read('regions.ini') - -for section in region_data.sections(): - for key, value in region_data[section].items(): - representatives[key] = value - -with open('regions.gmp') as file: - data = file.read().split('@') - +regions = parse_regions(sys.argv[1]) bus_stops = {} with ZipFile('gtfs.zip') as archive: with archive.open('stops.txt') as file: for row in read_csv(map(bytes.decode, file)): - location = Sijainti(float(row['stop_lat']), float(row['stop_lon'])) + location = Location(float(row['stop_lat']), float(row['stop_lon'])) reference = row['stop_id'] bus_stops[reference] = location -district_shapes = [] +region_shapes = [] districts = {} - -for polygon in data[1].splitlines(): - polygon = polygon.split('^') - coordinates = [] - for point in polygon[3].split('~'): - x, y = point.split(',') - coordinates.append(Sijainti(float(x), float(y))) - district_shapes.append(Monikulmio(*coordinates)) - if polygon[0] != 'undefined': - districts[polygon[0]] = district_shapes[-1] - -bus_stop_districts = {} - -for name, stop_id in representatives.items(): - if stop_id: - if stop_id not in bus_stops: - print('Representative %r for region %r not found in schedule' % (stop_id, name), file = sys.stderr) - else: - for district_shape in district_shapes: - if district_shape.sisältää_pisteen(bus_stops[stop_id]): - assert name not in districts - districts[name] = district_shape - district_shapes.remove(district_shape) - bus_stop_districts[stop_id] = name - break - else: - print('Cannot find a shape for %r' % name, file = sys.stderr) +bus_stop_regions = {} for stop_id, stop_position in bus_stops.items(): - for district, shape in districts.items(): - if shape.sisältää_pisteen(stop_position): - bus_stop_districts[stop_id] = district + for region in regions.values(): + if region['shape'].contains_point(stop_position): + bus_stop_regions[stop_id] = region['name'] break else: - bus_stop_districts[stop_id] = None + bus_stop_regions[stop_id] = None -covered = sum(1 if value else 0 for value in bus_stop_districts.values()) +covered = sum(1 if value else 0 for value in bus_stop_regions.values()) total = len(bus_stops) print('%.1f%% bus stops covered.' % (covered * 100 / total), file = sys.stderr) -json.dump(bus_stop_districts, sys.stdout, indent = 2) +json.dump(bus_stop_regions, sys.stdout, indent = 2) diff -r 9139a94e540c -r 3b86597c5a88 föli.osm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/föli.osm Fri Apr 13 17:32:40 2018 +0300 @@ -0,0 +1,6191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 9139a94e540c -r 3b86597c5a88 geometry.py --- a/geometry.py Thu Mar 29 23:55:36 2018 +0300 +++ b/geometry.py Fri Apr 13 17:32:40 2018 +0300 @@ -1,124 +1,124 @@ from math import sqrt, hypot, radians, sin, cos, atan2 -class Sijainti: - def __init__(self, leveys, pituus): - self.leveys, self.pituus = leveys, pituus - def etäisyys(tämä, toinen): +class Location: + def __init__(self, latitude, longitude): + self.latitude, self.longitude = latitude, longitude + def distance(self, other): # https://stackoverflow.com/a/365853 - a = sin(radians(tämä.leveys - toinen.leveys) / 2) ** 2 - a += sin(radians(tämä.pituus - toinen.pituus) / 2) ** 2 * cos(radians(tämä.leveys)) * cos(radians(toinen.leveys)) + a = sin(radians(self.latitude - other.latitude) / 2) ** 2 + a += sin(radians(self.longitude - other.longitude) / 2) ** 2 * cos(radians(self.latitude)) * cos(radians(other.latitude)) return 6371 * 2 * atan2(sqrt(a), sqrt(1 - a)) def __repr__(self): - return '%s(%r, %r)' % (type(self).__name__, self.leveys, self.pituus) + return '%s(%r, %r)' % (type(self).__name__, self.latitude, self.longitude) def __str__(self): - return '%.5f, %.5f' % (self.leveys, self.pituus) + return '%.5f, %.5f' % (self.latitude, self.longitude) @property def x(self): - return self.leveys + return self.latitude @property def y(self): - return self.pituus + return self.longitude @property def link_to_map(self): - return 'http://www.openstreetmap.org/#map=19/%f/%f' % (self.leveys, self.pituus) + return 'http://www.openstreetmap.org/#map=19/%f/%f' % (self.latitude, self.longitude) -class Rengas: - def __init__(tämä, säiliö): - tämä.säiliö = säiliö - def __getitem__(tämä, indeksi): - while indeksi < 0: - indeksi += len(tämä.säiliö) - while indeksi >= len(tämä.säiliö): - indeksi -= len(tämä.säiliö) - return tämä.säiliö[indeksi] - def __iter__(tämä): - return iter(tämä.säiliö) - def __len__(tämä): - return len(tämä.säiliö) +class Ring: + def __init__(self, container): + self.container = container + def __getitem__(self, i): + while i < 0: + i += len(self.container) + while i >= len(self.container): + i -= len(self.container) + return self.container[i] + def __iter__(self): + return iter(self.container) + def __len__(self): + return len(self.container) -class Monikulmio: - def __init__(self, *pisteet): - self.pisteet = pisteet +class Polygon: + def __init__(self, *points): + self.points = points def __repr__(self): - return '%s(%s)' % (type(self).__name__, ', '.join(map(repr, self.pisteet))) - def pinta_ala(self): - rengas = Rengas(self.pisteet) + return '%s(%s)' % (type(self).__name__, ', '.join(map(repr, self.points))) + def area(self): + ring = Ring(self.points) return sum( - rengas[i].x * rengas[i + 1].y - rengas[i + 1].x * rengas[i].y - for i in range(len(rengas)) + ring[i].x * ring[i + 1].y - ring[i + 1].x * ring[i].y + for i in range(len(ring)) ) / 2 - def piiri(self): - rengas = Rengas(self.pisteet) + def circumference(self): + ring = Ring(self.points) return sum( - sqrt((rengas[i + 1].x - rengas[i].x)**2 + (rengas[i + 1].y - rengas[i].y)**2) - for i in range(len(rengas)) + sqrt((ring[i + 1].x - ring[i].x)**2 + (ring[i + 1].y - ring[i].y)**2) + for i in range(len(ring)) ) - def painopiste(self): - rengas = Rengas(self.pisteet) + def centroid(self): + ring = Ring(self.points) x = sum( - (rengas[i].x + rengas[i + 1].x) * (rengas[i].x * rengas[i + 1].y - rengas[i + 1].x * rengas[i].y) - for i in range(len(rengas)) - ) / 6 / self.pinta_ala() + (ring[i].x + ring[i + 1].x) * (ring[i].x * ring[i + 1].y - ring[i + 1].x * ring[i].y) + for i in range(len(ring)) + ) / 6 / self.area() y = sum( - (rengas[i].y + rengas[i + 1].y) * (rengas[i].x * rengas[i + 1].y - rengas[i + 1].x * rengas[i].y) - for i in range(len(rengas)) - ) / 6 / self.pinta_ala() - return self.pistetyyppi()(x, y) - def pistetyyppi(self): - if len(self.pisteet): - return type(self.pisteet[0]) + (ring[i].y + ring[i + 1].y) * (ring[i].x * ring[i + 1].y - ring[i + 1].x * ring[i].y) + for i in range(len(ring)) + ) / 6 / self.area() + return self.point_type()(x, y) + def point_type(self): + if len(self.points): + return type(self.points[0]) else: - return Piste - def piiri_janat(self): - rengas = Rengas(self.pisteet) - for i in range(len(rengas)): - yield Jana(rengas[i], rengas[i + 1]) - def sisältää_pisteen(self, piste): - ulkopiste = self.pistetyyppi()( - min(piste.x for piste in self.pisteet) - 1, - min(piste.y for piste in self.pisteet) - 1 + return Point + def segments(self): + ring = Ring(self.points) + for i in range(len(ring)): + yield LineSegment(ring[i], ring[i + 1]) + def contains_point(self, point): + outer_point = self.point_type()( + min(point.x for point in self.points) - 1, + min(point.y for point in self.points) - 1 ) - ulkojana = Jana(piste, ulkopiste) - leikkauksia = 0 - for jana in self.piiri_janat(): - if jana.leikkauspiste(ulkojana) is not None: - leikkauksia += 1 - return bool(leikkauksia & 1) + outer_segment = LineSegment(point, outer_point) + intersections = 0 + for segment in self.segments(): + if segment.intersection(outer_segment) is not None: + intersections += 1 + return bool(intersections & 1) -class Jana: - def __init__(self, alkupiste, päätepiste): - self.alkupiste, self.päätepiste = alkupiste, päätepiste +class LineSegment: + def __init__(self, p1, p2): + self.p1, self.p2 = p1, p2 def __repr__(self): - return 'Jana(%r, %r)' % (self.alkupiste, self.päätepiste) - def pituus(self): - return hypot(self.alkupiste.x - self.päätepiste.x, self.alkupiste.y - self.päätepiste.y) - def leikkauspiste(tämä, toinen): - pistetyyppi = type(tämä.alkupiste) - x = (tämä.alkupiste.x, tämä.päätepiste.x, toinen.alkupiste.x, toinen.päätepiste.x) - y = (tämä.alkupiste.y, tämä.päätepiste.y, toinen.alkupiste.y, toinen.päätepiste.y) + return 'LineSegment(%r, %r)' % (self.p1, self.p2) + def length(self): + return hypot(self.p1.x - self.p2.x, self.p1.y - self.p2.y) + def intersection(self, other): + point_type = type(self.p1) + x = (self.p1.x, self.p2.x, other.p1.x, other.p2.x) + y = (self.p1.y, self.p2.y, other.p1.y, other.p2.y) try: - jakaja = (x[0] - x[1]) * (y[2] - y[3]) - (y[0] - y[1]) * (x[2] - x[3]) - Px = ((x[0] * y[1] - y[0] * x[1]) * (x[2] - x[3]) - (x[0] - x[1]) * (x[2] * y[3] - y[2] * x[3])) / jakaja - Py = ((x[0] * y[1] - y[0] * x[1]) * (y[2] - y[3]) - (y[0] - y[1]) * (x[2] * y[3] - y[2] * x[3])) / jakaja - etäisyys = lambda n: (Px - x[n]) ** 2 + (Py - y[n]) ** 2 - if max(etäisyys(0), etäisyys(1)) <= tämä.pituus() ** 2 and max(etäisyys(2), etäisyys(3)) <= toinen.pituus() ** 2: - return pistetyyppi(Px, Py) + denominator = (x[0] - x[1]) * (y[2] - y[3]) - (y[0] - y[1]) * (x[2] - x[3]) + Px = ((x[0] * y[1] - y[0] * x[1]) * (x[2] - x[3]) - (x[0] - x[1]) * (x[2] * y[3] - y[2] * x[3])) / denominator + Py = ((x[0] * y[1] - y[0] * x[1]) * (y[2] - y[3]) - (y[0] - y[1]) * (x[2] * y[3] - y[2] * x[3])) / denominator + distance = lambda n: hypot(Px - x[n], Py - y[n]) + if max(distance(0), distance(1)) <= self.length() and max(distance(2), distance(3)) <= other.length(): + return point_type(Px, Py) else: return None except ZeroDivisionError: return None -class Piste: +class Point: def __init__(self, x, y): self.x, self.y = x, y def __repr__(self): - return 'Piste(%r, %r)' % (self.x, self.y) + return 'Point(%r, %r)' % (self.x, self.y) -A = Monikulmio( - Piste(2,3), - Piste(1,1), - Piste(4,0), - Piste(6,2), - Piste(4,4)) -L1 = Jana(Piste(1, 1), Piste(-1, 5)) -L2 = Jana(Piste(1, 5), Piste(5, 1)) +A = Polygon( + Point(2,3), + Point(1,1), + Point(4,0), + Point(6,2), + Point(4,4)) +L1 = LineSegment(Point(1, 1), Point(-1, 5)) +L2 = LineSegment(Point(1, 5), Point(5, 1)) diff -r 9139a94e540c -r 3b86597c5a88 profiles/föli.ini --- a/profiles/föli.ini Thu Mar 29 23:55:36 2018 +0300 +++ b/profiles/föli.ini Fri Apr 13 17:32:40 2018 +0300 @@ -6,280 +6,4 @@ [regions] use-regions = 1 - -[priorities] -ihala = 150 -mylly = 200 -kuninkoja = 150 -moikoinen = 150 -raisio = 150 -kukola = 50 -kaistarniemi = 75 -papinsaari = 80 -oriniemi = 50 -pikisaari = 50 -häppilä = 20 -haarla = 20 -ylioppilaskylä = 50 -halinen = 70 -kakskerta = 200 -pansio = 50 -räntämäki = 25 -verkahovi = 25 -skanssi = 200 -vaala = 20 -varissuo = 60 -kohmo = 80 -kupittaa = 70 -kupittaa as = 120 -kauppatori = 1e6 -lentoasema = 50 -runosmäki = 50 -lieto = 100 -lieto as = 200 -ilmarinen = 50 -vahto = 50 -rusko = 200 -oriketo = 50 -harittu = 40 -jäkärlä = 150 -moisio = 150 -paattinen = 25 -kaarina = 200 -naantali = 200 -uittamo = 50 -piikkiö = 100 -paimio = 100 -pargas = 100 -nagu = 100 -länsikeskus = 50 -yli-maaria = 60 -saramäki = 50 -tarvasjoki = 100 -marttila = 100 -koski tl = 100 -katariina = 50 -kaanaa = 100 -satava = 50 -suikkila = 50 -raunistula = 50 -pääskyvuori = 100 -logomo = 25 -rymättylä = 100 -sauvo = 500 -kemiönsaari = 500 -suovuori = 300 -erikvalla = 50 -petäsmäki = 50 -tortinmäki = 50 -aura = 100 -friskala = -1 -majamäki = -1 -merimasku = 50 -turkuhalli = 100 -messukeskus = 100 -naantalin pikatie = 25 -helsingin valtatie = 20 -lauste = 25 -pompo = 20 -loukinainen = 20 -tuorla = 20 -satakunnantie = 20 -hepokulta = 20 -nättinummi = 20 -nummenmäki = 10 -kurala = 10 -itäharju = 25 -vasaramäki = 25 -pohjola = 25 -iso-heikkilä = 25 -patterinhaka = 25 -illoinen = 50 -luolavuori = 20 -mäntymäki = 20 -kurjenmäki = 20 -kuusisto = 20 -rautatieasema = 20 -majakkaranta = 20 -itäranta = 20 -martti = 20 -vähä-heikkilä = 20 -särkilahti = 20 -urusvuori = 20 -port arthur = 50 -brinkhall = 100 -myllykylä = 100 -harjattula = 200 -kansanpuisto = 100 - -[replacements] -ylioppilaskylä-itä = ylioppilaskylä -ylioppilaskylä-länsi = ylioppilaskylä -jokila = lieto -piispala = lieto -saaro = ruissalo -silvola = vahto -hemmola = vahto -paasniittu = rusko -kahari = rusko -kemiö = kemiönsaari -kasnäs = kemiönsaari -papinsaari = kaistarniemi -pernon telakka = perno -paimion sairaala = paimio -hanhijoki = paimio - -[more replacements] -harjattula = kakskerta -brinkhall = kakskerta -myllykylä = kakskerta -hylkilahti = kakskerta -armonlaakso = kakskerta -laalahti = kakskerta -kupittaa as = kupittaa -vaala = lauste - -[tr:fi:places] -korpo = Korppoo -pargas = Parainen -nagu = Nauvo -pärnäs = Pärnäinen -port arthur = Portsa -lentoasema = Lentoasema -satama = Satama -kauppakeskus mylly = Mylly -kaarinan keskusta = Kaarina -naantalin keskusta = Naantali -raision keskusta = Raisio -yli-maaria = Yli-Maaria -iso-heikkilä = Iso-Heikkilä -koski tl = Koski Tl - -[tr:fi:suffix-places] -naantalin pikatie = pikatietä -helsingin valtatie = moottoritietä -kansanpuisto = Kansanpuistoon - -[tr:en:places] -satama = Harbor -kauppatori = City centre -lentoasema = Airport -ylioppilaskylä = Student village -kauppakeskus mylly = Mylly -raision keskusta = Raisio -naantalin keskusta = Naantali -linja-autoasema = Bus station -rautatieasema = Railway station -kaarinan keskusta = Kaarina -pernon telakka = Perno shipyard -kasarmialue = Barracks area -kupittaa as = Kupittaa station - -[tr:en:suffix-places] -naantalin pikatie = by expressway -helsingin valtatie = by motorway -kansanpuisto = to Kansanpuisto - -[tr:sv:places] -artukainen = Artukais -haarla = Harlax -halinen = Hallis -härkämäki = Oxbacka -illoinen = Illois -ilpoinen = Ilpois -itäharju = Österås -itäranta = Öststranden -ispoinen = Ispois -kaarina = S:t Karins -kaarinan keskusta = S:t Karins -kaistarniemi = Kaistarudden -katariina = Katarina -kauppatori = Salutorget -kasarmialue = Kasernen -kerttuli = Gertrudsbacken -koivula = Björkas -konserttitalo = Konserthuset -koroinen = Korois -kuninkoja = Kungsbäcken -kupittaa = Kuppis -kupittaa as = Kuppis stn -kupittaanpuisto = Kuppisparken -kurala (naantali) = Kurala -kurjenmäki = Tranbacken -kuuvuori = Månberget -iso-heikkilä = Storheikkilä -isokylä = Storby -lauste = Laustis -lauttaranta = Färjstranden -lentoasema = Flygplatsen -liljalaakso = Liljedalen -linja-autoasema = Linjebilstationen -littoinen = Littois -länsiranta = Väststranden -länsikeskus = Västcentrum -majakkaranta = Fyrstranden -metsämäki = Skogsbacka -messukeskus = Mässcentrum -mäntymäki = Tallbacka -moikoinen = Moikois -naantali = Nådendal -naantalin keskusta = Nådendal centrum -nummenmäki = Nummis -oriniemi = Hingstudden -paattinen = Patis -papinsaari = Prästholmen -patterinhaka = Batterihagen -pernon telakka = Perno varvet -pikisaari = Beckholmen -pitkämäki = Långbacka -pläkkikaupunki = Bleckstaden -pohjola = Norrstan -puutori = Trätorget -pääskyvuori = Svalberga -raisio = Reso -raision keskusta = Reso centrum -rautatieasema = Järnvägsstation -ruissalo = Runsala -runosmäki = Runosbacken -ruskon keskusta = Rusko centrum -rymättylä = Rimito -saramäki = Starrbacka -satakunnantie = Satakuntavägen -satama = Hamnen -skanssi = Skansen -toijainen = Toijais -tuomiokirkkotori = Domkyrkotorget -tyks = ÅUCS -urusvuori = Urusberget -vaala = Svalas -vanha suurtori = Gamla Stortorget -vasaramäki = Hammarbacka -varissuo = Kråkkärret -vii kaupunginosa = VII stadsdelen -vähä-heikkilä = Lillheikkilä -yli-maaria = Övre S:t Marie -yliopisto = Universitet -ylioppilaskylä = Studentbyn -ylioppilaskylä-länsi = Västra Studentbyn -ylioppilaskylä-itä = Östra Studentbyn -lieto as = Lundo stn -kauppakeskus mylly = Mylly -turku = Åbo -piikkiö = Pikis -paimio = Pemar -paimion sairaala = Pemar sjukhus -lieto = Lundo -koski tl = Koskis -marttila = S:t Mårtens -kemiö = Kimito -kemiönsaari = Kimitoön -sauvo = Sagu -turkuhalli = Åbohallen -naantalin pikatie = Nådendal snabbvägen -tammivalkama = Ekvalla -kansanpuisto = Folkparken - -[tr:sv:suffix-places] -naantalin pikatie = på snabbvägen -helsingin valtatie = på motorvägen -kansanpuisto = till Folkparken +osm-path = föli.osm diff -r 9139a94e540c -r 3b86597c5a88 regions-per-stop.ini --- a/regions-per-stop.ini Thu Mar 29 23:55:36 2018 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3083 +0,0 @@ -{ - "1190": "kurala", - "2123": "kuninkoja", - "3129": null, - "6303": "kuusisto", - "294": "it\u00e4ranta", - "6063": "kes\u00e4m\u00e4ki", - "5061": null, - "6200": "kaarinan keskusta", - "128": "lauttaranta", - "5065": "ilmarinen", - "726": "pansio", - "3097": null, - "4026": "ruskon keskusta", - "3021": "viiala", - "3088": "velkua", - "8930": "kemi\u00f6", - "1054": "k\u00e4h\u00e4ri", - "1170": "paattinen", - "762": "jyrkk\u00e4l\u00e4", - "3130": null, - "478": null, - "1569": "runosm\u00e4ki", - "1134": "paattinen", - "910": null, - "5474": "loukinainen", - "560": "ruissalo", - "1737": "haarla", - "1074": "yli-maaria", - "3174": "airismaa", - "1289": "kakskerta", - "5107": "lieto as", - "5104": "lieto as", - "3094": "velkua", - "6627": null, - "6711": null, - "990": "luolavuori", - "1045": "kupittaa", - "791": "piispanristi", - "5189": null, - "1124": "paattinen", - "1174": "paattinen", - "8028": "aura", - "3213": null, - "147": null, - "1256": "kakskerta", - "6737": null, - "744": "perno", - "3261": "merimasku", - "843": "it\u00e4harju", - "187": "k\u00e4rs\u00e4m\u00e4ki", - "8135": "pargas", - "3054": "merimasku", - "3124": null, - "3011": "naantalin keskusta", - "3312": "suovuori", - "1798": "vii kaupunginosa", - "419": null, - "3085": "velkua", - "6731": null, - "5408": null, - "1022": "k\u00e4h\u00e4ri", - "8963": "korpo", - "3002": null, - "5159": null, - "3209": null, - "6077": null, - "1353": "it\u00e4ranta", - "3206": null, - "1728": "maanp\u00e4\u00e4", - "6273": null, - "6656": "hanhijoki", - "4091": null, - "797": "it\u00e4ranta", - "1688": "kurjenm\u00e4ki", - "312": "oriketo", - "821": "n\u00e4ttinummi", - "1783": "yli-maaria", - "145": null, - "218": "kirkkotien terveyskeskus", - "668": "pansio", - "4016": "ruskon keskusta", - "884": "varissuo", - "892": "suikkila", - "3087": "velkua", - "1529": "l\u00e4nsikeskus", - "8920": null, - "434": null, - "1678": null, - "1759": "kakskerta", - "3061": null, - "6379": "littoinen", - "2090": "mets\u00e4aro", - "3293": null, - "248": "saram\u00e4ki", - "822": "l\u00e4nsikeskus", - "3240": "porhonkallio", - "1607": "yliopisto", - "6129": "piispanristi", - "1294": "kakskerta", - "6051": null, - "1107": "saram\u00e4ki", - "204": null, - "2026": "paikkari", - "6753": null, - "599": "ispoinen", - "1457": "skanssi", - "1813": null, - "466": "luolavuori", - "3139": "poikko", - "1568": "runosm\u00e4ki", - "87": "moikoinen", - "1431": "papinsaari", - "91": "moikoinen", - "1109": "saram\u00e4ki", - "415": "oriniemi", - "429": "pikisaari", - "6265": null, - "1140": "paattinen", - "3187": null, - "1557": "l\u00e4nsinummi", - "1724": "moikoinen", - "6144": null, - "6062": "kes\u00e4m\u00e4ki", - "2133": "tikanmaa", - "85": "lauttaranta", - "3113": null, - "6031": null, - "5138": "lieto", - "643": null, - "5246": "piispala", - "2017": null, - "6392": null, - "1101": null, - "1689": "luostarinm\u00e4ki", - "2134": "tikanmaa", - "6232": "puosta", - "6025": "kaarinan keskusta", - "6363": "littoinen", - "1191": null, - "1647": "kuuvuori", - "833": "varissuo", - "6676": null, - "592": "liljalaakso", - "3210": null, - "5078": null, - "1618": "r\u00e4nt\u00e4m\u00e4ki", - "5017": "vieru", - "1473": "peltola", - "3162": null, - "1013": "runosm\u00e4ki", - "1714": "peltola", - "1671": "it\u00e4harju", - "1037": "vasaram\u00e4ki", - "5312": null, - "8102": "kirjala", - "241": "saram\u00e4ki", - "3280": null, - "1794": "saaro", - "1128": "paattinen", - "5113": "lieto as", - "6142": null, - "6663": "paimion sairaala", - "3285": "rym\u00e4ttyl\u00e4", - "896": "muhkuri", - "6618": "paimio", - "8006": null, - "633": "urusvuori", - "202": null, - "293": "moikoinen", - "5066": "ilmarinen", - "8900": "salo", - "234": "oriketo", - "1822": null, - "4054": null, - "129": "lauttaranta", - "3254": null, - "352": "papinsaari", - "827": "ter\u00e4srautela", - "1262": "kakskerta", - "471": null, - "1820": null, - "6373": "littoinen", - "79": "satama", - "619": "k\u00e4rs\u00e4m\u00e4ki", - "1608": null, - "1707": null, - "3207": null, - "3032": null, - "36": null, - "6221": "kuusisto", - "6139": null, - "1690": "luostarinm\u00e4ki", - "322": "illoinen", - "6632": null, - "546": "ruissalo", - "44": null, - "5115": "lieto as", - "637": "m\u00e4ntym\u00e4ki", - "3159": null, - "2010": "raision keskusta", - "196": "k\u00e4rs\u00e4m\u00e4ki", - "5118": null, - "2065": null, - "1241": "kakskerta", - "414": "oriniemi", - "1216": "luolavuori", - "1220": null, - "5229": null, - "1765": "kakskerta", - "418": null, - "430": null, - "984": "runosm\u00e4ki", - "2098": "ihala", - "1028": "pohjola", - "526": "iso-heikkil\u00e4", - "1597": null, - "713": null, - "676": "pansio", - "1638": "nummenm\u00e4ki", - "70": "haarla", - "1015": "runosm\u00e4ki", - "6097": "littoinen", - "75": "martti", - "3161": null, - "6034": "kaarinan keskusta", - "151": "rautatieasema", - "6237": "piikki\u00f6", - "1146": "tortinm\u00e4ki", - "6016": null, - "3062": null, - "2151": "maksla", - "5129": null, - "2023": "tikanmaa", - "6005": null, - "4005": null, - "6103": null, - "3075": "velkua", - "1729": "maanp\u00e4\u00e4", - "6357": null, - "5028": "lieto", - "6256": null, - "696": "lauste", - "3304": "aaslaluoto", - "621": "k\u00e4rs\u00e4m\u00e4ki", - "8": "port arthur", - "5274": "lieto as", - "3009": "viluluoto", - "5147": null, - "1712": null, - "635": "m\u00e4ntym\u00e4ki", - "5214": null, - "2066": "pet\u00e4sm\u00e4ki", - "2045": "raision keskusta", - "2052": "raision keskusta", - "1180": null, - "393": "friskala", - "1009": "patterinhaka", - "1793": "saaro", - "3221": "naantalin keskusta", - "342": "kupittaa", - "448": "ylioppilaskyl\u00e4-it\u00e4", - "5021": "lieto", - "5168": null, - "1522": "artukainen", - "1103": "j\u00e4k\u00e4rl\u00e4", - "3110": "suovuori", - "6162": null, - "735": "perno", - "1312": "satava", - "3092": "velkua", - "6151": "tuorla", - "1571": "k\u00e4rs\u00e4m\u00e4ki", - "1753": "satava", - "1506": "pansio", - "8124": "stor\u00e4ng", - "6364": "littoinen", - "6308": "kuusisto", - "1168": "paattinen", - "1600": null, - "2005": "raision keskusta", - "52": "port arthur", - "3010": "viluluoto", - "3089": "velkua", - "720": "paattinen", - "660": "oriketo", - "763": "vienola", - "3103": null, - "5025": "lieto", - "2064": "pet\u00e4sm\u00e4ki", - "4057": "peijerl\u00e4", - "95": "lauttaranta", - "4067": "vahto", - "992": "m\u00e4ntym\u00e4ki", - "614": "kastu", - "6218": "kuusisto", - "5171": null, - "6086": "littoinen", - "1548": "l\u00e4nsinummi", - "751": "iso-heikkil\u00e4", - "1966": "kurjenm\u00e4ki", - "4044": null, - "518": "katariina", - "3217": "suovuori", - "1528": "pl\u00e4kkikaupunki", - "6280": "torppala", - "4094": "kahari", - "1605": "yliopisto", - "454": null, - "6001": "piispanristi", - "1738": "haarla", - "5195": null, - "1072": null, - "5101": "lieto as", - "1069": "yli-maaria", - "423": null, - "3038": "porhonkallio", - "6188": null, - "4039": null, - "6613": null, - "6339": null, - "6338": null, - "297": "lauttaranta", - "5236": "loukinainen", - "963": "ter\u00e4srautela", - "586": null, - "3059": null, - "549": "ruissalo", - "5116": "lieto as", - "1657": "kurala", - "562": "ruissalo", - "416": null, - "1515": "artukainen", - "2044": "kaanaa", - "6171": "hadvala", - "838": null, - "1692": "luostarinm\u00e4ki", - "795": "peltola", - "646": "luolavuori", - "952": "uittamo", - "5099": null, - "8101": "kirjala", - "6141": null, - "874": "it\u00e4harju", - "1161": "paattinen", - "3137": "poikko", - "2016": "raision keskusta", - "8945": null, - "1399": "paattinen", - "114": "tuomiokirkkotori", - "1063": "moisio", - "5090": null, - "1752": "satava", - "1670": "it\u00e4harju", - "3086": "velkua", - "5117": null, - "3222": "naantalin keskusta", - "6037": "kaarinan keskusta", - "652": null, - "5108": "lieto as", - "5199": null, - "31": "n\u00e4ttinummi", - "5231": null, - "609": "kurjenm\u00e4ki", - "5473": "avanti", - "5103": "lieto as", - "800": "m\u00e4likk\u00e4l\u00e4", - "755": "moisio", - "510": "ilpoinen", - "3243": null, - "3171": "airismaa", - "6210": null, - "8810": "koski tl", - "262": "oriketo", - "1405": null, - "677": "pansio", - "8116": "\u00f6sterby", - "3073": "velkua", - "904": "muhkuri", - "3026": "kultaranta", - "4079": "hemmola", - "347": "skanssi", - "2039": "kaanaa", - "638": "m\u00e4ntym\u00e4ki", - "506": "peltola", - "140": "martti", - "1696": "it\u00e4ranta", - "231": null, - "2149": "maksla", - "3065": "lieranta", - "1104": "j\u00e4k\u00e4rl\u00e4", - "1392": null, - "3185": "poikko", - "5193": null, - "1133": "paattinen", - "5219": null, - "870": "kupittaa", - "3022": "viiala", - "1252": "kakskerta", - "6620": "paimio", - "3072": null, - "1717": "luolavuori", - "947": null, - "3014": "naantalin keskusta", - "5270": null, - "1421": "kakskerta", - "897": "muhkuri", - "467": "kurjenm\u00e4ki", - "1441": "r\u00e4nt\u00e4m\u00e4ki", - "3111": "suovuori", - "2136": "tikanmaa", - "1812": null, - "1130": "paattinen", - "3105": "suovuori", - "6074": null, - "5096": null, - "8131": "pargas", - "367": "haarla", - "2060": null, - "8142": "norrby", - "716": "vasaram\u00e4ki", - "4034": "paasniittu", - "3099": null, - "68": null, - "6080": "littoinen", - "1082": null, - "1095": null, - "628": "kastu", - "3305": "aaslaluoto", - "97": "majakkaranta", - "750": "iso-heikkil\u00e4", - "226": "raunistula", - "707": "lauste", - "1507": "perno", - "T1": "kauppatori", - "5048": "littoinen", - "183": "k\u00e4rs\u00e4m\u00e4ki", - "6240": null, - "1068": "yli-maaria", - "1687": "kurjenm\u00e4ki", - "1826": "nummen koulu", - "55": "satama", - "5016": "sillil\u00e4", - "5476": "lieto", - "964": null, - "8950": "nagu", - "5106": "lieto as", - "737": "perno", - "1504": "vaala", - "812": "l\u00e4nsikeskus", - "1701": "uittamo", - "3101": null, - "6275": null, - "6245": null, - "1414": "satava", - "1490": "harittu", - "3132": null, - "3043": "meripirtti", - "3237": "kuivalahti", - "6040": "kaarinan keskusta", - "2148": "kuninkoja", - "1705": null, - "108": "vii kaupunginosa", - "3047": "merimasku", - "554": "pohjola", - "6223": "kuusisto", - "3223": null, - "500": "kupittaanpuisto", - "6359": null, - "1617": "r\u00e4nt\u00e4m\u00e4ki", - "790": "it\u00e4ranta", - "314": "oriniemi", - "5373": null, - "8104": null, - "1224": "oriketo", - "2144": "tikanmaa", - "799": "l\u00e4nsikeskus", - "1659": "kurala", - "6314": "kuusisto", - "1641": "kurala", - "3055": "merimasku", - "5154": null, - "1767": "moisio", - "328": null, - "1545": null, - "1816": "martti", - "1511": null, - "6292": null, - "1099": "j\u00e4k\u00e4rl\u00e4", - "6701": null, - "5038": "jokila", - "6337": null, - "902": "muhkuri", - "6651": "paimio", - "3259": "merimasku", - "281": "yli-maaria", - "5432": null, - "6261": null, - "761": "h\u00e4rk\u00e4m\u00e4ki", - "303": "toijainen", - "2014": "raision keskusta", - "818": "l\u00e4nsinummi", - "194": "k\u00e4rs\u00e4m\u00e4ki", - "41": "linja-autoasema", - "461": "peltola", - "1345": null, - "1648": null, - "184": "k\u00e4rs\u00e4m\u00e4ki", - "274": null, - "2049": null, - "327": null, - "5083": null, - "1003": null, - "606": "m\u00e4ntym\u00e4ki", - "3275": null, - "5002": "tammi", - "3125": null, - "304": "toijainen", - "6096": "littoinen", - "5192": null, - "5007": "loukinainen", - "955": "runosm\u00e4ki", - "6053": null, - "974": null, - "941": "martti", - "2118": "kauppakeskus mylly", - "2079": "nuorikkala", - "462": null, - "1675": "vaala", - "1401": "tortinm\u00e4ki", - "199": null, - "1222": null, - "4065": "vahto", - "3170": null, - "1711": null, - "6637": "naskarla", - "5053": "littoinen", - "6226": "sipil\u00e4nm\u00e4ki", - "8112": "kyrk\u00e4ng", - "4046": null, - "1750": "kaistarniemi", - "3303": "aaslaluoto", - "24": null, - "1398": "paattinen", - "1544": null, - "5056": null, - "6299": "kuusisto", - "6045": "kaarinan keskusta", - "2036": "kaanaa", - "1702": "uittamo", - "1809": "perno", - "1247": "kakskerta", - "6389": "kaarinan keskusta", - "190": "k\u00e4rs\u00e4m\u00e4ki", - "1047": "kupittaa", - "6257": "piikki\u00f6", - "3267": null, - "522": "k\u00e4rs\u00e4m\u00e4ki", - "5401": null, - "413": "oriniemi", - "6026": null, - "T8": "kauppatori", - "718": null, - "6195": null, - "6319": "kuusisto", - "8012": null, - "5006": "hakkinen", - "1482": "pikisaari", - "270": "raunistula", - "1970": "k\u00e4h\u00e4ri", - "593": "kohmo", - "362": "friskala", - "608": "kurjenm\u00e4ki", - "802": "pl\u00e4kkikaupunki", - "101": "it\u00e4ranta", - "3302": "airismaa", - "6234": "piikki\u00f6", - "1524": "artukainen", - "6191": null, - "647": "ispoinen", - "8017": "aura", - "209": "port arthur", - "3189": "ylttinen", - "2034": "kaanaa", - "508": null, - "208": "port arthur", - "6674": null, - "2119": null, - "3301": "salonkyl\u00e4", - "6721": null, - "6022": "kaarinan keskusta", - "6677": null, - "759": "h\u00e4rk\u00e4m\u00e4ki", - "8136": "pargas", - "5419": "tarvasjoki", - "345": null, - "1080": "moisio", - "567": "ruissalo", - "5300": null, - "3230": "haijainen", - "1769": "moisio", - "6641": null, - "5310": null, - "5405": null, - "3151": "rym\u00e4ttyl\u00e4", - "1635": null, - "46": "vii kaupunginosa", - "8126": "bj\u00f6rkhagen", - "1310": "satava", - "5089": null, - "563": "ruissalo", - "1285": "kakskerta", - "3006": null, - "3186": "poikko", - "5209": null, - "3051": "merimasku", - "133": "kerttuli", - "446": "ylioppilaskyl\u00e4-it\u00e4", - "1768": "moisio", - "3126": null, - "9002": "marjaniemi", - "5102": "lieto as", - "499": "kupittaanpuisto", - "5240": "avanti", - "5055": null, - "828": "varissuo", - "6391": null, - "6715": null, - "9000": "martti", - "8027": "aura", - "6400": "piikki\u00f6", - "73": "martti", - "6105": "pompo", - "5227": null, - "1558": "n\u00e4ttinummi", - "T41": "kauppatori", - "545": "ruissalo", - "451": "ylioppilaskyl\u00e4-l\u00e4nsi", - "496": "satakunnantie", - "5198": null, - "1538": "iso-heikkil\u00e4", - "152": "martti", - "8138": "pargas", - "2138": "tikanmaa", - "1799": "m\u00e4ntym\u00e4ki", - "6197": null, - "1766": "kakskerta", - "6617": "paimio", - "1277": "kakskerta", - "1669": "it\u00e4harju", - "359": null, - "864": "luostarinm\u00e4ki", - "2070": "raision keskusta", - "2021": null, - "1390": "paattinen", - "1267": "kakskerta", - "5237": "avanti", - "122": "nummenm\u00e4ki", - "3108": "suovuori", - "6055": "kes\u00e4m\u00e4ki", - "1158": "paattinen", - "251": "saram\u00e4ki", - "6608": null, - "766": null, - "1394": null, - "5327": null, - "4017": "ruskon keskusta", - "142": "vii kaupunginosa", - "5050": "littoinen", - "6089": "littoinen", - "3195": "kurala (naantali)", - "L8": "linja-autoasema", - "1115": "moisio", - "785": "peltola", - "3069": "rauduinen", - "537": "ruissalo", - "243": "saram\u00e4ki", - "5173": null, - "6012": "piispanl\u00e4hde", - "4077": "hemmola", - "3190": "ylttinen", - "1288": "kakskerta", - "3165": "aaslaluoto", - "3028": "kultaranta", - "839": "l\u00e4nsikeskus", - "547": "ruissalo", - "104": "martti", - "4090": null, - "550": null, - "1560": "l\u00e4nsikeskus", - "672": "pansio", - "106": "vii kaupunginosa", - "1177": "paattinen", - "1187": "v\u00e4h\u00e4-heikkil\u00e4", - "914": "it\u00e4harju", - "5095": null, - "121": "nummenm\u00e4ki", - "1198": "kurala", - "930": "martti", - "6038": "kaarinan keskusta", - "1645": "ylioppilaskyl\u00e4-l\u00e4nsi", - "1780": "yli-maaria", - "5020": "lieto", - "6007": null, - "299": null, - "810": "ter\u00e4srautela", - "222": "m\u00e4ntym\u00e4ki", - "2114": "raision keskusta", - "6372": null, - "238": null, - "3307": "aaslaluoto", - "376": "satava", - "5114": "lieto as", - "1786": "moisio", - "3168": null, - "5046": "littoinen", - "6189": null, - "354": "skanssi", - "1301": "satava", - "8140": "\u00f6sterby", - "3081": "velkua", - "2085": "mets\u00e4aro", - "5178": null, - "5069": "ilmarinen", - "3001": null, - "490": null, - "330": "lauttaranta", - "1593": "k\u00e4rs\u00e4m\u00e4ki", - "979": "k\u00e4rs\u00e4m\u00e4ki", - "5131": null, - "132": "kerttuli", - "778": "pansio", - "2122": null, - "5074": "ilmarinen", - "1781": "yli-maaria", - "T40": "kauppatori", - "3039": "meripirtti", - "9003": "ruissalo", - "6011": "piispanl\u00e4hde", - "787": null, - "6671": null, - "1573": "runosm\u00e4ki", - "250": "saram\u00e4ki", - "6153": "raadelma", - "6066": "kes\u00e4m\u00e4ki", - "425": "toijainen", - "3309": null, - "600": "uittamo", - "5135": null, - "5475": "lieto", - "1412": "satava", - "4062": "hyrk\u00f6inen", - "1825": "pernon telakka", - "343": null, - "174": null, - "1078": "moisio", - "3064": null, - "5440": "tarvasjoki", - "1664": "varissuo", - "6270": null, - "6622": "paimio", - "6749": null, - "8114": "kyrk\u00e4ng", - "1281": "kakskerta", - "1463": "skanssi", - "5186": null, - "1744": "kaistarniemi", - "405": null, - "5250": null, - "6605": null, - "5314": null, - "3036": "asikko", - "5105": "lieto as", - "1531": "l\u00e4nsikeskus", - "1270": "kakskerta", - "5321": "lieto", - "5005": "hakkinen", - "5091": null, - "5190": null, - "88": "moikoinen", - "6186": null, - "969": "artukainen", - "311": null, - "734": "pansio", - "673": "pansio", - "1774": "j\u00e4k\u00e4rl\u00e4", - "269": "yli-maaria", - "6152": null, - "6290": null, - "1591": null, - "2002": null, - "1527": "l\u00e4nsikeskus", - "205": "vii kaupunginosa", - "6148": "tuorla", - "2124": "kuninkoja", - "402": null, - "6061": "kes\u00e4m\u00e4ki", - "3040": "meripirtti", - "721": "m\u00e4ntym\u00e4ki", - "338": "luostarinm\u00e4ki", - "6065": "kes\u00e4m\u00e4ki", - "4006": null, - "383": "satava", - "5304": "jokila", - "5045": "littoinen", - "249": "saram\u00e4ki", - "5149": null, - "2107": "raision keskusta", - "6090": "littoinen", - "86": null, - "6194": null, - "2059": "pet\u00e4sm\u00e4ki", - "8026": "aura", - "1231": "urusvuori", - "6136": "kaarinan keskusta", - "1391": null, - "6244": null, - "493": null, - "5125": "ilmarinen", - "704": null, - "474": "satakunnantie", - "2068": "pet\u00e4sm\u00e4ki", - "5204": "lieto as", - "374": "satava", - "3205": null, - "595": "ruissalo", - "1741": "kaistarniemi", - "5072": "ilmarinen", - "193": "k\u00e4rs\u00e4m\u00e4ki", - "1275": "kakskerta", - "6107": "pompo", - "651": null, - "1269": "kakskerta", - "6687": null, - "1572": "runosm\u00e4ki", - "1076": "moisio", - "5082": null, - "692": null, - "3236": "k\u00e4k\u00f6l\u00e4", - "1632": "halinen", - "6099": "littoinen", - "6126": "piispanl\u00e4hde", - "1229": "urusvuori", - "1041": null, - "728": "pansio", - "T35": "kauppatori", - "313": null, - "798": "l\u00e4nsikeskus", - "6612": null, - "1313": "satava", - "1326": "nummenm\u00e4ki", - "5047": "littoinen", - "5": "satama", - "8960": "korpo", - "1311": "satava", - "5172": null, - "5111": "lieto as", - "8130": "munkviken", - "541": "ruissalo", - "6284": "piispanristi", - "1292": "kakskerta", - "4041": null, - "5462": null, - "575": "satama", - "5158": null, - "1698": "majakkaranta", - "6717": null, - "693": "kastu", - "6640": "naskarla", - "794": "peltola", - "332": "it\u00e4ranta", - "1207": "satama", - "1162": "paattinen", - "192": "k\u00e4rs\u00e4m\u00e4ki", - "141": "vii kaupunginosa", - "569": "ruissalo", - "119": "nummenm\u00e4ki", - "1116": "yli-maaria", - "1002": null, - "50": "port arthur", - "8016": "aura", - "6331": null, - "742": null, - "228": "raunistula", - "80": "majakkaranta", - "573": "marjaniemi", - "2103": "vaisaari", - "6043": "kaarinan keskusta", - "6318": "kuusisto", - "846": "kupittaa", - "981": null, - "6224": "kuusisto", - "3252": null, - "777": "pernon telakka", - "198": null, - "138": "luostarinm\u00e4ki", - "666": "ruissalo", - "181": "k\u00e4rs\u00e4m\u00e4ki", - "6653": "paimio", - "1089": "saram\u00e4ki", - "1122": "paattinen", - "3104": null, - "957": "runosm\u00e4ki", - "6078": null, - "4063": null, - "1627": "halinen", - "6699": null, - "944": "v\u00e4h\u00e4-heikkil\u00e4", - "3145": null, - "5407": null, - "83": null, - "5469": "avanti", - "6329": null, - "574": "marjaniemi", - "6114": "pompo", - "636": "m\u00e4ntym\u00e4ki", - "326": "s\u00e4rkilahti", - "8024": "aura", - "618": "k\u00e4rs\u00e4m\u00e4ki", - "3041": "meripirtti", - "899": "muhkuri", - "851": "kerttuli", - "268": null, - "388": "satava", - "6091": "littoinen", - "3163": "r\u00f6\u00f6l\u00e4", - "6636": "naskarla", - "504": "luolavuori", - "667": "pansio", - "229": "raunistula", - "5239": "avanti", - "109": "vii kaupunginosa", - "1016": "logomo", - "4024": "ruskon keskusta", - "4037": null, - "5003": "hakkinen", - "6684": null, - "8137": "pargas", - "2140": "tikanmaa", - "6709": "paimio", - "986": "runosm\u00e4ki", - "1108": "saram\u00e4ki", - "1163": "paattinen", - "90": null, - "1050": "pohjola", - "2096": "ihala", - "48": "port arthur", - "5258": null, - "3272": null, - "5344": null, - "1823": "pernon telakka", - "5012": "sillil\u00e4", - "1061": null, - "5406": null, - "6370": null, - "6100": "littoinen", - "6225": "sipil\u00e4nm\u00e4ki", - "6205": "kaarinan keskusta", - "6014": "piispanl\u00e4hde", - "130": "kupittaanpuisto", - "901": "muhkuri", - "1795": "saaro", - "1166": "paattinen", - "767": null, - "5340": null, - "3229": "kaivola", - "5409": null, - "77": "it\u00e4ranta", - "3004": null, - "854": "luostarinm\u00e4ki", - "437": "j\u00e4nessaari", - "1403": null, - "1230": "urusvuori", - "1656": "kurala", - "534": "marjaniemi", - "4089": null, - "143": null, - "1555": "l\u00e4nsinummi", - "5207": null, - "1208": "satama", - "6134": "kaarinan keskusta", - "4051": null, - "970": "artukainen", - "223": null, - "5467": null, - "6010": "piispanl\u00e4hde", - "3005": null, - "6073": null, - "1264": "kakskerta", - "1739": "haarla", - "773": "pernon telakka", - "1655": "kohmo", - "3286": "suutarla", - "468": "kurjenm\u00e4ki", - "5075": null, - "8128": "tennby", - "1661": "kurala", - "1718": "luolavuori", - "806": "patterinhaka", - "8010": null, - "1362": "j\u00e4k\u00e4rl\u00e4", - "72": "vii kaupunginosa", - "489": null, - "8971": null, - "1703": "uittamo", - "1500": "vaala", - "6743": null, - "6181": null, - "1761": "kakskerta", - "1217": "luolavuori", - "220": "vanha suurtori", - "4084": "silvola", - "1338": null, - "568": "ruissalo", - "5328": null, - "125": "lauttaranta", - "866": "kerttuli", - "1497": "satama", - "699": "lauste", - "3063": null, - "4076": "vahto", - "1566": "runosm\u00e4ki", - "1973": "m\u00e4ntym\u00e4ki", - "1121": "paattinen", - "6315": "kuusisto", - "5011": "sillil\u00e4", - "1249": "kakskerta", - "154": "vii kaupunginosa", - "176": null, - "3249": null, - "6116": null, - "5421": "tarvasjoki", - "1546": "n\u00e4ttinummi", - "515": "katariina", - "417": "satava", - "5425": null, - "1112": "saram\u00e4ki", - "825": "ter\u00e4srautela", - "3017": "naantalin keskusta", - "298": null, - "6214": "kuusisto", - "6192": null, - "1131": "paattinen", - "2075": "raision keskusta", - "4075": "vahto", - "53": "satama", - "5411": null, - "3144": null, - "1425": "kakskerta", - "6642": null, - "3077": "velkua", - "6606": null, - "3033": "asikko", - "705": "vaala", - "1118": null, - "8133": "pargas", - "3156": "rym\u00e4ttyl\u00e4", - "5136": "j\u00e4k\u00e4rl\u00e4", - "5232": null, - "1551": "n\u00e4ttinummi", - "2027": "tikanmaa", - "740": null, - "1824": "pernon telakka", - "6609": null, - "5436": null, - "5039": null, - "427": "kukola", - "6219": "kuusisto", - "69": "haarla", - "6260": null, - "1424": "kakskerta", - "703": "paattinen", - "5042": null, - "6216": "kuusisto", - "10": "port arthur", - "1815": "martti", - "1254": "kakskerta", - "1305": "satava", - "2121": null, - "6619": "paimio", - "653": "oriketo", - "3198": null, - "789": "it\u00e4ranta", - "6301": "kuusisto", - "1706": null, - "8109": "kyrk\u00e4ng", - "1841": "uittamo", - "201": null, - "1561": "impivaara", - "3281": null, - "3018": "naantalin keskusta", - "1342": "vasaram\u00e4ki", - "1680": "lauste", - "5018": "vieru", - "796": null, - "5073": "ilmarinen", - "6340": "piikki\u00f6", - "1058": "vienola", - "556": "saaro", - "110": "vii kaupunginosa", - "1138": "paattinen", - "1623": "r\u00e4nt\u00e4m\u00e4ki", - "482": null, - "3152": "rym\u00e4ttyl\u00e4", - "5067": "ilmarinen", - "4081": "hemmola", - "3106": "suovuori", - "5247": "piispala", - "613": null, - "5418": "tarvasjoki", - "8002": null, - "1564": "impivaara", - "4055": "peijerl\u00e4", - "3239": "kultaranta", - "5126": "lieto", - "6111": "pompo", - "2099": "ihala", - "6725": null, - "310": null, - "6024": "kaarinan keskusta", - "1070": null, - "3289": null, - "6758": null, - "3188": null, - "5088": null, - "56": "kurala", - "6209": null, - "3046": null, - "3287": "velusmaa", - "1554": "l\u00e4nsinummi", - "61": "nummenm\u00e4ki", - "871": "it\u00e4harju", - "3030": "kultaranta", - "6013": "piispanl\u00e4hde", - "115": "yliopisto", - "2006": "raision keskusta", - "698": "lauste", - "2081": null, - "3290": "ahteentaka", - "915": null, - "2032": null, - "1393": null, - "6070": null, - "738": "perno", - "1539": "naantalin pikatie", - "655": "oriketo", - "5180": null, - "3177": "airismaa", - "1132": "paattinen", - "5430": null, - "1736": null, - "1173": "paattinen", - "5371": null, - "1316": "satava", - "1298": "satava", - "3035": "asikko", - "1484": "pikisaari", - "195": "k\u00e4rs\u00e4m\u00e4ki", - "6247": null, - "2030": "tikanmaa", - "5323": "jokila", - "965": null, - "1073": null, - "1735": null, - "6294": null, - "4043": null, - "6132": null, - "6344": null, - "3181": null, - "6211": null, - "456": "ilpoinen", - "781": "m\u00e4likk\u00e4l\u00e4", - "2033": "kaanaa", - "T33": "kauppatori", - "T36": "kauppatori", - "3282": "ajola", - "6227": "sipil\u00e4nm\u00e4ki", - "100": "it\u00e4ranta", - "753": null, - "3201": "naantalin keskusta", - "1509": "pernon telakka", - "5080": null, - "5034": "piispala", - "3173": "airismaa", - "1358": "j\u00e4k\u00e4rl\u00e4", - "102": "it\u00e4ranta", - "6113": "pompo", - "999": "m\u00e4ntym\u00e4ki", - "224": "raunistula", - "1033": "kupittaa", - "907": "suikkila", - "695": "lauste", - "1589": null, - "295": "moikoinen", - "2058": null, - "47": "vii kaupunginosa", - "1521": null, - "32": "n\u00e4ttinummi", - "1357": null, - "6238": "piikki\u00f6", - "366": "haarla", - "329": "lauttaranta", - "1788": "yli-maaria", - "363": "friskala", - "967": null, - "873": "it\u00e4harju", - "544": "ruissalo", - "1034": "kupittaa", - "146": "vii kaupunginosa", - "5041": null, - "531": null, - "975": null, - "745": "perno", - "373": "satava", - "T32": "kauppatori", - "6147": null, - "1084": null, - "683": "m\u00e4ntym\u00e4ki", - "1036": "vasaram\u00e4ki", - "6032": "kaarinan keskusta", - "3227": "linnavuori", - "351": "papinsaari", - "3235": "herttula", - "5140": null, - "1253": "kakskerta", - "1733": "kukola", - "5060": null, - "2086": "mets\u00e4aro", - "1048": "tyks", - "1055": "k\u00e4h\u00e4ri", - "1633": "halinen", - "771": "pansio", - "723": null, - "6399": "kaarinan keskusta", - "6607": null, - "99": "majakkaranta", - "221": null, - "1296": "satava", - "2018": null, - "691": "vasaram\u00e4ki", - "6250": null, - "2037": "kaanaa", - "227": "raunistula", - "5213": null, - "6616": "paimio", - "6323": "piikki\u00f6", - "689": "vasaram\u00e4ki", - "3220": "ruona", - "503": "luolavuori", - "81": "majakkaranta", - "237": "oriketo", - "5100": null, - "813": "l\u00e4nsikeskus", - "954": "runosm\u00e4ki", - "924": null, - "6703": null, - "22": "satakunnantie", - "51": "port arthur", - "1259": "kakskerta", - "2003": null, - "5059": null, - "906": "suikkila", - "1592": null, - "577": "l\u00e4nsinummi", - "404": "s\u00e4rkilahti", - "6177": "piikki\u00f6", - "1606": null, - "1595": null, - "1042": "vasaram\u00e4ki", - "8118": "\u00f6sterby", - "340": "kupittaa", - "6659": "hanhijoki", - "869": null, - "6249": null, - "5036": "jokila", - "4010": null, - "307": null, - "424": "toijainen", - "6695": null, - "3100": null, - "6109": null, - "1290": "kakskerta", - "3193": "ylttinen", - "591": "ruissalo", - "406": "illoinen", - "4": "satama", - "2048": "paikkari", - "5030": "piispala", - "5434": null, - "1167": "paattinen", - "1493": "harittu", - "1663": "nummenm\u00e4ki", - "565": "ruissalo", - "2147": "kuninkoja", - "6321": "piikki\u00f6", - "1797": "kasarmialue", - "6398": "runko", - "T24": "kauppatori", - "4030": "paasniittu", - "1486": "harittu", - "4022": "ruskon keskusta", - "1639": "kurala", - "1604": null, - "601": "uittamo", - "1172": "paattinen", - "120": "nummenm\u00e4ki", - "995": null, - "6625": null, - "6253": null, - "1025": "pohjola", - "1411": null, - "2061": "pet\u00e4sm\u00e4ki", - "920": "uittamo", - "6021": "kaarinan keskusta", - "528": "patterinhaka", - "5235": null, - "391": "haarla", - "6722": null, - "105": null, - "6603": null, - "5148": null, - "203": null, - "6196": null, - "6075": "teerim\u00e4ki", - "214": "nummenm\u00e4ki", - "1792": null, - "1272": "kakskerta", - "1368": "j\u00e4k\u00e4rl\u00e4", - "1239": "kakskerta", - "2011": "raision keskusta", - "509": "ilpoinen", - "6689": null, - "5077": null, - "5438": null, - "5413": null, - "5130": null, - "265": "oriketo", - "844": "it\u00e4harju", - "6112": "pompo", - "8115": "\u00f6sterby", - "6310": "kuusisto", - "880": null, - "1487": "harittu", - "6286": null, - "350": "kaistarniemi", - "1364": "j\u00e4k\u00e4rl\u00e4", - "6206": "kaarinan keskusta", - "76": "it\u00e4ranta", - "6630": "paimio", - "1410": null, - "973": null, - "612": null, - "348": "kaistarniemi", - "1469": "l\u00e4nsikeskus", - "1710": null, - "1649": "kuuvuori", - "5127": null, - "43": null, - "6667": null, - "5185": null, - "1785": "yli-maaria", - "517": "katariina", - "5142": null, - "484": "suikkila", - "754": "vienola", - "481": null, - "2025": "paikkari", - "1763": "kakskerta", - "1684": "tuomiokirkkotori", - "3166": "r\u00f6\u00f6l\u00e4", - "1100": "j\u00e4k\u00e4rl\u00e4", - "1969": "kerttuli", - "1464": "peltola", - "6635": "naskarla", - "444": "ylioppilaskyl\u00e4-l\u00e4nsi", - "6094": "littoinen", - "5468": "avanti", - "1377": "paattinen", - "74": "martti", - "8970": null, - "1751": "kaistarniemi", - "1653": "kohmo", - "5225": null, - "2047": "raision keskusta", - "441": "impivaara", - "3142": "kurala (naantali)", - "3049": "merimasku", - "3107": "suovuori", - "2082": "nuorikkala", - "542": "ruissalo", - "3066": "lieranta", - "4088": null, - "6150": "tuorla", - "2131": "tikanmaa", - "823": "l\u00e4nsikeskus", - "324": "illoinen", - "2150": "maksla", - "1066": "moisio", - "6018": "kaarinan keskusta", - "463": "peltola", - "3044": "meripirtti", - "1760": "kakskerta", - "6611": null, - "5238": "avanti", - "6217": "kuusisto", - "401": null, - "8144": "norrby", - "5037": "jokila", - "845": "it\u00e4harju", - "1770": "moisio", - "3247": "py\u00f6li", - "1674": "vaala", - "93": null, - "1040": "vasaram\u00e4ki", - "6686": null, - "658": "oriketo", - "162": "kupittaanpuisto", - "292": "martti", - "1106": null, - "6236": "piikki\u00f6", - "1583": null, - "6733": null, - "6645": null, - "3271": null, - "748": "pansio", - "6092": "littoinen", - "387": "satava", - "4082": "hemmola", - "6183": null, - "3212": null, - "6334": null, - "1613": "r\u00e4nt\u00e4m\u00e4ki", - "59": "nummenm\u00e4ki", - "557": null, - "817": "l\u00e4nsinummi", - "8110": "kyrk\u00e4ng", - "830": "varissuo", - "6350": null, - "6376": "littoinen", - "6155": "runko", - "5461": null, - "6215": "kuusisto", - "1778": "yli-maaria", - "1494": "koivula", - "3037": "porhonkallio", - "1801": "kupittaanpuisto", - "1559": "l\u00e4nsikeskus", - "1512": "artukainen", - "1244": "kakskerta", - "2126": "kuninkoja", - "185": "k\u00e4rs\u00e4m\u00e4ki", - "3102": null, - "1654": "kohmo", - "261": "oriketo", - "662": "oriketo", - "1614": "r\u00e4nt\u00e4m\u00e4ki", - "1236": "kakskerta", - "858": "m\u00e4ntym\u00e4ki", - "1096": "j\u00e4k\u00e4rl\u00e4", - "428": "pikisaari", - "779": "pl\u00e4kkikaupunki", - "381": "satava", - "5256": "lieto as", - "786": "peltola", - "1360": "j\u00e4k\u00e4rl\u00e4", - "5087": null, - "5086": null, - "749": "iso-heikkil\u00e4", - "2062": "pet\u00e4sm\u00e4ki", - "2076": "raision keskusta", - "433": "maanp\u00e4\u00e4", - "4020": "ruskon keskusta", - "1243": "kakskerta", - "5402": null, - "2004": null, - "978": "impivaara", - "1409": "r\u00e4nt\u00e4m\u00e4ki", - "769": "iso-heikkil\u00e4", - "6157": "runko", - "487": "suikkila", - "2": "satama", - "3274": null, - "1624": "r\u00e4nt\u00e4m\u00e4ki", - "835": null, - "3019": "naantalin keskusta", - "685": "harittu", - "841": "it\u00e4harju", - "1379": "yli-maaria", - "4029": "paasniittu", - "886": "varissuo", - "3068": "rauduinen", - "856": "luostarinm\u00e4ki", - "881": null, - "627": "kastu", - "6267": null, - "8951": "p\u00e4rn\u00e4s", - "170": "port arthur", - "6760": null, - "958": null, - "701": "vaala", - "1719": "luolavuori", - "5109": "lieto as", - "1211": "saram\u00e4ki", - "1526": null, - "239": null, - "3176": "airismaa", - "1530": "l\u00e4nsikeskus", - "4080": "hemmola", - "230": null, - "5228": null, - "58": null, - "1064": "moisio", - "1240": "kakskerta", - "T10": "kauppatori", - "580": "patterinhaka", - "5268": null, - "661": "oriketo", - "3095": "velkua", - "6634": null, - "1643": "ylioppilaskyl\u00e4-l\u00e4nsi", - "302": "saram\u00e4ki", - "6621": "paimio", - "5155": null, - "5029": "piispala", - "632": "kupittaanpuisto", - "1756": "satava", - "1540": "naantalin pikatie", - "1601": "verkahovi", - "1585": null, - "5119": null, - "4072": "vahto", - "842": "it\u00e4harju", - "645": null, - "6325": null, - "178": null, - "385": "satava", - "808": "ter\u00e4srautela", - "805": "patterinhaka", - "1235": "kakskerta", - "6088": "littoinen", - "6048": "kaarinan keskusta", - "803": "r\u00e4nt\u00e4m\u00e4ki", - "1456": "peltola", - "3270": "h\u00e4m\u00f6l\u00e4", - "566": "ruissalo", - "1052": "pohjola", - "639": "m\u00e4ntym\u00e4ki", - "409": "h\u00e4ppil\u00e4", - "33": "hepokulta", - "3153": "rym\u00e4ttyl\u00e4", - "6199": "kaarinan keskusta", - "6187": null, - "2084": "kaanaa", - "5260": null, - "553": "saaro", - "5070": "ilmarinen", - "2109": "raision keskusta", - "117": null, - "784": null, - "1366": "j\u00e4k\u00e4rl\u00e4", - "6039": "kaarinan keskusta", - "6161": null, - "852": "kerttuli", - "1637": "nummenm\u00e4ki", - "1209": "satama", - "38": "satakunnantie", - "3133": null, - "1745": "kaistarniemi", - "1159": "paattinen", - "4032": "paasniittu", - "5233": null, - "1811": "patterinhaka", - "6060": "kes\u00e4m\u00e4ki", - "5146": null, - "1716": "luolavuori", - "6680": "paimio", - "1044": "kupittaa", - "264": "oriketo", - "3025": "kultaranta", - "1552": "l\u00e4nsinummi", - "3007": "ruona", - "1365": "j\u00e4k\u00e4rl\u00e4", - "6326": null, - "868": "ter\u00e4srautela", - "1245": "kakskerta", - "1775": "j\u00e4k\u00e4rl\u00e4", - "2024": "tikanmaa", - "5420": "tarvasjoki", - "925": "v\u00e4h\u00e4-heikkil\u00e4", - "LTulo": "linja-autoasema", - "464": null, - "T2": "kauppatori", - "1579": "k\u00e4rs\u00e4m\u00e4ki", - "741": null, - "356": "skanssi", - "548": "ruissalo", - "859": "m\u00e4ntym\u00e4ki", - "492": null, - "1151": "tortinm\u00e4ki", - "1371": "j\u00e4k\u00e4rl\u00e4", - "1422": "kakskerta", - "1800": "m\u00e4ntym\u00e4ki", - "3131": null, - "1658": "kurala", - "5175": null, - "1077": "moisio", - "706": "lauste", - "708": "lauste", - "3123": null, - "361": null, - "370": "satava", - "8125": "bj\u00f6rkhagen", - "1396": null, - "3148": null, - "1051": "logomo", - "949": "uittamo", - "420": null, - "1514": "artukainen", - "780": "pl\u00e4kkikaupunki", - "1599": null, - "6140": null, - "6254": null, - "6213": "kuusisto", - "719": "paattinen", - "4007": null, - "5417": "tarvasjoki", - "5008": "hakkinen", - "1682": "vasaram\u00e4ki", - "450": "ylioppilaskyl\u00e4-it\u00e4", - "6154": "raadelma", - "1260": "kakskerta", - "271": "raunistula", - "1467": "uittamo", - "5437": null, - "30": "n\u00e4ttinummi", - "1516": null, - "65": "yliopisto", - "1197": null, - "5435": null, - "3160": null, - "1400": "paattinen", - "3288": "rym\u00e4ttyl\u00e4", - "5121": null, - "724": "artukainen", - "1691": "luostarinm\u00e4ki", - "1758": "kakskerta", - "536": "pohjola", - "1232": "urusvuori", - "681": "satama", - "6281": null, - "746": "perno", - "2046": "kaanaa", - "1276": "kakskerta", - "2143": "tikanmaa", - "951": "uittamo", - "1223": "oriketo", - "588": null, - "3218": "suovuori", - "300": "oriketo", - "6341": "piikki\u00f6", - "305": "toijainen", - "6665": null, - "1341": null, - "6229": "sipil\u00e4nm\u00e4ki", - "709": "lauste", - "364": "haarla", - "157": null, - "1842": "tuomiokirkkotori", - "1810": "perno", - "1387": null, - "380": "satava", - "2102": "ihala", - "6762": null, - "5177": null, - "1615": "r\u00e4nt\u00e4m\u00e4ki", - "472": "puutori", - "6098": "littoinen", - "1343": "vasaram\u00e4ki", - "477": null, - "782": "l\u00e4nsikeskus", - "1581": "k\u00e4rs\u00e4m\u00e4ki", - "6602": null, - "834": null, - "6203": "kaarinan keskusta", - "4069": "vahto", - "431": "j\u00e4nessaari", - "5372": null, - "1178": "paattinen", - "6082": "littoinen", - "602": "uittamo", - "6358": null, - "5004": "hakkinen", - "1677": null, - "1549": "n\u00e4ttinummi", - "5132": null, - "177": null, - "T53": "kauppatori", - "1562": null, - "1510": "pernon telakka", - "6604": null, - "242": "saram\u00e4ki", - "3023": "viiala", - "6185": null, - "6324": "piikki\u00f6", - "3042": "meripirtti", - "3071": null, - "3268": null, - "916": "it\u00e4harju", - "887": "varissuo", - "5218": null, - "2055": "pet\u00e4sm\u00e4ki", - "319": "oriniemi", - "6403": "kohmo", - "2112": "raision keskusta", - "244": "saram\u00e4ki", - "6648": null, - "5026": "lieto", - "2072": "raision keskusta", - "6287": "kaarinan keskusta", - "T34": "kauppatori", - "5076": null, - "1192": null, - "82": "majakkaranta", - "5156": null, - "687": null, - "1182": "moisio", - "3257": "merimasku", - "6691": null, - "3300": "salonkyl\u00e4", - "1154": null, - "333": "moikoinen", - "225": "raunistula", - "4074": "vahto", - "6288": null, - "5110": "lieto as", - "1660": "kurala", - "6095": "littoinen", - "4008": null, - "6713": null, - "8127": "tennby", - "6378": "littoinen", - "9": "port arthur", - "1171": "paattinen", - "1123": "paattinen", - "679": "artukainen", - "1295": "kakskerta", - "596": "ispoinen", - "648": "lentoasema", - "131": "tuomiokirkkotori", - "2009": "raision keskusta", - "232": null, - "5162": null, - "525": "iso-heikkil\u00e4", - "1143": "paattinen", - "579": "patterinhaka", - "16": null, - "5023": "lieto", - "1234": "urusvuori", - "252": "saram\u00e4ki", - "8121": "stor\u00e4ng", - "T7": "kauppatori", - "616": "k\u00e4rs\u00e4m\u00e4ki", - "678": null, - "64": "kuuvuori", - "301": "saram\u00e4ki", - "6137": "kaarinan keskusta", - "5068": "ilmarinen", - "1426": "kakskerta", - "5161": null, - "1475": "ilpoinen", - "6342": "piikki\u00f6", - "6311": "kuusisto", - "2152": "maksla", - "5251": "piispala", - "4060": "hyrk\u00f6inen", - "150": "vii kaupunginosa", - "2054": "raision keskusta", - "3": "satama", - "6650": null, - "831": "varissuo", - "1088": "saram\u00e4ki", - "6258": "piikki\u00f6", - "8800": "marttila", - "8022": "aura", - "1144": null, - "1818": "satava", - "3045": null, - "4013": null, - "1742": "kaistarniemi", - "1141": "paattinen", - "258": null, - "1351": "kupittaanpuisto", - "6690": null, - "5035": "jokila", - "3109": "suovuori", - "6352": "hadvala", - "3219": null, - "1547": "n\u00e4ttinummi", - "624": "k\u00e4rs\u00e4m\u00e4ki", - "6000": "piispanristi", - "5071": "ilmarinen", - "5252": "piispala", - "783": "it\u00e4ranta", - "1961": "lentoasema", - "5165": null, - "657": "oriketo", - "1165": "paattinen", - "533": "marjaniemi", - "449": "ylioppilaskyl\u00e4-it\u00e4", - "6004": null, - "2135": "tikanmaa", - "5210": null, - "390": "haarla", - "6285": null, - "4031": "paasniittu", - "2041": "kaanaa", - "1435": "oriketo", - "688": "vasaram\u00e4ki", - "3146": null, - "1542": "naantalin pikatie", - "6251": null, - "610": null, - "6685": null, - "1344": null, - "2111": "raision keskusta", - "3255": null, - "2101": "ihala", - "1179": null, - "5226": null, - "2093": "mets\u00e4aro", - "2001": null, - "2019": null, - "1155": "paattinen", - "5464": "tarvasjoki", - "1534": "m\u00e4likk\u00e4l\u00e4", - "1014": "runosm\u00e4ki", - "6076": "teerim\u00e4ki", - "5223": null, - "256": null, - "752": null, - "6222": "kuusisto", - "623": "k\u00e4rs\u00e4m\u00e4ki", - "6009": "piispanl\u00e4hde", - "1754": "satava", - "3250": null, - "5081": null, - "6166": null, - "84": "lauttaranta", - "8103": "k\u00e5rkulla", - "5179": null, - "3169": null, - "747": "perno", - "6049": "kaarinan keskusta", - "309": null, - "584": "vii kaupunginosa", - "320": "h\u00e4ppil\u00e4", - "1587": "urusvuori", - "1721": "luolavuori", - "6158": "runko", - "3291": "ahteentaka", - "1189": "kurala", - "923": "uittamo", - "1727": "maanp\u00e4\u00e4", - "571": "ruissalo", - "3012": "naantalin keskusta", - "927": "v\u00e4h\u00e4-heikkil\u00e4", - "3191": "ylttinen", - "1300": "satava", - "6313": "kuusisto", - "1147": "tortinm\u00e4ki", - "642": null, - "617": "liljalaakso", - "6626": null, - "1307": "satava", - "325": "s\u00e4rkilahti", - "4042": null, - "123": "kurala", - "1008": "kurjenm\u00e4ki", - "1215": "uittamo", - "260": null, - "4001": "ojanto", - "1056": "k\u00e4h\u00e4ri", - "736": null, - "6336": null, - "1023": "k\u00e4h\u00e4ri", - "1297": "satava", - "894": "muhkuri", - "1598": null, - "1442": "r\u00e4nt\u00e4m\u00e4ki", - "144": "rautatieasema", - "1814": null, - "5220": null, - "538": "ruissalo", - "5248": null, - "1417": "eerikvalla", - "1474": "peltola", - "6248": null, - "3224": null, - "4028": "paasniittu", - "1762": "kakskerta", - "485": "suikkila", - "8120": "\u00f6sterby", - "3141": "kurala (naantali)", - "98": "majakkaranta", - "207": "port arthur", - "6264": "piikki\u00f6", - "3226": "naantalin keskusta", - "5318": null, - "71": "vii kaupunginosa", - "5027": "lieto", - "1137": "paattinen", - "349": "skanssi", - "6": "port arthur", - "6643": null, - "559": "ruissalo", - "1634": null, - "1291": "kakskerta", - "5306": null, - "23": "satakunnantie", - "5174": null, - "2132": "tikanmaa", - "1732": "kukola", - "289": null, - "5063": "ilmarinen", - "996": "luostarinm\u00e4ki", - "1263": "kakskerta", - "1964": "p\u00e4\u00e4skyvuori", - "1697": "majakkaranta", - "277": null, - "1255": "kakskerta", - "520": "artukainen", - "5033": "piispala", - "473": "satakunnantie", - "216": "k\u00e4rs\u00e4m\u00e4ki", - "469": "kupittaanpuisto", - "1749": "kaistarniemi", - "28": "n\u00e4ttinummi", - "255": null, - "6380": "littoinen", - "382": "satava", - "2110": "raision keskusta", - "1782": "yli-maaria", - "156": "martti", - "1838": "vii kaupunginosa", - "1188": "it\u00e4ranta", - "3112": null, - "4095": "ruskon keskusta", - "971": "h\u00e4rk\u00e4m\u00e4ki", - "6172": "hadvala", - "T42": "kauppatori", - "29": "n\u00e4ttinummi", - "4087": null, - "607": "m\u00e4ntym\u00e4ki", - "290": "luostarinm\u00e4ki", - "1731": "kukola", - "5215": null, - "2077": "raision keskusta", - "14": "vii kaupunginosa", - "5057": null, - "6302": "kuusisto", - "2117": "kauppakeskus mylly", - "702": null, - "397": "satava", - "1046": "kupittaa", - "5470": "avanti", - "552": "saaro", - "96": "lauttaranta", - "889": "naantalin pikatie", - "5137": "j\u00e4k\u00e4rl\u00e4", - "T9": "kauppatori", - "775": "pernon telakka", - "760": "h\u00e4rk\u00e4m\u00e4ki", - "11": "vii kaupunginosa", - "6165": null, - "5188": null, - "1588": null, - "950": "uittamo", - "6184": null, - "840": null, - "1757": "kakskerta", - "890": null, - "1791": "yli-maaria", - "1832": "j\u00e4k\u00e4rl\u00e4", - "39": "satakunnantie", - "5370": null, - "960": "k\u00e4rs\u00e4m\u00e4ki", - "3279": "tamminiemi", - "197": null, - "605": "m\u00e4ntym\u00e4ki", - "1789": "yli-maaria", - "6317": "kuusisto", - "34": "hepokulta", - "5176": null, - "670": "pansio", - "1246": "kakskerta", - "5134": null, - "3118": null, - "8132": "pargas", - "20": "satakunnantie", - "1395": null, - "1062": null, - "6638": "naskarla", - "6002": "piispanristi", - "465": "luolavuori", - "5092": null, - "674": "pansio", - "1616": "r\u00e4nt\u00e4m\u00e4ki", - "641": "m\u00e4ntym\u00e4ki", - "6168": null, - "163": "kerttuli", - "4004": "ojanto", - "447": "ylioppilaskyl\u00e4-it\u00e4", - "124": "pikisaari", - "475": "l\u00e4nsikeskus", - "3208": null, - "283": "yli-maaria", - "1026": "pohjola", - "758": "jyrkk\u00e4l\u00e4", - "1213": "uittamo", - "337": "luostarinm\u00e4ki", - "739": null, - "3231": "haijainen", - "5052": "littoinen", - "435": "maanp\u00e4\u00e4", - "972": null, - "6333": null, - "103": "martti", - "837": null, - "3310": null, - "396": "yli-maaria", - "306": null, - "1136": "paattinen", - "872": "it\u00e4harju", - "6279": "lemu", - "3048": null, - "172": "vii kaupunginosa", - "2100": "ihala", - "168": "port arthur", - "988": "luolavuori", - "2105": "raision keskusta", - "4002": "ojanto", - "1350": "kupittaanpuisto", - "T37": "kauppatori", - "3241": null, - "280": "vanha suurtori", - "514": "koivula", - "5058": null, - "5013": "sillil\u00e4", - "6231": "puosta", - "4073": "vahto", - "6649": null, - "1610": "oriketo", - "1513": "artukainen", - "6067": null, - "722": "satama", - "5245": null, - "6660": "hanhijoki", - "1651": "kohmo", - "6646": null, - "6182": null, - "519": "koivula", - "6146": null, - "532": "satama", - "1206": "satama", - "6130": "piispanristi", - "3194": "ylttinen", - "182": "k\u00e4rs\u00e4m\u00e4ki", - "4025": "ruskon keskusta", - "1113": "saram\u00e4ki", - "883": null, - "604": "m\u00e4ntym\u00e4ki", - "697": "lauste", - "1156": "paattinen", - "5014": "sillil\u00e4", - "5170": null, - "770": "iso-heikkil\u00e4", - "1286": "kakskerta", - "1397": "paattinen", - "6404": "kohmo", - "6017": null, - "5143": null, - "675": "pansio", - "403": "s\u00e4rkilahti", - "360": null, - "6104": null, - "2063": "pet\u00e4sm\u00e4ki", - "1772": "j\u00e4k\u00e4rl\u00e4", - "516": "katariina", - "6670": null, - "247": "saram\u00e4ki", - "8962": "korpo", - "743": "perno", - "733": "pansio", - "3256": null, - "6745": null, - "384": "satava", - "6652": "paimio", - "3122": "linnavuori", - "801": "r\u00e4nt\u00e4m\u00e4ki", - "3034": "asikko", - "2051": null, - "5031": "piispala", - "358": null, - "1586": "lentoasema", - "3091": "velkua", - "6688": "paimio", - "6027": null, - "1348": "kupittaanpuisto", - "6059": "kes\u00e4m\u00e4ki", - "849": "kerttuli", - "6178": "piikki\u00f6", - "5094": null, - "6628": null, - "1283": "kakskerta", - "6654": "paimio", - "412": "oriniemi", - "3056": "merimasku", - "680": "artukainen", - "6369": null, - "908": null, - "6675": null, - "8025": "aura", - "625": "k\u00e4rs\u00e4m\u00e4ki", - "3215": null, - "1537": "iso-heikkil\u00e4", - "1489": "harittu", - "235": "oriketo", - "6365": "littoinen", - "6180": null, - "8975": null, - "5211": null, - "8009": null, - "6101": null, - "175": null, - "922": "uittamo", - "488": null, - "5015": "vieru", - "436": "maanp\u00e4\u00e4", - "6320": "runko", - "1472": "ilpoinen", - "727": "pansio", - "6601": null, - "189": "k\u00e4rs\u00e4m\u00e4ki", - "832": "varissuo", - "3134": null, - "5234": null, - "67": "k\u00e4rs\u00e4m\u00e4ki", - "1017": "logomo", - "5463": null, - "3175": "airismaa", - "5431": null, - "4059": "hyrk\u00f6inen", - "3067": "meripirtti", - "885": "varissuo", - "5043": null, - "8105": "k\u00e5rkulla", - "6614": null, - "4019": "ruskon keskusta", - "1110": "saram\u00e4ki", - "715": "paattinen", - "1059": null, - "578": "patterinhaka", - "279": "vanha suurtori", - "6666": null, - "1777": "yli-maaria", - "26": "hepokulta", - "893": "suikkila", - "1021": null, - "136": "luostarinm\u00e4ki", - "3265": null, - "1533": "m\u00e4likk\u00e4l\u00e4", - "1024": "k\u00e4h\u00e4ri", - "2137": "tikanmaa", - "2080": "nuorikkala", - "3050": "merimasku", - "35": "hepokulta", - "1148": "tortinm\u00e4ki", - "6658": "hanhijoki", - "6682": null, - "1214": "uittamo", - "1320": "satava", - "3060": null, - "6087": "littoinen", - "1430": "oriniemi", - "2022": null, - "3211": null, - "1322": "satava", - "6298": "kaarinan keskusta", - "6647": null, - "6131": null, - "6174": "hadvala", - "513": "ilpoinen", - "659": "oriketo", - "757": "vienola", - "6268": null, - "1743": "kaistarniemi", - "539": "ruissalo", - "555": "saaro", - "3070": "rauduinen", - "590": null, - "3245": null, - "6120": "pompo", - "1004": null, - "1602": "verkahovi", - "6259": null, - "977": null, - "847": "tyks", - "233": null, - "991": "m\u00e4ntym\u00e4ki", - "5426": null, - "710": "lauste", - "1570": "k\u00e4rs\u00e4m\u00e4ki", - "1160": "paattinen", - "6610": null, - "6072": null, - "6639": "naskarla", - "711": null, - "4035": "paasniittu", - "772": "perno", - "6723": null, - "1097": "j\u00e4k\u00e4rl\u00e4", - "1354": "v\u00e4h\u00e4-heikkil\u00e4", - "634": null, - "5120": null, - "6707": null, - "6041": "kaarinan keskusta", - "2104": "vaisaari", - "6118": "tammi", - "1625": "r\u00e4nt\u00e4m\u00e4ki", - "5249": null, - "1218": null, - "3178": "poikko", - "1111": "saram\u00e4ki", - "3298": "okala", - "3090": "velkua", - "1740": "haarla", - "2050": "paikkari", - "989": "luolavuori", - "1679": "lauste", - "6347": null, - "5010": "loukinainen", - "5141": null, - "6272": null, - "272": "raunistula", - "1361": "j\u00e4k\u00e4rl\u00e4", - "5201": "lieto as", - "3136": "poikko", - "2071": "raision keskusta", - "956": "runosm\u00e4ki", - "3276": null, - "5152": null, - "1120": "paattinen", - "867": "kerttuli", - "1087": "saram\u00e4ki", - "1644": "ylioppilaskyl\u00e4-it\u00e4", - "1119": null, - "T3": "kauppatori", - "6739": null, - "8018": "aura", - "2142": "tikanmaa", - "8013": "aura", - "1693": "luostarinm\u00e4ki", - "1779": "yli-maaria", - "5416": "tarvasjoki", - "2113": "raision keskusta", - "1280": "kakskerta", - "4083": "silvola", - "1685": "kupittaanpuisto", - "206": "vii kaupunginosa", - "543": "ruissalo", - "982": "runosm\u00e4ki", - "6233": "piikki\u00f6", - "1821": "satama", - "3184": "poikko", - "2116": null, - "1594": "k\u00e4rs\u00e4m\u00e4ki", - "8972": null, - "5191": null, - "210": "port arthur", - "776": "pernon telakka", - "5424": "tarvasjoki", - "5302": "lieto", - "1027": "logomo", - "6190": null, - "1268": "kakskerta", - "5051": "littoinen", - "8107": null, - "200": null, - "1284": "kakskerta", - "1176": "paattinen", - "3308": "aaslaluoto", - "6036": "kaarinan keskusta", - "714": "vasaram\u00e4ki", - "5244": "avanti", - "1293": "kakskerta", - "8111": "kyrk\u00e4ng", - "768": "iso-heikkil\u00e4", - "507": "peltola", - "164": "tuomiokirkkotori", - "3264": null, - "344": null, - "626": "kastu", - "3167": null, - "6241": null, - "1704": "uittamo", - "6735": null, - "6306": "kuusisto", - "4027": "paasniittu", - "2087": "mets\u00e4aro", - "6629": "paimio", - "5049": "littoinen", - "T22": "kauppatori", - "37": "satakunnantie", - "259": null, - "5427": null, - "407": "illoinen", - "3080": "velkua", - "3083": "velkua", - "6330": null, - "5217": null, - "2125": "kuninkoja", - "725": "artukainen", - "1079": "moisio", - "682": "satama", - "6697": null, - "6033": "kaarinan keskusta", - "1423": "kakskerta", - "4018": "ruskon keskusta", - "860": "m\u00e4ntym\u00e4ki", - "694": null, - "6282": "piispanristi", - "1407": "r\u00e4nt\u00e4m\u00e4ki", - "1972": "kupittaanpuisto", - "5062": null, - "5241": "avanti", - "6681": null, - "6164": null, - "8139": "\u00f6sterby", - "6361": null, - "3084": "velkua", - "5157": null, - "3253": null, - "3196": "kurala (naantali)", - "5264": null, - "1376": "paattinen", - "4071": "vahto", - "4038": null, - "1333": "kuuvuori", - "3158": "montola", - "5194": null, - "158": "luostarinm\u00e4ki", - "3258": "merimasku", - "756": "vienola", - "6127": "littoinen", - "2145": "kauppakeskus mylly", - "1369": "j\u00e4k\u00e4rl\u00e4", - "5133": null, - "386": "satava", - "6143": null, - "3306": "aaslaluoto", - "8033": "aura", - "1650": "kohmo", - "331": "it\u00e4ranta", - "1183": "saram\u00e4ki", - "421": null, - "8106": "k\u00e5rkulla", - "6085": "littoinen", - "1413": "satava", - "1372": "j\u00e4k\u00e4rl\u00e4", - "1299": "satava", - "1652": "kohmo", - "3135": "poikko", - "583": null, - "213": null, - "530": null, - "1582": null, - "1979": null, - "946": "v\u00e4h\u00e4-heikkil\u00e4", - "1000": "luolavuori", - "253": null, - "2013": "raision keskusta", - "219": "vanha suurtori", - "764": "vienola", - "1980": "satama", - "392": "haarla", - "650": "lentoasema", - "1332": "nummenm\u00e4ki", - "1764": "kakskerta", - "1404": null, - "1804": "it\u00e4harju", - "116": "tyks", - "288": "oriketo", - "1257": "kakskerta", - "410": "h\u00e4ppil\u00e4", - "3052": "merimasku", - "1476": null, - "368": "satava", - "1640": "kurala", - "535": "ruissalo", - "6304": "kuusisto", - "6176": "piikki\u00f6", - "1708": null, - "4092": null, - "5415": "tarvasjoki", - "1318": "satava", - "25": "hepokulta", - "6064": "kes\u00e4m\u00e4ki", - "6235": "piikki\u00f6", - "631": "vienola", - "505": null, - "6741": null, - "1455": "peltola", - "4064": null, - "8117": "\u00f6sterby", - "1319": "satava", - "1385": null, - "6156": "runko", - "1117": null, - "3238": "kaivola", - "6327": null, - "4048": null, - "8001": null, - "2020": null, - "191": "k\u00e4rs\u00e4m\u00e4ki", - "5224": null, - "3225": "naantalin keskusta", - "1250": "kakskerta", - "1233": "urusvuori", - "1057": "k\u00e4h\u00e4ri", - "9001": null, - "17": "kupittaa", - "8007": null, - "6050": "kaarinan keskusta", - "6015": "piispanl\u00e4hde", - "6332": null, - "240": "saram\u00e4ki", - "731": "paattinen", - "6207": "kaarinan keskusta", - "439": "skanssi", - "6008": "piispanl\u00e4hde", - "389": "haarla", - "6394": "kaarinan keskusta", - "8143": "norrby", - "8119": "\u00f6sterby", - "321": "h\u00e4ppil\u00e4", - "1630": "halinen", - "1508": "pansio", - "6662": "hanhijoki", - "399": "lauttaranta", - "2108": "raision keskusta", - "6397": "piispanl\u00e4hde", - "1011": "patterinhaka", - "6175": "piikki\u00f6", - "5404": null, - "6278": null, - "5093": null, - "278": null, - "829": "varissuo", - "2029": "tikanmaa", - "438": "s\u00e4rkilahti", - "445": "ylioppilaskyl\u00e4-l\u00e4nsi", - "8003": null, - "3251": null, - "1102": "paattinen", - "909": "naantalin pikatie", - "5124": null, - "6668": null, - "1485": "koivula", - "6255": null, - "1563": null, - "551": "saaro", - "8113": "kyrk\u00e4ng", - "1723": "luostarinm\u00e4ki", - "1228": "oriketo", - "6672": null, - "6382": "littoinen", - "379": "kakskerta", - "826": "ter\u00e4srautela", - "1105": "j\u00e4k\u00e4rl\u00e4", - "4014": null, - "1709": null, - "246": null, - "1142": "paattinen", - "6003": "piispanristi", - "6623": "paimio", - "1672": "it\u00e4harju", - "1642": "kurala", - "836": null, - "5322": null, - "962": null, - "793": "peltola", - "1580": "k\u00e4rs\u00e4m\u00e4ki", - "1018": "kurjenm\u00e4ki", - "171": "port arthur", - "1248": "kakskerta", - "6664": "paimion sairaala", - "1304": "satava", - "215": "nummenm\u00e4ki", - "1620": "r\u00e4nt\u00e4m\u00e4ki", - "3127": "h\u00e4m\u00f6l\u00e4", - "1525": "artukainen", - "3079": "velkua", - "5205": null, - "335": "moikoinen", - "1776": "yli-maaria", - "1406": "r\u00e4nt\u00e4m\u00e4ki", - "729": "pansio", - "L2": "linja-autoasema", - "5151": null, - "8940": "sauvo", - "1628": "halinen", - "1492": "harittu", - "480": null, - "5112": "lieto as", - "1747": "kaistarniemi", - "3269": "h\u00e4m\u00f6l\u00e4", - "564": "ruissalo", - "3157": "montola", - "1164": "paattinen", - "1971": "martti", - "809": "ter\u00e4srautela", - "814": "n\u00e4ttinummi", - "6747": null, - "5139": null, - "148": "vii kaupunginosa", - "127": "pikisaari", - "4068": "vahto", - "1429": "s\u00e4rkilahti", - "1157": "paattinen", - "2139": "tikanmaa", - "3074": "velkua", - "4049": null, - "585": "ruissalo", - "1302": "satava", - "1461": null, - "5001": "tammi", - "3154": "rym\u00e4ttyl\u00e4", - "3273": null, - "6006": null, - "284": "nummenm\u00e4ki", - "891": "suikkila", - "1282": "kakskerta", - "3114": null, - "942": "v\u00e4h\u00e4-heikkil\u00e4", - "3284": null, - "1010": "patterinhaka", - "640": "m\u00e4ntym\u00e4ki", - "27": "hepokulta", - "2012": "raision keskusta", - "285": "nummenm\u00e4ki", - "5410": null, - "540": "ruissalo", - "3057": "merimasku", - "118": "nummenm\u00e4ki", - "452": "ylioppilaskyl\u00e4-l\u00e4nsi", - "1367": "j\u00e4k\u00e4rl\u00e4", - "54": "satama", - "6149": "tuorla", - "353": "kaistarniemi", - "1149": "tortinm\u00e4ki", - "6633": null, - "T38": "kauppatori", - "6243": null, - "1676": "vasaram\u00e4ki", - "6115": "pompo", - "6056": "kes\u00e4m\u00e4ki", - "561": "ruissalo", - "4050": null, - "308": null, - "6133": "kaarinan keskusta", - "291": "luostarinm\u00e4ki", - "273": "raunistula", - "6135": "kaarinan keskusta", - "4086": "silvola", - "1145": "tortinm\u00e4ki", - "966": null, - "1020": "vienola", - "1541": "naantalin pikatie", - "998": "luolavuori", - "92": "moikoinen", - "2035": "kaanaa", - "6346": null, - "6052": null, - "5040": null, - "644": null, - "1251": "kakskerta", - "5433": null, - "511": "ilpoinen", - "8944": null, - "1060": null, - "112": null, - "5145": null, - "5316": null, - "7": "port arthur", - "5242": "avanti", - "6751": null, - "1631": "halinen", - "4056": "peijerl\u00e4", - "2088": "mets\u00e4aro", - "3149": "rym\u00e4ttyl\u00e4", - "6679": "paimio", - "6669": null, - "581": "iso-heikkil\u00e4", - "5085": null, - "712": null, - "5222": null, - "5160": null, - "395": "eerikvalla", - "686": "harittu", - "4009": null, - "60": "nummenm\u00e4ki", - "186": "k\u00e4rs\u00e4m\u00e4ki", - "5212": null, - "1378": "yli-maaria", - "1221": null, - "1626": "halinen", - "1185": null, - "5097": null, - "6020": "kaarinan keskusta", - "126": "lauttaranta", - "5164": null, - "6266": null, - "1603": null, - "266": null, - "3278": "ylttinen", - "137": "luostarinm\u00e4ki", - "6058": "kes\u00e4m\u00e4ki", - "3214": null, - "8820": "somero", - "2028": "tikanmaa", - "334": "martti", - "6208": "kaarinan keskusta", - "1135": "paattinen", - "1802": "lehmusvalkama", - "2141": "tikanmaa", - "1439": "oriketo", - "T6": "kauppatori", - "1265": "kakskerta", - "3016": "naantalin keskusta", - "1748": "kaistarniemi", - "8021": "aura", - "494": "l\u00e4nsikeskus", - "1308": "satava", - "459": "ilpoinen", - "6661": null, - "523": null, - "684": null, - "1784": "yli-maaria", - "1963": null, - "1346": null, - "3082": "velkua", - "1700": "majakkaranta", - "49": "port arthur", - "1091": "saram\u00e4ki", - "1755": "satava", - "3311": null, - "4052": null, - "6057": "kes\u00e4m\u00e4ki", - "4036": "paasniittu", - "476": "l\u00e4nsikeskus", - "L3": "linja-autoasema", - "479": "pansio", - "5169": null, - "3003": null, - "267": null, - "2089": "mets\u00e4aro", - "371": "satava", - "355": "kaistarniemi", - "3299": "salonkyl\u00e4", - "1129": "paattinen", - "985": "runosm\u00e4ki", - "1556": "l\u00e4nsinummi", - "5196": null, - "1175": "paattinen", - "440": "impivaara", - "501": "kurjenm\u00e4ki", - "1030": "tyks", - "161": "kupittaanpuisto", - "6102": null, - "66": "tuomiokirkkotori", - "6655": "hanhijoki", - "282": "yli-maaria", - "1805": "it\u00e4harju", - "323": "illoinen", - "1790": "yli-maaria", - "1619": "r\u00e4nt\u00e4m\u00e4ki", - "1237": "kakskerta", - "3128": "h\u00e4m\u00f6l\u00e4", - "2083": "kaanaa", - "5166": null, - "377": "kakskerta", - "4015": "ruskon keskusta", - "8129": "munkviken", - "6068": null, - "4061": "hyrk\u00f6inen", - "1523": "artukainen", - "976": "ter\u00e4srautela", - "5024": "lieto", - "2040": "kaanaa", - "4040": null, - "398": "lauttaranta", - "254": null, - "4045": null, - "6343": null, - "8011": null, - "1031": "kupittaa", - "1278": "kakskerta", - "3076": "velkua", - "905": "suikkila", - "1673": "it\u00e4harju", - "1242": "kakskerta", - "4058": "peijerl\u00e4", - "3183": "poikko", - "611": "pansio", - "6047": "kaarinan keskusta", - "1543": "naantalin pikatie", - "6673": null, - "2057": "pet\u00e4sm\u00e4ki", - "876": "it\u00e4harju", - "40": "satakunnantie", - "587": null, - "5200": null, - "1481": null, - "1184": "kakskerta", - "2078": "raision keskusta", - "765": "moisio", - "3008": "ruona", - "5163": null, - "3027": "kultaranta", - "1359": "j\u00e4k\u00e4rl\u00e4", - "6023": "kaarinan keskusta", - "1501": "vaala", - "6624": "paimio", - "1363": "j\u00e4k\u00e4rl\u00e4", - "6335": null, - "6683": null, - "6754": "paimio", - "6054": null, - "6756": null, - "1553": "l\u00e4nsinummi", - "5320": null, - "1968": null, - "6083": "littoinen", - "365": "haarla", - "6163": null, - "135": null, - "1683": null, - "1199": "kurala", - "160": "luostarinm\u00e4ki", - "6212": null, - "6252": null, - "5054": "littoinen", - "6297": "kaarinan keskusta", - "6345": "hadvala", - "582": "iso-heikkil\u00e4", - "315": "oriniemi", - "1029": "h\u00e4rk\u00e4m\u00e4ki", - "1306": "satava", - "19": "linja-autoasema", - "4066": "vahto", - "2130": "kuninkoja", - "1212": "uittamo", - "524": null, - "6019": "kaarinan keskusta", - "1093": "saram\u00e4ki", - "139": "martti", - "5472": "avanti", - "1622": "r\u00e4nt\u00e4m\u00e4ki", - "236": "oriketo", - "6276": null, - "6351": "puosta", - "3020": "naantalin keskusta", - "690": "vasaram\u00e4ki", - "5230": null, - "987": "l\u00e4nsinummi", - "5412": null, - "3053": "merimasku", - "788": "koivula", - "6309": "kuusisto", - "6371": null, - "149": "vii kaupunginosa", - "5360": "littoinen", - "6719": null, - "180": null, - "4033": "paasniittu", - "62": "nummenm\u00e4ki", - "4053": null, - "5422": "tarvasjoki", - "3228": "kaivola", - "1488": "harittu", - "3164": "r\u00f6\u00f6l\u00e4", - "6202": "kaarinan keskusta", - "8123": "stor\u00e4ng", - "6712": null, - "6274": null, - "1238": "kakskerta", - "597": "ispoinen", - "443": "ylioppilaskyl\u00e4-l\u00e4nsi", - "296": "it\u00e4ranta", - "245": "saram\u00e4ki", - "1126": "paattinen", - "3024": "viiala", - "649": "k\u00e4rs\u00e4m\u00e4ki", - "792": "koivula", - "78": "it\u00e4ranta", - "774": "pernon telakka", - "455": "impivaara", - "2074": "raision keskusta", - "5167": null, - "470": "kupittaanpuisto", - "1309": "satava", - "1416": "eerikvalla", - "6328": null, - "732": "pansio", - "5150": null, - "5221": null, - "3172": "airismaa", - "408": "illoinen", - "1094": "saram\u00e4ki", - "968": "vienola", - "5153": null, - "21": "satakunnantie", - "5197": null, - "929": "v\u00e4h\u00e4-heikkil\u00e4", - "3013": "naantalin keskusta", - "2056": null, - "3283": "haapala", - "1720": "luolavuori", - "1053": "pohjola", - "5183": null, - "6173": "hadvala", - "1001": "luolavuori", - "3277": null, - "422": null, - "T4": "kauppatori", - "3155": "montola", - "6029": null, - "495": "satakunnantie", - "5187": null, - "6242": null, - "654": "oriketo", - "1695": "it\u00e4ranta", - "1389": "paattinen", - "622": "k\u00e4rs\u00e4m\u00e4ki", - "6035": "kaarinan keskusta", - "1596": "puutori", - "6069": null, - "169": "port arthur", - "1317": "satava", - "1636": "nummenm\u00e4ki", - "875": null, - "378": null, - "5079": null, - "153": null, - "1273": "kakskerta", - "8122": null, - "4012": "munittula", - "5123": null, - "6093": "littoinen", - "3117": null, - "1465": "katariina", - "1550": "n\u00e4ttinummi", - "6028": null, - "317": "oriniemi", - "3140": "poikko", - "1722": "m\u00e4ntym\u00e4ki", - "T5": "kauppatori", - "5181": null, - "502": "kurjenm\u00e4ki", - "6071": null, - "458": "ilpoinen", - "1967": "vasaram\u00e4ki", - "1646": "ylioppilaskyl\u00e4-l\u00e4nsi", - "1092": "saram\u00e4ki", - "3138": "poikko", - "5098": null, - "411": "oriniemi", - "2042": "kaanaa", - "460": "ilpoinen", - "134": "kupittaanpuisto", - "498": "artukainen", - "1491": "harittu", - "1694": "it\u00e4ranta", - "3115": null, - "3292": "rym\u00e4ttyl\u00e4", - "1806": "pohjola", - "8108": null, - "1565": "runosm\u00e4ki", - "570": "ruissalo", - "1746": "kaistarniemi", - "3078": "velkua", - "3031": null, - "1153": "tortinm\u00e4ki", - "6079": "littoinen", - "3093": "velkua", - "316": "oriniemi", - "1152": "tortinm\u00e4ki", - "107": "vii kaupunginosa", - "1402": "tortinm\u00e4ki", - "1150": "tortinm\u00e4ki", - "5414": null, - "275": "raunistula", - "491": null, - "3098": null, - "3058": "merimasku", - "6307": "kuusisto", - "1621": "r\u00e4nt\u00e4m\u00e4ki", - "188": "urusvuori", - "6305": "kuusisto", - "12": "vii kaupunginosa", - "862": "luostarinm\u00e4ki", - "8141": "norrby", - "1139": "paattinen", - "6705": null, - "1321": "satava", - "3179": "meripirtti", - "2069": "raision keskusta", - "5009": "loukinainen", - "6615": "paimio", - "1388": null, - "5122": null, - "2161": "kuninkoja", - "2015": "raision keskusta", - "6220": "kuusisto", - "486": "suikkila", - "T39": "kauppatori", - "1611": "oriketo", - "961": "impivaara", - "993": "luostarinm\u00e4ki", - "888": "varissuo", - "4093": "kahari", - "1681": "vasaram\u00e4ki", - "1584": null, - "1032": "kupittaa", - "3192": "ylttinen", - "5255": null, - "959": "k\u00e4rs\u00e4m\u00e4ki", - "89": "linja-autoasema", - "263": "oriketo", - "1386": null, - "1773": "j\u00e4k\u00e4rl\u00e4", - "6300": "kuusisto", - "8005": null, - "1466": "katariina", - "1662": "nummenm\u00e4ki", - "336": "martti", - "664": null, - "2094": "mets\u00e4aro", - "286": "puutori", - "3150": "rym\u00e4ttyl\u00e4", - "2008": "raision keskusta", - "512": "ilpoinen", - "1438": "oriketo", - "863": "kupittaanpuisto", - "5354": "vieru", - "6030": null, - "5203": "lieto as", - "1098": "j\u00e4k\u00e4rl\u00e4", - "8014": "aura", - "6117": "tammi", - "980": "k\u00e4rs\u00e4m\u00e4ki", - "6375": "littoinen", - "620": "k\u00e4rs\u00e4m\u00e4ki", - "1083": null, - "1347": "kupittaanpuisto", - "63": "nummenm\u00e4ki", - "6316": "kuusisto", - "1787": "moisio", - "671": "pansio", - "1287": "kakskerta", - "18": "konserttitalo", - "669": "pansio", - "3197": null, - "432": "maanp\u00e4\u00e4", - "879": null, - "5184": null, - "318": "oriniemi", - "1502": "vaala", - "6377": "littoinen", - "453": "ylioppilaskyl\u00e4-l\u00e4nsi", - "3297": "okala", - "6230": "sipil\u00e4nm\u00e4ki", - "2097": "ihala", - "3029": "kultaranta", - "921": "uittamo", - "369": "satava", - "527": "patterinhaka", - "159": "luostarinm\u00e4ki", - "6145": null, - "6678": null, - "589": null, - "730": "pansio", - "4023": "ruskon keskusta", - "8145": "pargas", - "6169": null, - "819": "l\u00e4nsinummi", - "5144": null, - "5208": null, - "5022": "lieto", - "5339": null, - "155": "vii kaupunginosa", - "1169": "paattinen", - "6362": null, - "8015": "aura", - "1713": "ilpoinen", - "6631": null, - "8134": "pargas", - "1": "satama", - "5403": null, - "576": "satama", - "179": null, - "1725": "moikoinen", - "5365": null, - "2043": "kaanaa", - "6193": null, - "3143": null, - "5278": null, - "4078": "hemmola", - "1437": "oriketo", - "3216": null, - "5084": null, - "276": "raunistula", - "1181": null, - "603": "liljalaakso", - "1827": "nummen koulu", - "2095": "ihala", - "1726": null, - "1125": "paattinen", - "4011": "munittula", - "57": "kurala", - "6657": "hanhijoki", - "6138": "kaarinan keskusta", - "2129": "kuninkoja", - "629": null, - "1460": null, - "6239": null, - "558": "ruissalo", - "8019": "aura", - "3296": "aaslaluoto", - "804": null, - "656": "oriketo", - "257": "m\u00e4ntym\u00e4ki", - "6046": "kaarinan keskusta", - "94": "lauttaranta", - "700": "paattinen", - "1567": "runosm\u00e4ki", - "4047": null, - "1503": "vaala", - "1837": "vii kaupunginosa", - "339": null, - "615": "kastu", - "3266": null, - "6360": null, - "572": "ruissalo", - "6228": "sipil\u00e4nm\u00e4ki", - "2053": null, - "1590": null, - "6159": "runko", - "6246": null, - "1480": "pikisaari", - "5428": null, - "1090": "saram\u00e4ki", - "3147": null, - "372": "satava", - "1370": "j\u00e4k\u00e4rl\u00e4", - "8961": "korpo", - "717": "vasaram\u00e4ki", - "5439": "tarvasjoki", - "3199": "naantalin keskusta", - "400": null, - "483": "suikkila", - "1498": "satama", - "6374": null, - "394": "friskala", - "5128": null, - "5423": "tarvasjoki", - "1454": "uittamo", - "1127": "paattinen", - "457": "ilpoinen", - "598": "luolavuori", - "375": "satava", - "6349": null -} \ No newline at end of file diff -r 9139a94e540c -r 3b86597c5a88 regions.gmp --- a/regions.gmp Thu Mar 29 23:55:36 2018 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -roadmap^60.44535462295548, 22.298715930500638^16@undefined^#FF0000,5,1,#ff8800,0.4^^60.3977,22.24465~60.40772,22.24046~60.40792,22.26057~60.40076,22.27409~60.3952,22.25642 -Haarla^#FF0000,5,1,#ff8800,0.4^^60.3977,22.22706~60.38719,22.23676~60.38341,22.22466~60.38518,22.21205~60.39359,22.20706~60.39816,22.21341 -Friskala^#FF0000,5,1,#ff8800,0.4^^60.39868,22.21599~60.39804,22.22852~60.38876,22.23916~60.38952,22.24843~60.39329,22.25135~60.40217,22.23474~60.4019,22.21689 -Oriniemi^#FF0000,5,1,#ff8800,0.4^^60.38871,22.16432~60.39236,22.18483~60.39972,22.188~60.40171,22.1823~60.39919,22.15413~60.39151,22.15633 -Maanpää^#FF0000,5,1,#ff8800,0.4^^60.42123,22.17264~60.41472,22.15422~60.40622,22.14277~60.40003,22.15599~60.40577,22.17143~60.41357,22.18174 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43275,22.20869~60.4239,22.21632~60.41889,22.19831~60.42495,22.19216~60.43033,22.19648 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42148,22.17333~60.42584,22.18964~60.41902,22.1971~60.41534,22.18056 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49702,22.21496~60.49936,22.22028~60.50048,22.23744~60.49676,22.2392~60.49373,22.23435~60.49306,22.23554~60.49178,22.23402~60.48872,22.22903~60.48729,22.2221~60.49085,22.21505 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45331,22.2865~60.45033,22.29068~60.45113,22.29322~60.45198,22.29413~60.45225,22.29741~60.45399,22.29853~60.45529,22.2975~60.45495,22.29585~60.45446,22.2915~60.45386,22.28832~60.45369,22.28748 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4445,22.25538~60.44359,22.25256~60.44121,22.24824~60.43617,22.25517~60.43897,22.26358 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4537,22.25043~60.45203,22.25283~60.45345,22.25685~60.45493,22.25432 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45224,22.29757~60.4499,22.32448~60.4569,22.32432~60.4621,22.31703~60.45992,22.29862~60.45961,22.29964~60.45684,22.30304~60.45528,22.29775~60.45402,22.29882 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45206,22.29738~60.45137,22.2971~60.44687,22.30439~60.44232,22.3131~60.43895,22.31757~60.44625,22.3267~60.44913,22.32902 -Erikvalla^#FF0000,5,1,#ff8800,0.4^^60.36483,22.11222~60.35498,22.12595~60.34539,22.09816~60.35061,22.08758 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45658,22.33769~60.46067,22.33863~60.46369,22.34413~60.46361,22.35091~60.46069,22.35683~60.45802,22.35761~60.45549,22.34853~60.45532,22.34116 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4623,22.31774~60.46502,22.33262~60.46094,22.33791~60.4565,22.33709~60.45315,22.33619~60.45112,22.33105~60.45135,22.32557~60.45712,22.32505 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42408,22.21672~60.43288,22.20943~60.43357,22.21448~60.43179,22.225~60.42963,22.22912~60.42589,22.23131~60.42324,22.2362~60.42237,22.23158~60.41794,22.22753 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45645,22.26163~60.45447,22.26424~60.45634,22.26935~60.4576,22.26927~60.45794,22.2662 -undefined^#FF0000,5,1,#ff8800,0.4^^60.456,22.26864~60.45472,22.2702~60.45356,22.26639~60.45395,22.26597~60.45512,22.26643 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45569,22.26935~60.45492,22.27039~60.45569,22.27163~60.45627,22.27076 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45811,22.27231~60.4578,22.27506~60.45618,22.27427~60.45707,22.27271 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48328,22.24959~60.48059,22.25139~60.47672,22.25169~60.47522,22.26525~60.4831,22.2707 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4697,22.22131~60.46693,22.21517~60.46532,22.20544~60.47272,22.19522~60.47605,22.20406~60.47122,22.21328 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4705,22.21951~60.48023,22.22414~60.48044,22.21169~60.47626,22.20483~60.47169,22.21384 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45191,22.2745~60.44999,22.27746~60.44796,22.2706~60.44837,22.26998~60.44934,22.272 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4457,22.19908~60.44249,22.20603~60.43554,22.20629~60.43394,22.19696~60.44188,22.18918 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4219,22.10621~60.4208,22.13539~60.40461,22.11823~60.40554,22.10579 -Pernon telakka^#FF0000,5,1,#ff8800,0.4^^60.46255,22.1208~60.46094,22.14792~60.45392,22.15324~60.45116,22.13868~60.44198,22.1196~60.4466,22.10751 -Perno^#FF0000,5,1,#ff8800,0.4^^60.45943,22.1494~60.45408,22.15343~60.45301,22.15429~60.45194,22.15877~60.45006,22.17728~60.45513,22.17316~60.4602,22.17171 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46014,22.17238~60.4603,22.18908~60.45773,22.18912~60.45789,22.18193~60.45188,22.1817~60.45125,22.18339~60.45265,22.18662~60.45364,22.19244~60.45041,22.19823~60.44625,22.19779~60.44274,22.18699~60.4505,22.17996 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45066,22.24616~60.44458,22.25495~60.44369,22.25247~60.43624,22.23858~60.4444,22.23654~60.44471,22.23537~60.4478,22.2407 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48504,22.23244~60.48575,22.24697~60.49033,22.24506~60.49114,22.24283~60.49107,22.24098~60.49086,22.24005~60.49023,22.23753~60.49002,22.23558~60.48981,22.23345~60.491,22.23294~60.48865,22.22914~60.48714,22.22952~60.48611,22.23257 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48987,22.23356~60.49103,22.23309~60.49175,22.23427~60.49312,22.23579~60.49373,22.2346~60.49673,22.23947~60.49728,22.2393~60.49751,22.24406~60.49696,22.24764~60.49359,22.24392~60.49128,22.24289~60.49117,22.24067~60.49032,22.23748 -Ruissalo^#FF0000,5,1,#ff8800,0.4^^60.42207,22.10793~60.43171,22.10878~60.43629,22.11982~60.43677,22.12916~60.43279,22.1408~60.43745,22.15093~60.43702,22.16208~60.43487,22.16517~60.42944,22.16861~60.4291,22.16723~60.4282,22.16354~60.42463,22.15582~60.42085,22.14449 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43186,22.10827~60.4223,22.10735~60.42254,22.10205~60.41546,22.0972~60.41587,22.09045~60.42412,22.0846~60.42765,22.08646 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44991,22.24738~60.45435,22.25976~60.448,22.2675~60.4447,22.25516 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45217,22.26268~60.45381,22.26794~60.45108,22.27178~60.4493,22.26616 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42275,22.24174~60.43039,22.24392~60.43345,22.24115~60.43304,22.23017~60.43182,22.22603~60.4298,22.2295~60.42591,22.23195~60.42344,22.23659 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44096,22.24787~60.43597,22.255~60.43152,22.24341~60.43358,22.2417~60.43332,22.2306~60.43608,22.23889 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48239,22.29941~60.48947,22.30446~60.49533,22.31812~60.48423,22.34836~60.4741,22.3328~60.47605,22.32512~60.47535,22.32003~60.4791,22.30809 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45561,22.3637~60.45679,22.38985~60.45604,22.42422~60.44062,22.42533~60.44181,22.39838~60.43955,22.36977~60.44301,22.36914 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42351,22.24337~60.43036,22.24491~60.43116,22.24466~60.43677,22.259~60.42605,22.26388 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43711,22.25976~60.4297,22.26362~60.43476,22.28431~60.4409,22.27738 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44109,22.27813~60.44283,22.28328~60.43965,22.28611~60.44219,22.29813~60.43711,22.3013~60.43474,22.28554 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44452,22.25624~60.44774,22.26929~60.44727,22.2704~60.4496,22.2777~60.44736,22.2807~60.44634,22.27856~60.44338,22.28208~60.44145,22.27749~60.43898,22.26476 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47118,22.16063~60.47947,22.18281~60.47535,22.18783~60.4732,22.189~60.47133,22.1923~60.47014,22.19453~60.46911,22.19307~60.46615,22.19058~60.46354,22.18959~60.462,22.18921~60.46103,22.18338~60.46691,22.17196 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48421,22.13076~60.48235,22.13745~60.47389,22.1541~60.46755,22.13231~60.47493,22.12153~60.48071,22.11884 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47353,22.1541~60.47091,22.15934~60.46926,22.15591~60.46098,22.15119~60.46196,22.13721~60.46798,22.145 -undefined^#FF0000,5,1,#ff8800,0.4^^60.473,22.15251~60.46819,22.14438~60.46243,22.13627~60.46293,22.12142~60.46689,22.13144 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47074,22.1599~60.46629,22.17157~60.46058,22.182~60.46054,22.17163~60.45963,22.15159~60.46511,22.15427~60.46911,22.15644 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45853,22.19019~60.45508,22.19054~60.45053,22.19882~60.44925,22.21523~60.45314,22.22142~60.45383,22.22435 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46113,22.19127~60.46132,22.19824~60.46001,22.2073~60.45919,22.21152~60.45652,22.2088~60.45931,22.19073 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46139,22.19131~60.46428,22.19195~60.46767,22.194~60.47022,22.19663~60.46369,22.20573~60.45959,22.21049~60.46167,22.19811 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48884,22.18543~60.48132,22.18556~60.47867,22.1974~60.47689,22.20328~60.48104,22.21122~60.48704,22.20809~60.48823,22.19436 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48122,22.18547~60.47853,22.19719~60.47645,22.20365~60.47299,22.19482 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43241,22.32263~60.42835,22.32737~60.4233,22.33585~60.42025,22.32107~60.42818,22.31196~60.43215,22.31439~60.43258,22.31667 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42961,22.26392~60.4343,22.28456~60.43499,22.29225~60.43245,22.29564~60.42894,22.29349~60.42506,22.27929~60.42531,22.26699 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42521,22.26577~60.42195,22.26877~60.41579,22.26733~60.41625,22.27877~60.42052,22.2783~60.42469,22.2762 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42288,22.24603~60.42536,22.26349~60.4219,22.26787~60.4157,22.26641~60.41536,22.2713~60.40943,22.26612~60.41382,22.25849 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41536,22.18092~60.41875,22.19766~60.4136,22.20165~60.41187,22.18124~60.41382,22.18224 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41156,22.18045~60.41307,22.20002~60.40765,22.19821~60.40864,22.17655 -undefined^#FF0000,5,1,#ff8800,0.4^^60.40834,22.17552~60.40773,22.19004~60.40054,22.18878~60.40212,22.18257~60.40071,22.1682~60.40567,22.17207 -Tammisto^#FF0000,5,1,#ff8800,0.4^^60.38922,22.16942~60.39234,22.18616~60.38439,22.1926~60.38445,22.16751 -Majamäki^#FF0000,5,1,#ff8800,0.4^^60.39291,22.18552~60.39257,22.19483~60.39348,22.20569~60.39844,22.21229~60.3995,22.18893 -undefined^#FF0000,5,1,#ff8800,0.4^^60.40769,22.19037~60.40056,22.18946~60.40044,22.19775~60.40256,22.19895~60.40733,22.19792 -Toijainen^#FF0000,5,1,#ff8800,0.4^^60.41343,22.21989~60.40506,22.22324~60.40398,22.20494~60.4127,22.2044 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44634,22.22058~60.44405,22.22474~60.44395,22.23328~60.44604,22.23667~60.44797,22.23457~60.44768,22.22393 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44594,22.19951~60.4478,22.19877~60.44824,22.21556~60.44775,22.22051~60.44611,22.22006~60.44378,22.22384~60.44355,22.23234~60.44448,22.23491~60.44422,22.23603~60.43618,22.23813~60.43201,22.22567~60.43402,22.21505~60.43541,22.20654~60.44264,22.2068 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44896,22.2171~60.44767,22.22204~60.44837,22.22394~60.44827,22.23472~60.4463,22.2371~60.45119,22.24507~60.45133,22.24013~60.45296,22.23209~60.45315,22.22472 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47143,22.30907~60.46766,22.3065~60.46638,22.30976~60.46627,22.32465~60.46868,22.33113~60.47168,22.33288~60.47388,22.329~60.47425,22.32349~60.47351,22.31668 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45199,22.27478~60.45005,22.27763~60.45144,22.28188~60.45277,22.27968~60.45313,22.27621 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44999,22.27767~60.45277,22.28687~60.45026,22.29051~60.44722,22.2813 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41489,22.29662~60.40966,22.30021~60.41175,22.31038~60.41516,22.31797~60.41864,22.31381~60.41797,22.30828~60.41666,22.3036 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41662,22.31787~60.41211,22.32495~60.41382,22.33615~60.41582,22.33948~60.41949,22.33244~60.41896,22.32201 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43793,22.35164~60.43952,22.36344~60.43178,22.37284~60.42969,22.35957~60.43502,22.35297 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43777,22.35091~60.43508,22.35207~60.4293,22.35903~60.42704,22.34468~60.43318,22.33569~60.43753,22.33349 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43002,22.32731~60.43303,22.33487~60.4259,22.34668~60.42359,22.34244~60.42658,22.33374 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43107,22.29598~60.43256,22.30139~60.42946,22.30611~60.42796,22.30954~60.42544,22.30964~60.42451,22.30518~60.42191,22.30171~60.42346,22.29444~60.42401,22.29166~60.42781,22.29229~60.42907,22.29398 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4247,22.27686~60.42481,22.27978~60.42649,22.28607~60.42571,22.29051~60.42375,22.29105~60.42174,22.30152~60.41947,22.29918~60.41873,22.29367~60.41824,22.29177~60.41723,22.28889~60.41632,22.27951~60.42068,22.27894 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41822,22.29268~60.41866,22.29452~60.41929,22.29923~60.42414,22.30531~60.42625,22.31349~60.41981,22.32087~60.41902,22.31332~60.41824,22.30827~60.41482,22.29424 -undefined^#FF0000,5,1,#ff8800,0.4^^60.50456,22.27092~60.4942,22.26937~60.49296,22.28753~60.49025,22.30289~60.49583,22.31615~60.50197,22.30518~60.50918,22.29724~60.50454,22.27839 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51907,22.29928~60.50948,22.29774~60.50223,22.30547~60.49598,22.31774~60.4924,22.32691~60.49714,22.33434~60.50004,22.33825~60.50487,22.34078~60.50577,22.34722~60.50741,22.35198~60.51125,22.35147~60.51308,22.34955~60.51599,22.35211~60.51867,22.34943~60.52121,22.35074~60.52359,22.34838~60.52687,22.35005~60.5276,22.32719~60.52621,22.30748 -undefined^#FF0000,5,1,#ff8800,0.4^^60.53067,22.28298~60.53473,22.28328~60.53746,22.28761~60.53782,22.29628~60.53611,22.30546~60.53301,22.31246~60.52963,22.31031~60.52767,22.30177~60.52746,22.29008~60.5278,22.28504 -undefined^#FF0000,5,1,#ff8800,0.4^^60.54416,22.33589~60.53523,22.3407~60.5348,22.35709~60.53816,22.38258~60.5504,22.37649~60.55019,22.35541 -undefined^#FF0000,5,1,#ff8800,0.4^^60.53831,22.28826~60.53831,22.29639~60.5366,22.30597~60.53508,22.31491~60.53941,22.33053~60.54105,22.3343~60.54776,22.32782~60.55521,22.31581~60.555,22.30319~60.5488,22.29272~60.54211,22.28673 -undefined^#FF0000,5,1,#ff8800,0.4^^60.73911,22.40833~60.65804,22.36507~60.65297,22.46585~60.69574,22.47177~60.72608,22.44863 -undefined^#FF0000,5,1,#ff8800,0.4^^60.63228,22.25193~60.63841,22.25663~60.63974,22.26757~60.63789,22.27982~60.63179,22.28508~60.62939,22.28474~60.62591,22.27817~60.62497,22.26963~60.62585,22.26294~60.62816,22.25642 -undefined^#FF0000,5,1,#ff8800,0.4^^60.61701,22.29598~60.61844,22.29997~60.62151,22.30392~60.62177,22.31443~60.61989,22.32263~60.61751,22.32744~60.61309,22.32727~60.6105,22.32349~60.60898,22.3134~60.60578,22.30641~60.60473,22.29837~60.60846,22.29452~60.61393,22.29362 -undefined^#FF0000,5,1,#ff8800,0.4^^60.63183,22.28765~60.62286,22.30757~60.62203,22.30275~60.61859,22.29876~60.61793,22.29512~60.6144,22.291~60.61267,22.28526~60.61524,22.26766~60.62429,22.25701~60.62436,22.27036~60.62543,22.27867~60.62748,22.28476 -undefined^#FF0000,5,1,#ff8800,0.4^^60.5485,22.21865~60.54859,22.22521~60.54679,22.23345~60.54212,22.23594~60.53736,22.23298~60.53583,22.22764~60.53504,22.22218~60.53565,22.21249~60.53877,22.21165 -undefined^#FF0000,5,1,#ff8800,0.4^^60.52877,22.21779~60.52955,22.22865~60.52875,22.23582~60.52454,22.23461~60.52214,22.22831~60.52235,22.21873~60.5245,22.21595 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51975,22.21418~60.52028,22.23079~60.51605,22.23247~60.51343,22.23208~60.51251,22.2238~60.51284,22.21253~60.51642,22.20939 -undefined^#FF0000,5,1,#ff8800,0.4^^60.5124,22.21225~60.51248,22.22451~60.51299,22.23247~60.50741,22.23603~60.50545,22.23423~60.50505,22.22405~60.50632,22.20916~60.50953,22.20603~60.51158,22.20914 -undefined^#FF0000,5,1,#ff8800,0.4^^60.50515,22.21667~60.49938,22.21689~60.50086,22.23793~60.50539,22.23839~60.50476,22.22388 -undefined^#FF0000,5,1,#ff8800,0.4^^60.56523,22.23268~60.56325,22.23641~60.55938,22.23357~60.55631,22.23255~60.55635,22.22264~60.55931,22.22038~60.56377,22.22117~60.56525,22.22697 -undefined^#FF0000,5,1,#ff8800,0.4^^60.59679,22.27705~60.59422,22.28856~60.58484,22.27633~60.59074,22.261~60.59537,22.26289 -undefined^#FF0000,5,1,#ff8800,0.4^^60.60622,22.28272~60.60374,22.29667~60.59449,22.2892~60.59743,22.27614 -undefined^#FF0000,5,1,#ff8800,0.4^^60.5469,22.2341~60.54117,22.23667~60.54289,22.25424~60.54653,22.25504~60.54902,22.25303~60.5496,22.24528~60.54848,22.23719 -undefined^#FF0000,5,1,#ff8800,0.4^^60.53373,22.23598~60.53299,22.25298~60.5291,22.25375~60.52862,22.24042~60.53072,22.23656 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49101,22.19397~60.49163,22.19834~60.49194,22.20178~60.4921,22.20437~60.49179,22.20583~60.49126,22.2083~60.48972,22.20796~60.48979,22.2039~60.48898,22.19994~60.4889,22.19673~60.4897,22.19482 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4934,22.17886~60.48956,22.18084~60.4911,22.19373~60.49171,22.19841~60.49219,22.20442~60.49339,22.21451~60.4971,22.21457 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49721,22.14869~60.50015,22.16573~60.49277,22.17238~60.48988,22.15109 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48622,22.15035~60.48616,22.14137~60.49151,22.13889~60.49218,22.14262~60.49193,22.14929~60.48956,22.15012 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48615,22.14136~60.48618,22.15052~60.48319,22.15037~60.48113,22.14966~60.47855,22.14669~60.48296,22.13831 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46621,22.01291~60.4756,22.03136~60.46964,22.04724~60.45966,22.02782 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48793,22.05986~60.48292,22.06321~60.48423,22.07634~60.4891,22.07471 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47963,22.0434~60.48179,22.04952~60.48136,22.05795~60.47832,22.06057~60.47644,22.05118~60.4777,22.04725 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47451,22.05205~60.47139,22.04357~60.47441,22.03658~60.47698,22.04613 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48013,22.04005~60.47721,22.04623~60.4745,22.03626~60.47745,22.02811~60.47991,22.03291 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46934,22.00377~60.46376,22.006~60.45842,22.00107~60.45739,21.99416~60.45956,21.9855~60.4627,21.98495~60.46486,21.9869~60.46816,21.99042~60.47118,21.99553~60.47116,22.00085 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4583,21.9657~60.45409,21.96832~60.45339,21.98699~60.45687,21.98618~60.45903,21.97556 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46479,21.93772~60.4601,21.94146~60.45912,21.95794~60.45933,21.96746~60.46305,21.96746~60.46538,21.95206 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45817,21.93747~60.45787,21.95395~60.45461,21.96017~60.44968,21.95759~60.44452,21.94811~60.44901,21.93678~60.4558,21.93259 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47289,21.92545~60.47127,21.93193~60.4642,21.93661~60.45933,21.93905~60.45779,21.93472~60.45682,21.93004~60.46058,21.92725~60.46553,21.92554 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44672,21.99368~60.44539,22.01072~60.43828,22.0106~60.43692,21.99503~60.4419,21.98714 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43249,21.99471~60.42817,21.99317~60.42641,21.99991~60.42794,22.00707~60.43068,22.00725~60.43279,22.00142 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4291,22.01385~60.42671,22.02724~60.4225,22.02561~60.42091,22.01817~60.42152,22.00729~60.42571,22.00965 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43711,22.03643~60.43147,22.03844~60.43175,22.02212~60.43729,22.02329~60.43808,22.03051 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43713,22.03784~60.43264,22.03969~60.4338,22.05253~60.4375,22.05188~60.43833,22.04534 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43237,22.04244~60.43385,22.05553~60.43279,22.06823~60.42902,22.06797~60.42481,22.06334~60.42356,22.05095~60.42731,22.04409 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44632,22.01141~60.43693,22.01184~60.43838,22.03102~60.4431,22.0342~60.44734,22.02842 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45153,21.99738~60.45208,22.01853~60.44772,22.0278~60.44674,22.0081~60.4474,21.99635 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45536,21.99716~60.45548,22.01993~60.45229,22.01896~60.45182,21.99755 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45817,22.00171~60.45587,22.00239~60.45578,22.02025~60.45977,22.02428~60.46318,22.01614~60.46463,22.00757 -undefined^#FF0000,5,1,#ff8800,0.4^^60.38468,21.92931~60.3751,21.92828~60.37034,21.933~60.37009,21.94914~60.37247,21.95781~60.37684,21.96141~60.38138,21.95583~60.38395,21.9437 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39196,21.96356~60.38507,21.95802~60.38214,21.95519~60.38389,21.94663~60.38839,21.94785~60.3915,21.95289~60.39255,21.95558 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39219,21.96429~60.39327,21.97081~60.39785,21.97493~60.40239,21.98922~60.39959,22.00454~60.3896,22.00042~60.38519,21.98236~60.38545,21.96723~60.38557,21.9592 -undefined^#FF0000,5,1,#ff8800,0.4^^60.37034,21.85902~60.37798,21.86576~60.379,21.88296~60.37701,21.89919~60.37115,21.89893~60.36266,21.89318 -undefined^#FF0000,5,1,#ff8800,0.4^^60.36147,21.91858~60.34742,21.89533~60.35684,21.81905~60.36498,21.816~60.36818,21.82743~60.36631,21.86932~60.3619,21.89292 -undefined^#FF0000,5,1,#ff8800,0.4^^60.345,21.93592~60.35307,21.93884~60.35161,21.96677~60.34273,21.96631 -undefined^#FF0000,5,1,#ff8800,0.4^^60.34721,21.8967~60.34462,21.93069~60.35386,21.93677~60.36105,21.94742~60.36139,21.91931 -undefined^#FF0000,5,1,#ff8800,0.4^^60.37034,21.91867~60.36958,21.96193~60.36075,21.95832~60.36209,21.91776 -undefined^#FF0000,5,1,#ff8800,0.4^^60.33213,21.94819~60.33858,22.00361~60.33052,22.04098~60.31658,22.04338~60.30279,22.02163~60.31461,21.96875~60.3181,21.9125~60.3248,21.91719~60.32677,21.94377 -undefined^#FF0000,5,1,#ff8800,0.4^^60.31615,21.91275~60.31411,21.96682~60.30382,22.00253~60.2732,21.95927~60.27022,21.9039~60.27743,21.86993~60.31041,21.86229 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4588,21.89253~60.46342,21.91277~60.45913,21.92518~60.45353,21.92335~60.45278,21.89848 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41993,21.88532~60.41981,21.90974~60.41084,21.90961~60.40606,21.90507~60.40658,21.88517~60.41376,21.88275 -undefined^#FF0000,5,1,#ff8800,0.4^^60.40559,21.87069~60.3973,21.86145~60.39395,21.86816~60.3913,21.88425~60.39673,21.89541~60.40183,21.90391~60.40548,21.90203~60.40573,21.88763~60.40638,21.87778 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41411,21.86657~60.40649,21.87274~60.4061,21.86952~60.39758,21.85996~60.3999,21.84439~60.40677,21.84254~60.41169,21.84863 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41625,21.84606~60.41236,21.83934~60.4107,21.84571~60.41211,21.8485~60.41383,21.85666~60.41599,21.85209 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41608,21.82546~60.4126,21.83867~60.41642,21.84571~60.41676,21.8476~60.41523,21.85736~60.41847,21.86356~60.42265,21.85766~60.42449,21.84555~60.42942,21.83726~60.4271,21.82994~60.42242,21.82972~60.41895,21.82501 -undefined^#FF0000,5,1,#ff8800,0.4^^60.40953,21.82254~60.40847,21.8294~60.39851,21.83172~60.39584,21.81224~60.39433,21.78955~60.40101,21.78666~60.40682,21.80082 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39418,21.79404~60.38477,21.79782~60.3818,21.81018~60.39284,21.83845~60.3988,21.8367~60.39539,21.81194 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44168,21.89524~60.43967,21.92588~60.4315,21.92446~60.43124,21.91478~60.43522,21.91076~60.43514,21.89388 -undefined^#FF0000,5,1,#ff8800,0.4^^60.31005,22.31126~60.30829,22.31139~60.30549,22.32734~60.3091,22.33233 -undefined^#FF0000,5,1,#ff8800,0.4^^60.31726,22.31225~60.31029,22.31812~60.31014,22.31119~60.30795,22.30609~60.31543,22.30019 -undefined^#FF0000,5,1,#ff8800,0.4^^60.30946,22.30409~60.30757,22.30542~60.30366,22.30785~60.29686,22.30906~60.2964,22.29239~60.30305,22.29152~60.30762,22.29572~60.30874,22.29992 -undefined^#FF0000,5,1,#ff8800,0.4^^60.29872,22.3089~60.29602,22.30952~60.29306,22.30779~60.2912,22.31036~60.29087,22.31654~60.2948,22.31885~60.30009,22.31516~60.2991,22.31073 -undefined^#FF0000,5,1,#ff8800,0.4^^60.30564,22.32491~60.30443,22.32312~60.30334,22.31706~60.3037,22.30853~60.30703,22.30615~60.30808,22.31085 -undefined^#FF0000,5,1,#ff8800,0.4^^60.30238,22.31725~60.30307,22.32282~60.30508,22.3254~60.30326,22.33505~60.29891,22.32422~60.29814,22.31792~60.30027,22.31532 -undefined^#FF0000,5,1,#ff8800,0.4^^60.31741,22.31302~60.3105,22.31933~60.31371,22.33881~60.32013,22.3443~60.32292,22.3345~60.32233,22.32158 -undefined^#FF0000,5,1,#ff8800,0.4^^60.35167,22.34817~60.34309,22.34877~60.34296,22.37713~60.34534,22.39574~60.35086,22.39134~60.35266,22.37124~60.35292,22.35754 -undefined^#FF0000,5,1,#ff8800,0.4^^60.32516,22.33495~60.3187,22.36885~60.32113,22.38284~60.32541,22.38764~60.33406,22.35426~60.33033,22.34112 -undefined^#FF0000,5,1,#ff8800,0.4^^60.36324,22.34812~60.35388,22.34658~60.35574,22.37044~60.36562,22.36825 -Kukola^#FF0000,5,1,#ff8800,0.4^^60.41358,22.22011~60.40495,22.22367~60.40406,22.2398~60.40792,22.23734~60.41234,22.23324~60.41464,22.22954~60.41648,22.22409 -undefined^#FF0000,5,1,#ff8800,0.4^^60.50787,22.44893~60.50853,22.45912~60.50819,22.46699~60.50497,22.46741~60.50317,22.4648~60.50189,22.45962~60.50153,22.45521~60.50215,22.45004~60.50255,22.44831~60.50485,22.44773 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42716,22.51605~60.42152,22.51764~60.42273,22.53824~60.42689,22.53533~60.42836,22.52668 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42815,22.51498~60.42365,22.51652~60.42286,22.50405~60.42545,22.50265~60.42893,22.50496~60.4312,22.51206 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42341,22.51682~60.42117,22.51721~60.42146,22.51966~60.41629,22.51476~60.41456,22.50974~60.4169,22.50669~60.42265,22.50845 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41695,22.42666~60.40546,22.43262~60.40915,22.45477~60.42096,22.44649 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42114,22.44678~60.42228,22.457~60.41074,22.47228~60.40917,22.45584 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4226,22.45713~60.42427,22.45721~60.42595,22.46996~60.42413,22.48103~60.41961,22.48056~60.41902,22.46213 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42517,22.48142~60.41548,22.48056~60.41682,22.503~60.42228,22.50318~60.42232,22.49283 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45777,22.67578~60.45959,22.68239~60.45933,22.69372~60.45603,22.70428~60.45167,22.70831~60.44664,22.70857~60.44423,22.69632~60.44532,22.68055~60.44647,22.67252~60.44863,22.67166 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45944,22.67733~60.46092,22.69544~60.46672,22.69458~60.46699,22.66836~60.46703,22.6487~60.4624,22.64464 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46799,22.7305~60.46779,22.73739~60.465,22.74003~60.46261,22.73803~60.46217,22.73225~60.4629,22.72985 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45777,22.70256~60.45065,22.7114~60.46046,22.73801~60.46591,22.71834 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43692,22.68321~60.43455,22.69084~60.42925,22.69067~60.42557,22.6866~60.42517,22.68029~60.42591,22.67351~60.42804,22.66844~60.43214,22.66584~60.43605,22.67028~60.43688,22.67745 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4826,22.371~60.47977,22.38142~60.47488,22.38627~60.47167,22.37992~60.47257,22.36853~60.4745,22.36182 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47141,22.35692~60.46921,22.37027~60.4605,22.35851~60.46692,22.34488 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49049,22.3955~60.48326,22.40232~60.47488,22.38705~60.48028,22.38164~60.48316,22.37111 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49036,22.39645~60.49004,22.40401~60.49285,22.41177~60.49002,22.42026~60.48729,22.42443~60.48303,22.40307 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49323,22.41323~60.49226,22.41872~60.48829,22.42606~60.49018,22.4337~60.49554,22.43417~60.49989,22.42843~60.49778,22.41595 -undefined^#FF0000,5,1,#ff8800,0.4^^60.50025,22.43061~60.49552,22.43605~60.49056,22.43513~60.49038,22.45086~60.49707,22.44944~60.50221,22.44357 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51397,22.46206~60.50845,22.46544~60.50864,22.45903~60.50805,22.44888~60.51385,22.449 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51392,22.46251~60.50851,22.46565~60.50827,22.46807~60.51109,22.47562~60.51545,22.46873 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45911,22.21202~60.45806,22.22069~60.4563,22.23515~60.45568,22.23772~60.45322,22.23343~60.45646,22.20923 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49742,22.14861~60.50046,22.16552~60.50749,22.16646~60.51229,22.15288~60.51079,22.12724~60.5046,22.11986~60.49856,22.12634~60.49676,22.13936 -undefined^#FF0000,5,1,#ff8800,0.4^^60.5154,22.37237~60.5143,22.39314~60.50793,22.40026~60.50015,22.38808~60.49888,22.37503~60.50081,22.36358~60.50646,22.359~60.51193,22.3607 -undefined^#FF0000,5,1,#ff8800,0.4^^60.55994,22.41537~60.555,22.44945~60.57174,22.46909~60.57958,22.43482~60.57043,22.42093 -undefined^#FF0000,5,1,#ff8800,0.4^^60.65712,22.51081~60.62803,22.52145~60.62278,22.60523~60.64753,22.63429~60.6662,22.61381~60.66486,22.54679 -undefined^#FF0000,5,1,#ff8800,0.4^^60.37586,23.08399~60.40826,23.09137~60.40088,23.20724~60.35661,23.16847 -undefined^#FF0000,5,1,#ff8800,0.4^^60.5184,22.29066~60.50809,22.2868~60.50501,22.26305~60.50686,22.23835~60.51316,22.23453~60.51705,22.24268 -undefined^#FF0000,5,1,#ff8800,0.4^^60.58368,22.71183~60.5907,22.72732~60.58924,22.75895~60.57904,22.75406~60.57702,22.72431 -undefined^#FF0000,5,1,#ff8800,0.4^^60.66418,23.1142~60.64273,23.11944~60.645,23.1651~60.66338,23.1621 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47127,22.38121~60.46374,22.39039~60.46065,22.42348~60.46995,22.43357~60.48456,22.4226~60.48176,22.40141 -undefined^#FF0000,5,1,#ff8800,0.4^^60.59725,22.8871~60.59487,22.92104~60.58161,22.9095~60.57626,22.87997~60.58278,22.86698~60.59122,22.87079 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48497,22.23079~60.47757,22.23225~60.47539,22.23637~60.47755,22.24371~60.47765,22.25101~60.4807,22.2507~60.48555,22.24749 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4803,22.22448~60.47454,22.23796~60.46833,22.23435~60.47094,22.22033 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46405,22.09132~60.4627,22.11106~60.47455,22.11768~60.4849,22.11197~60.48188,22.09514~60.47191,22.09863 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46224,22.29508~60.46122,22.29679~60.4604,22.29517~60.46062,22.29415~60.46164,22.29403~60.46233,22.29434 -undefined^#FF0000,5,1,#ff8800,0.4^^60.6386,23.48019~60.64036,23.54104~60.61247,23.55108~60.60559,23.51006~60.61444,23.45856~60.62842,23.45907 -Moikoinen^#FF0000,5,1,#ff8800,0.4^^60.4222,22.23671~60.41807,22.23096~60.41564,22.23169~60.4083,22.23886~60.40847,22.26201~60.42222,22.24487 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46904,22.2353~60.46183,22.25873~60.45824,22.24483~60.46736,22.23274 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46354,22.21109~60.46532,22.23178~60.45828,22.24375~60.45807,22.22897~60.46028,22.21318 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48002,22.29883~60.47485,22.29218~60.47239,22.29136~60.47177,22.30714~60.47418,22.31576~60.47621,22.31538~60.48083,22.3011 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47194,22.28444~60.46773,22.27778~60.46291,22.27042~60.46123,22.27052~60.46067,22.27275~60.46331,22.28014~60.46655,22.28452~60.47039,22.28564 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46454,22.27109~60.47194,22.28216~60.47447,22.2786~60.47493,22.26699~60.47301,22.26558~60.46881,22.26787 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44633,22.27881~60.44291,22.28361~60.43985,22.28621~60.44399,22.30557~60.44694,22.29819~60.44807,22.28946~60.44718,22.28422~60.44777,22.28313 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46486,22.29223~60.46296,22.29501~60.46267,22.29761~60.46128,22.2971~60.46032,22.29738~60.46069,22.30326~60.46243,22.30332~60.46421,22.3033~60.46594,22.29844~60.46581,22.29539 -undefined^#FF0000,5,1,#ff8800,0.4^^60.59362,22.32869~60.5814,22.38927~60.59623,22.42342~60.63292,22.45499~60.65058,22.46426~60.65584,22.36526~60.63174,22.35328~60.61553,22.34354~60.59615,22.33143 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44566,22.32894~60.44287,22.33761~60.44321,22.34782~60.44984,22.34589~60.45284,22.34048~60.45192,22.3356~60.44968,22.33216 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44342,22.35014~60.44365,22.36593~60.45433,22.36259~60.4541,22.34633 -undefined^#FF0000,5,1,#ff8800,0.4^^59.98508,22.40559~59.96861,22.46199~59.90874,22.41863~59.91541,22.38107 -undefined^#FF0000,5,1,#ff8800,0.4^^60.18318,22.75921~60.16474,22.7853~60.14331,22.70053~60.1664,22.67258~60.18195,22.7181 -undefined^#FF0000,5,1,#ff8800,0.4^^60.36619,22.69037~60.35583,22.75114~60.30695,22.70246~60.32315,22.59175~60.359,22.64749 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46456,22.29205~60.4637,22.29341~60.46181,22.29109~60.46104,22.29223~60.45895,22.28907~60.4601,22.2872~60.46092,22.28459~60.46213,22.28363~60.46398,22.28696 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47333,22.01433~60.47077,22.02031~60.46786,22.01456~60.47116,22.00777 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41684,22.28808~60.41429,22.28833~60.41165,22.288~60.40885,22.28525~60.40811,22.2759~60.40868,22.27027~60.41208,22.2701~60.4155,22.27276 -undefined^#FF0000,5,1,#ff8800,0.4^^60.40938,22.31293~60.40543,22.32123~60.4055,22.33379~60.40597,22.34177~60.40995,22.3419~60.41107,22.32617 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39509,22.25658~60.40071,22.27487~60.39686,22.28173~60.38912,22.27937~60.39126,22.2647 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45149,22.28207~60.45296,22.28687~60.45331,22.2863~60.45396,22.28784~60.4547,22.2914~60.45718,22.28964~60.45899,22.28822~60.45989,22.28723~60.46017,22.28231~60.45966,22.28067~60.45865,22.28021~60.45842,22.28321~60.45696,22.28289~60.4546,22.28215~60.45266,22.28019 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45324,22.27609~60.45293,22.27966~60.45275,22.28014~60.45463,22.28203~60.45742,22.28287~60.45835,22.28304~60.45865,22.27854 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44228,22.29847~60.44443,22.30868~60.43893,22.31718~60.43753,22.31481~60.43776,22.31424~60.43729,22.31155~60.43557,22.31207~60.43555,22.31654~60.43732,22.31509~60.4388,22.31754~60.43444,22.32246~60.43402,22.30368 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43727,22.31164~60.4377,22.3142~60.43561,22.31633~60.43565,22.31219 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45992,22.29797~60.4596,22.29947~60.45688,22.30291~60.45533,22.29768~60.45492,22.29541~60.45611,22.2943~60.45769,22.29258~60.45845,22.29274 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45565,22.29187~60.45603,22.29421~60.45776,22.29241 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47624,22.25182~60.47511,22.26259~60.46551,22.26783~60.4635,22.26281~60.46648,22.25036~60.47077,22.25405 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46934,22.23543~60.47026,22.23609~60.46751,22.24691~60.46584,22.2509~60.46325,22.26299~60.46041,22.26624~60.46001,22.26549~60.4625,22.26286~60.46526,22.24964~60.46719,22.24547 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48243,22.17861~60.47958,22.18204~60.47522,22.17045~60.47775,22.1646~60.4818,22.16964~60.48068,22.17768 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47765,22.1641~60.4734,22.15647~60.47125,22.1602~60.47505,22.17021 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48956,22.15075~60.49237,22.17243~60.4882,22.18397~60.48126,22.18487~60.48096,22.18352~60.48503,22.16991~60.47459,22.15683~60.47838,22.14752~60.48213,22.15128 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47661,22.24395~60.47092,22.2442~60.46919,22.25191~60.47105,22.25339~60.47688,22.25072 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47539,22.23701~60.4769,22.24347~60.47091,22.24367~60.46943,22.24973~60.46741,22.24789~60.47052,22.23623~60.47465,22.23851 -undefined^#FF0000,5,1,#ff8800,0.4^^60.41406,22.35246~60.41293,22.38932~60.40009,22.39785~60.39995,22.35018 -undefined^#FF0000,5,1,#ff8800,0.4^^60.42279,22.38198~60.41431,22.38639~60.41284,22.39108~60.41059,22.3964~60.41284,22.42172~60.41915,22.42558~60.42347,22.41571 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4365,22.3866~60.43286,22.38798~60.43467,22.40756~60.43889,22.40205~60.43912,22.3941~60.43846,22.38893 -undefined^#FF0000,5,1,#ff8800,0.4^^60.20622,21.88622~60.18907,21.88725~60.18579,21.91975~60.1987,21.92636 -undefined^#FF0000,5,1,#ff8800,0.4^^60.20912,21.70418~60.07443,21.68495~60.10112,21.41399~60.17724,21.43634~60.20639,21.54419 -undefined^#FF0000,5,1,#ff8800,0.4^^60.17414,21.70238~60.17166,21.77147~60.14718,21.76714~60.14894,21.70101 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39145,22.28499~60.39729,22.32338~60.3877,22.33006~60.38116,22.28354 -undefined^#FF0000,5,1,#ff8800,0.4^^60.39168,22.28482~60.39768,22.32306~60.4032,22.30824~60.3984,22.28282 -undefined^#FF0000,5,1,#ff8800,0.4^^60.38299,22.30276~60.36143,22.31478~60.37985,22.45382~60.41216,22.49107 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47968,22.04209~60.48397,22.0563~60.49138,22.0521~60.49029,22.03671 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45732,22.24006~60.45442,22.24632~60.45666,22.25307~60.45759,22.25321~60.45928,22.25848~60.45959,22.26538~60.46236,22.26235~60.45799,22.24479 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45757,22.25328~60.45645,22.25334~60.45614,22.25654~60.4572,22.26027~60.45916,22.25863 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48146,22.18101~60.47916,22.18333~60.47609,22.18837~60.47351,22.19223~60.47222,22.19401~60.46783,22.20032~60.463,22.20689~60.46074,22.20953~60.4594,22.21127~60.45874,22.21588~60.4563,22.23555~60.4549,22.24193~60.4545,22.24388~60.45421,22.24468~60.4544,22.24516~60.45482,22.24415~60.45674,22.23579~60.4602,22.21273~60.4663,22.2036~60.47311,22.1943~60.47718,22.18974 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51971,21.69817~60.5089,21.77742~60.48793,21.77971~60.46991,21.76529~60.43724,21.74709~60.39831,21.72447~60.38774,21.68358~60.39503,21.58333~60.42358,21.54535~60.45749,21.55515~60.49596,21.62521 -undefined^#FF0000,5,1,#ff8800,0.4^^60.4914,21.85867~60.47795,21.88854~60.46416,21.88168~60.46255,21.86331~60.47169,21.84992~60.48239,21.84906 -undefined^#FF0000,5,1,#ff8800,0.4^^60.51591,21.87249~60.50674,21.85773~60.50167,21.86408~60.50746,21.88889 -undefined^#FF0000,5,1,#ff8800,0.4^^60.50991,21.79688~60.50553,21.82198~60.49879,21.82486~60.48869,21.81559~60.48873,21.80606~60.50384,21.79046 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45598,22.18232~60.45588,22.18356~60.4531,22.18826~60.45288,22.18644~60.45144,22.18341~60.45199,22.18199 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45617,22.1823~60.45768,22.18238~60.45749,22.18878~60.45545,22.18951~60.45384,22.19146~60.45318,22.18846~60.45605,22.18388 -undefined^#FF0000,5,1,#ff8800,0.4^^60.43436,22.32058~60.43439,22.32183~60.43321,22.32286~60.43207,22.32394~60.43124,22.3248~60.43008,22.32702~60.4292,22.32844~60.42856,22.32923~60.42741,22.33048~60.42576,22.33362~60.42437,22.33808~60.42352,22.34186~60.42279,22.34868~60.42235,22.35496~60.42233,22.36175~60.42285,22.36895~60.4238,22.37793~60.42438,22.38664~60.4246,22.39398~60.42425,22.40649~60.42464,22.42052~60.4258,22.42968~60.42737,22.43592~60.43075,22.44551~60.43544,22.45807~60.43798,22.46386~60.4401,22.47229~60.44153,22.48229~60.44484,22.49588~60.44721,22.51468~60.4474,22.5242~60.44547,22.54412~60.44581,22.5598~60.44596,22.56922~60.44384,22.57978~60.44321,22.58862~60.44287,22.60699~60.44183,22.61746~60.43726,22.63527~60.43535,22.64608~60.42779,22.66312~60.4261,22.67222~60.42447,22.67829~60.42382,22.68591~60.42422,22.69638~60.42824,22.71893~60.42838,22.72384~60.42741,22.72839~60.42671,22.72444~60.42682,22.71627~60.42488,22.70509~60.42352,22.69706~60.42302,22.68542~60.42353,22.67789~60.42438,22.67115~60.43058,22.6542~60.43428,22.64493~60.43859,22.6252~60.44178,22.60719~60.44291,22.57907~60.44441,22.56282~60.44428,22.5444~60.44597,22.52369~60.4463,22.51513~60.44392,22.49678~60.44103,22.4841~60.4393,22.47249~60.43715,22.46483~60.43517,22.45975~60.42683,22.437~60.42511,22.4297~60.42377,22.42051~60.42343,22.40694~60.42392,22.39391~60.42351,22.38226~60.42159,22.36168~60.42299,22.34173~60.42516,22.3333~60.42731,22.32928~60.42832,22.32754~60.42946,22.32621 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49531,22.25345~60.49046,22.27886~60.48335,22.27249~60.48353,22.24978 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47545,22.26723~60.48539,22.27615~60.49287,22.28323~60.49262,22.28757~60.4907,22.29787~60.48645,22.297~60.48369,22.29494~60.47769,22.28517~60.47541,22.28491 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49647,22.33471~60.5015,22.34155~60.49406,22.36911~60.48475,22.34869~60.4904,22.33324~60.49375,22.33852 -undefined^#FF0000,5,1,#ff8800,0.4^^60.44783,22.28333~60.44728,22.28426~60.44814,22.28945~60.44701,22.29825~60.44403,22.30577~60.44451,22.30853~60.44911,22.30057~60.44837,22.2984~60.44967,22.29512~60.45097,22.29296 -undefined^#FF0000,5,1,#ff8800,0.4^^60.45103,22.29307~60.45194,22.29418~60.45214,22.29715~60.45136,22.29699~60.44916,22.30051~60.44841,22.2984~60.44968,22.29516 -undefined^#FF0000,5,1,#ff8800,0.4^^60.57936,22.33671~60.57533,22.3661~60.56055,22.34237~60.56665,22.3174 -undefined^#FF0000,5,1,#ff8800,0.4^^60.46446,22.27107~60.46302,22.27036~60.47198,22.28431~60.47193,22.28227 -undefined^#FF0000,5,1,#ff8800,0.4^^60.54736,22.38027~60.54874,22.392~60.548,22.40833~60.53136,22.40816~60.53035,22.38348~60.53702,22.37821~60.53801,22.38301 -undefined^#FF0000,5,1,#ff8800,0.4^^60.49674,22.09445~60.48685,22.09827~60.4864,22.10774~60.48819,22.11851~60.4976,22.11124~60.49871,22.1029 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48594,22.07831~60.49205,22.08089~60.49691,22.08612~60.4966,22.09404~60.4867,22.09783~60.48591,22.09568~60.48578,22.09098 -Brinkhall^#FF0000,5,1,#ff8800,0.4^^60.37361,22.24577~60.36725,22.25298~60.36402,22.23474~60.358,22.21557~60.36972,22.20759~60.37255,22.22792 -Armonlaakso^#FF0000,5,1,#ff8800,0.4^^60.3765,22.26126~60.36863,22.26452~60.36882,22.28371~60.37694,22.28319 -Harjattula^#FF0000,5,1,#ff8800,0.4^^60.36886,22.28379~60.37707,22.28371~60.3772,22.29585~60.37223,22.30456~60.36846,22.30559 -Laalahti^#FF0000,5,1,#ff8800,0.4^^60.36296,22.28976~60.35483,22.29624~60.35212,22.27681~60.36107,22.2713 -Myllykylä^#FF0000,5,1,#ff8800,0.4^^60.36092,22.23165~60.34942,22.24148~60.34173,22.20708~60.3533,22.19969 -Hylkilahti^#FF0000,5,1,#ff8800,0.4^^60.36048,22.16539~60.36279,22.1841~60.35515,22.18886~60.35268,22.16932 -Samppa^#FF0000,5,1,#ff8800,0.4^^60.37781,22.1226~60.3714,22.13831~60.36179,22.12455~60.36735,22.1126 -Artukka^#FF0000,5,1,#ff8800,0.4^^60.37968,22.12423~60.37221,22.13994~60.37955,22.15932~60.38371,22.15342 -Uusikylä^#FF0000,5,1,#ff8800,0.4^^60.37427,22.18337~60.37548,22.19766~60.38304,22.1956~60.38242,22.18103 -Tammivalkama^#FF0000,5,1,#ff8800,0.4^^60.38364,22.21929~60.38265,22.23041~60.37697,22.22736~60.37883,22.21558 -Kakskerran koulu^#FF0000,5,1,#ff8800,0.4^^60.36961,22.17073~60.37027,22.17869~60.36624,22.18013~60.36522,22.17186 -Laukkavuori^#FF0000,5,1,#ff8800,0.4^^60.4453,22.32688~60.44323,22.33243~60.43775,22.33392~60.43999,22.32229 -Itäkeskus^#FF0000,5,1,#ff8800,0.4^^60.44346,22.35808~60.44244,22.35827~60.44249,22.36081~60.44351,22.36066 -Kansanpuisto^#FF0000,5,1,#ff8800,0.4^^60.43241,22.18311~60.42627,22.18908~60.42303,22.17673~60.42923,22.16934 -Pansio^#FF0000,5,1,#ff8800,0.4^^60.45072,22.13895~60.45236,22.14807~60.45108,22.15775~60.44835,22.16389~60.44122,22.17071~60.43832,22.13296~60.4417,22.12108 -@@@@@@V2 diff -r 9139a94e540c -r 3b86597c5a88 regions.ini --- a/regions.ini Thu Mar 29 23:55:36 2018 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,249 +0,0 @@ -[Kaarina] -Kaarina = 6043 -Piikkiö = 6175 -Hadvala = 6171 -Puosta = 6351 -Runko = 6156 -Tuorla = 6149 -Raadelma = 6153 -Sipilänmäki = 6227 -Piispanlähde = 6015 -Kesämäki = 6060 -Teerimäki = 6076 -Lemu = 6279 -Torppala = 6280 -Kuusisto = 6216 -Pompo = 6112 -Tammi = 6117 -Littoinen = 6085 -Piispanristi = 6282 - -[Paimio] -Paimio = 6619 -Paimion sairaala = 6664 -Hanhijoki = 6657 -Naskarla = 6638 -Helsingin valtatie = 6753 - -[Lieto] -Lieto = 5021 -Hakkinen = 5004 -Loukinainen = 5009 -Sillilä = 5011 -Piispala = 5030 -Jokila = 5035 -Vieru = 5018 -Ilmarinen = 5070 -Lieto as = 5112 -Tarvasjoki = 5423 -Avanti = 5470 -Rauhakylä = 5131 - -[Kemiönsaari] -Kemiö = 8930 -Kasnäs = 8925 - -[Sauvo] -Sauvo = 8940 - -[Aura] -Aura = 8024 - -[Salo] -Salo = 8900 - -[Korpo] -Korpo = 8960 - -[Koski Tl] -Koski Tl = 8810 - -[Somero] -Somero = 8820 - -[Marttila] -Marttila = 8800 - -[Raisio] -Raisio = 2010 -Mylly = 2117 -Petäsmäki = 2063 -Kaanaa = 2037 -Vuorenpää = 2028 -Nuorikkala = 2079 -Metsäaro = 2089 -Ihala = 2098 -Vaisaari = 2103 -Maksla = 2150 -Kuninkoja = 2129 -Tikanmaa = 2136 - -[Naantali] -Naantali = 3016 -Ahteentaka = 3290 -Kurala (Naantali) = 3196 -Haapala = 3283 -Ajola = 3282 -Ylttinen = 3192 -Tamminiemi = 3279 -Kaivopuisto = 3120 -Suovuori = 3109 -Karvetti = 3202 -Poikko = 3184 -Meripirtti = 3179 -Velkua = 3095 -Merimasku = 3058 -Lieranta = 3065 -Rauduinen = 3069 -Käkölä = 3236 -Kaivola = 3229 -Kuivalahti = 3237 -Kultaranta = 3027 -Linnavuori = 3122 -Viiala = 3024 -Viluluoto = 3010 -Montola = 3157 -Airismaa = 3171 -Aaslaluoto = 3308 -Ruona = 3220 -Rymättylä = 3151 -Velusmaa = 3287 -Porhonkallio = 3037 -Asikko = 3036 -Hämölä = 3270 -Herttula = 3235 -Pyöli = 3247 -Röölä = 3166 -Salonkylä = 3301 -Okala = 3297 -Suutarla = 3286 -Haijainen = 3231 - -[Rusko] -Rusko = 4017 -Vahto = 4069 -Hemmola = 4077 -Silvola = 4086 -Kahari = 4093 -Munittula = 4012 -Peijerlä = 4058 -Paasniittu = 4036 -Ojanto = 4004 - -[Pargas] -Pargas = 8137 -Björkhagen = 8125 -Storäng = 8121 -Norrby = 8142 -Österby = 8140 -Munkviken = 8129 -Tennby = 8127 -Kårkulla = 8105 -Kyrkäng = 8109 -Kirjala = 8102 -Nagu = 8950 -Pärnäs = 8951 - -[Turku] -Artukainen = 1513 -auvaismäki = 1102 -Friskala = 394 -Jyrkkälä = 758 -Halinen = 1628 -Harittu = 1489 -Hepokulta = 26 -Hyrköinen = 4060 -Häppilä = 409 -Härkämäki = 761 -Illoinen = 324 -Ilpoinen = 456 -Impivaara = 1564 -Itäharju = 1805 -Itäranta = 332 -Ispoinen = 647 -Jäkärlä = 1366 -Jänessaari = 437 -Kaistarniemi = 1747 -Kastu = 627 -Kasarmialue = 1797 -Katariina = 516 -Kauppatori = T1 -Kerttuli = 867 -Kirkkotien terveyskeskus = 218 -Koivula = 788 -Kohmo = 1651 -Konserttitalo = 18 -Kupittaa as = 870 -Kupittaa = 1046 -Kupittaanpuisto = 1972 -Kurala = 1660 -Kurjenmäki = 1688 -Kuuvuori = 64 -Kähäri = 1022 -Iso-Heikkilä = 768 -Lauste = 708 -Lauttaranta = 128 -Lentoasema = 1586 -Lehmusvalkama = 1802 -Liljalaakso = 592 -Linja-autoasema = 41 -Logomo = 1017 -Luolavuori = 1721 -Luostarinmäki = 864 -Länsinummi = 818 -Majakkaranta = 81 -Marjaniemi = 534 -Martti = 74 -Messukeskus = 1521 -Metsämäki = 256 -Mäntymäki = 1800 -Moisio = 1066 -Muhkuri = 899 -Mälikkälä = 781 -Naantalin pikatie = 1542 -Nummenmäki = 62 -Nummen koulu = 1826 -Nättinummi = 30 -Oriketo = 1435 -Paattinen = 1127 -Papinsaari = 352 -Patterinhaka = 578 -Peltola = 1455 -Pikisaari = 124 -Pläkkikaupunki = 780 -Pohjola = 1806 -Port Arthur = 9 -Puutori = 286 -Pääskyvuori = 1964 -Raunistula = 224 -Raunistulan puistotie = 177 -Rautatieasema = 144 -Runosmäki = 1015 -Räntämäki = 1441 -Satakunnantie = 20 -Teräsrautela = 808 -Saaro = 556 -Saramäki = 250 -Satama = 1 -Skanssi = 349 -Suikkila = 485 -Särkilahti = 404 -Länsikeskus = 476 -Takakirves = 621 -Tortinmäki = 1149 -Tuomiokirkkotori = 131 -Turkuhalli = 1516 -TYKS = 1030 -Uittamo = 920 -Urusvuori = 1587 -Vaala = 1500 -Vasaramäki = 1967 -Varissuo = 828 -Verkahovi = 1601 -Vienola = 1020 -VII kaupunginosa = 109 -Vähä-Heikkilä = 944 -Yli-Maaria = 396 -Yliopisto = 65 -Ylioppilaskylä-Länsi = 445 -Ylioppilaskylä-Itä = 448 diff -r 9139a94e540c -r 3b86597c5a88 regions.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regions.py Fri Apr 13 17:32:40 2018 +0300 @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +from xml.etree import ElementTree +from geometry import * + +def parse_nodes(root): + nodes = {} + for child in root: + if child.tag == 'node': + lat, lon = float(child.attrib['lat']), float(child.attrib['lon']) + nodes[child.attrib['id']] = Location(lat, lon) + return nodes + +def parse_way(way, nodes): + result = {'shape': [], 'name': None} + for child in way: + if child.tag == 'nd': + result['shape'].append(child.attrib['ref']) + elif child.tag == 'tag': + if child.attrib['k'] == 'shape': + raise ValueError('tag "shape" is not allowed') + result[child.attrib['k']] = child.attrib['v'] + if result['shape'][-1] != result['shape'][0]: + raise ValueError('polygon for %r is not closed' % result) + result['shape'] = [nodes[ref] for ref in result['shape'][:-1]] + result['shape'] = Polygon(*result['shape']) + return result + +def parse_regions(filename): + tree = ElementTree.parse(filename) + root = tree.getroot() + nodes = parse_nodes(root) + regions = {} + for child in root: + if child.tag == 'way': + way = parse_way(child, nodes = nodes) + if 'region' in way and 'name' in way: + way['priority'] = int(way.get('priority', 1)) + regions[way['name']] = way + return regions diff -r 9139a94e540c -r 3b86597c5a88 service.py --- a/service.py Thu Mar 29 23:55:36 2018 +0300 +++ b/service.py Fri Apr 13 17:32:40 2018 +0300 @@ -11,6 +11,7 @@ from busroute import reduce_schedule import buses +regions = {} suffix_regions = {'naantalin pikatie', 'helsingin valtatie', 'kansanpuisto'} # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja @@ -28,7 +29,7 @@ reset_locale() -# Lataa käännökset +# Load translations class Translator: def __init__(self): self.languages = {} @@ -49,6 +50,18 @@ pass else: return name[:1].upper() + name[1:] + def load_region(self, region): + for key, value in region.items(): + if ':' in key: + name_type, language = key.split(':', 1) + if name_type.endswith('name') and language: + section = 'region_' + name_type + if section not in self.languages[language]: + self.languages[language][section] = {} + self.languages[language][section][region['name']] = value + def load_regions(self, regions): + for region in regions.values(): + self.load_region(region) tr = Translator() for file in listdir('tr'): @@ -56,7 +69,7 @@ def language_for_page(): from flask import request - if request.args.get('kääntämätön') is not None: + if request.args.get('untranslated') is not None: return None else: for language_name in tr.languages: @@ -67,22 +80,25 @@ def sign_elements(schedule_entry, format = 'medium'): from math import ceil - from busroute import greatly_simplify_name + from busroute import simplify_name trip_length = schedule_entry['trip'].length - schedule_entry['stop'].traveled_distance regions = schedule_entry['trip'].concise_schedule(schedule_entry['stop']) - if format == 'short': - regions = [greatly_simplify_name(region) for region in regions] - return reduce_schedule( - regions, - trip_length = trip_length, - format = format) + return [ + simplify_name(name) + for name in reduce_schedule( + regions, + trip_length = trip_length, + format = format + ) + ] def sign(schedule_entry, format = 'medium'): sign = sign_elements(schedule_entry, format = format) if sign: - sign_representation = ' - '.join(tr(place, 'places') for place in sign if place not in suffix_regions) - sign_representation += ''.join(' ' + tr(place, 'suffix-places') for place in sign if place in suffix_regions) - return sign_representation + # sign_representation = ' - '.join(tr(place, 'region_short_name') for place in sign if place not in suffix_regions) + # sign_representation += ''.join(' ' + tr(place, 'suffix-places') for place in sign if place in suffix_regions) + # return sign_representation + return ' - '.join(tr(place, 'region_short_name') for place in sign) else: return schedule_entry['trip'].schedule[-1].stop.name @@ -92,8 +108,8 @@ sign = reduce_schedule(schedule_entry['trip'].concise_schedule(schedule_entry['stop']), trip_length = trip_length, format = format) if sign: return { - 'destination': tr(sign[-1], 'places'), - 'via': [tr(place, 'places') for place in sign[:-1]], + 'destination': tr(sign[-1], 'region_short_name'), + 'via': [tr(place, 'region_short_name') for place in sign[:-1]], } else: return { @@ -171,9 +187,9 @@ return render_template( 'stop.html', schedule = schedule, - name = bus_stop.code + ' ' + tr(bus_stop.name, 'bus-stops', 'places'), + name = bus_stop.code + ' ' + tr(bus_stop.name, 'bus-stops'), link_to_map = bus_stop.location.link_to_map, - region = hasattr(bus_stop, 'region') and bus_stop.region or None, + region = hasattr(bus_stop, 'region_name') and bus_stop.region or None, location = bus_stop.location, cluster = bus_stop.cluster.url_name if len(bus_stop.cluster.stops) > 1 else None, tr = tr, @@ -230,7 +246,7 @@ def describe(bus_stop): schedule = [] from collections import defaultdict, Counter - from busroute import greatly_simplify_name + from busroute import simplify_name destinations_per_route = defaultdict(Counter) def route_key(route_ref): try: @@ -238,7 +254,7 @@ except ValueError: return () def filter_names(names): - if len(names) == 1 and names[0] == (bus_stop.region and greatly_simplify_name(bus_stop.region)): + if len(names) == 1 and names[0] == (bus_stop.region and simplify_name(bus_stop.region)): return type(names)() else: return names @@ -285,7 +301,7 @@ ): result.append(( list(condense_route_list(sorted(routes, key = route_key))), - ' - '.join(tr(region, 'regions') for region in regions) + ' - '.join(tr(region, 'region_short_name') for region in regions) )) return { 'night-routes': night_routes, @@ -613,10 +629,10 @@ if profile['regions']['use-regions']: if halt.stop.region != region and not (region and not halt.stop.region): if len(schedule) and not schedule[-1]['name']: - schedule[-1]['name'] = tr(halt.stop.region or '', 'places') + schedule[-1]['name'] = tr(halt.stop.region or '', 'region_name') else: schedule.append({ - 'name': tr(halt.stop.region or '', 'places'), + 'name': tr(halt.stop.region or '', 'region_name'), 'time': formatted_time, 'stops': [], 'index': len(schedule), @@ -624,7 +640,7 @@ region = halt.stop.region else: schedule.append({ - 'name': tr(halt.stop.name or '', 'bus-stops', 'places'), + 'name': tr(halt.stop.name or '', 'bus-stops'), 'time': formatted_time, 'stops': [], 'index': len(schedule), @@ -633,18 +649,18 @@ 'time': formatted_time, 'id': halt.stop.reference, 'code': halt.stop.code, - 'name': tr(halt.stop.name, 'bus-stops', 'places'), + 'name': tr(halt.stop.name, 'bus-stops'), }) sign = trip.concise_schedule() try: - sign = [simplify_name(sign[0]), simplify_name(sign[-1])] + sign = [sign[0], sign[-1]] except IndexError: sign = [trip.schedule[0].stop.name, trip.schedule[-1].stop.name] return render_template('trip.html', schedule = schedule, trip_reference = trip_reference, route = trip.route.reference, - description = ' - '.join(tr(place, 'places') for place in sign), + description = ' - '.join(tr(place, 'region_name') for place in sign), night = is_night_time(datetime.combine(today(), time()) + trip.schedule[-1].arrival_time), tr = tr, length = trip.length / 1000, @@ -700,7 +716,13 @@ args = parser.parse_args() profile.read(args.profile_path) -buses.load_buses(args.gtfs_zip_path) +if profile['regions']['use-regions']: + from regions import parse_regions + regions = parse_regions(profile['regions']['osm-path']) + tr.load_regions(regions) + import busroute + busroute.regions = regions +buses.load_buses(args.gtfs_zip_path, regions = regions) if __name__ == '__main__': app.run(debug = args.debug, port = args.port)