alueet.py

Thu, 25 May 2017 16:41:21 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 25 May 2017 16:41:21 +0300
changeset 5
a65b680f1774
parent 2
48efa8ca14dd
child 6
88cfb916c852
permissions
-rwxr-xr-x

Paljon asioita

1
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
2 import sys, json
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
3 from misc import *
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
4 from geometria import *
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
5
1
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
6 with open('alueet.gmp') as file:
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
7 data = file.read().split('@')
1
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
8
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
9 with open('alue-edustajat.json') as file:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
10 representatives = json.load(file)
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
11
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
12 pysäkit = {}
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
13
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
14 with open('gtfs/stops.txt') as file:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
15 for rivi in lue_csv(file):
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
16 sijainti = Sijainti(float(rivi['stop_lat']), float(rivi['stop_lon']))
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
17 tunniste = rivi['stop_id']
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
18 pysäkit[tunniste] = sijainti
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
19
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
20 district_shapes = []
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
21 for polygon in data[1].splitlines():
1
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
22 polygon = polygon.split('^')
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
23 coordinates = []
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 for point in polygon[3].split('~'):
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 x, y = point.split(',')
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
26 coordinates.append(Sijainti(float(x), float(y)))
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
27 district_shapes.append(Monikulmio(*coordinates))
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
28
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
29 districts = {}
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
30 bus_stop_districts = {}
1
22c22ff63e66 Aluemuotoja
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
31
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
32 for name, stop_id in representatives.items():
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
33 if stop_id is None:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
34 continue
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
35 for district_shape in district_shapes:
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
36 if district_shape.sisältää_pisteen(pysäkit[stop_id]):
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
37 assert name not in districts
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
38 districts[name] = district_shape
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
39 district_shapes.remove(district_shape)
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
40 bus_stop_districts[stop_id] = name
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
41 break
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
42 else:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
43 print('cannot find a shape for %r' % name, file = sys.stderr)
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
44
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
45 for stop_id, stop_position in pysäkit.items():
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
46 for district, shape in districts.items():
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
47 if shape.sisältää_pisteen(stop_position):
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
48 bus_stop_districts[stop_id] = district
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
49 break
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
50 else:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
51 bus_stop_districts[stop_id] = None
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
52
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
53 covered = sum(int(bool(k)) for k in bus_stop_districts.values())
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
54 total = len(pysäkit)
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
55 print('%.1f%% bus stops covered.' % (covered * 100 / total), file = sys.stderr)
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 1
diff changeset
56 json.dump(bus_stop_districts, sys.stdout, indent = 2)

mercurial