--- a/alueet.py Sat Jun 10 16:36:36 2017 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -import sys, json -from misc import * -from geometria import * - -with open('alueet.gmp') as file: - data = file.read().split('@') - -with open('alue-edustajat.json') as file: - representatives = json.load(file) - -pysäkit = {} - -with open('gtfs/stops.txt') as file: - for rivi in lue_csv(file): - sijainti = Sijainti(float(rivi['stop_lat']), float(rivi['stop_lon'])) - tunniste = rivi['stop_id'] - pysäkit[tunniste] = sijainti - -district_shapes = [] -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)) - -districts = {} -bus_stop_districts = {} - -for name, stop_id in representatives.items(): - if stop_id is None: - continue - if stop_id not in pysäkit: - print('Alueen %r edustaja %r ei löydy aikatauluista' % (name, stop_id), file = sys.stderr) - else: - for district_shape in district_shapes: - if district_shape.sisältää_pisteen(pysäkit[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) - -for stop_id, stop_position in pysäkit.items(): - for district, shape in districts.items(): - if shape.sisältää_pisteen(stop_position): - bus_stop_districts[stop_id] = district - break - else: - bus_stop_districts[stop_id] = None - -covered = sum(int(bool(k)) for k in bus_stop_districts.values()) -total = len(pysäkit) -print('%.1f%% bus stops covered.' % (covered * 100 / total), file = sys.stderr) -json.dump(bus_stop_districts, sys.stdout, indent = 2)