Lisää aluejuttuja

Wed, 21 Jun 2017 18:24:34 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 21 Jun 2017 18:24:34 +0300
changeset 27
f89504285945
parent 26
69cc75506d4f
child 28
670ffa424ded

Lisää aluejuttuja

busroute.py file | annotate | diff | comparison | revisions
compute-regions.py file | annotate | diff | comparison | revisions
region-representatives.json file | annotate | diff | comparison | revisions
regions.gmp file | annotate | diff | comparison | revisions
service.py file | annotate | diff | comparison | revisions
templates/cluster.html file | annotate | diff | comparison | revisions
templates/stop.html file | annotate | diff | comparison | revisions
--- a/busroute.py	Tue Jun 20 10:32:50 2017 +0300
+++ b/busroute.py	Wed Jun 21 18:24:34 2017 +0300
@@ -1,53 +1,42 @@
 #!/usr/bin/env python3
+
+replacements = {
+	"Ylioppilaskylä-Itä": "Ylioppilaskylä",
+	"Ylioppilaskylä-Länsi": "Ylioppilaskylä",
+	"Caribia": "Ylioppilaskylä",
+	"Jokila": "Lieto",
+	"Piispala": "Lieto",
+	'Saaro': 'Ruissalo',
+	'Silvola': 'Vahto',
+	'Hemmola': 'Vahto',
+	'Paasniittu': 'Ruskon keskusta',
+	'Kahari': 'Ruskon keskusta',
+	'Kemiö': 'Kemiönsaari',
+	'Kasnäs': 'Kemiönsaari',
+}
+
+# nimiä joista voidaan joustaa tarvittaessa
+abbreviations = {
+	'Raision keskusta': 'Raisio',
+	'Ruskon keskusta': 'Rusko',
+	'Naantalin keskusta': 'Naantali',
+	'Kaarinan keskusta': 'Kaarina',
+	'Kauppakeskus Mylly': 'Mylly',
+}
+
+def simplify_name(name):
+	name = replacements.get(name, name)
+	name = abbreviations.get(name, name)
+	return name
+
 def reduce_schedule(reitti, trip_length, whole = False):
 	length = ((trip_length / 600) + len(reitti)) / 2
-	def abstract_sign(sign):
-		abstractions = {
-			'Moikoinen': 'Hirvensalo',
-			'Maanpää': 'Hirvensalo',
-			'Papinsaari': 'Hirvensalo',
-			'Häppilä': 'Hirvensalo',
-			'Friskala': 'Hirvensalo',
-			'Kukola': 'Hirvensalo',
-			'Oriniemi': 'Hirvensalo',
-			'Haarla': 'Hirvensalo',
-			'Lauttasaari': 'Hirvensalo',
-			'Pikisaari': 'Hirvensalo',
-			'Pernon telakka': 'Perno',
-		}
-		try:
-			start = sign.index('Kauppatori')
-		except ValueError:
-			return sign
-		result = []
-		for i, place in enumerate(sign):
-			if i >= start:
-				abstract_place = abstractions.get(place, place)
-				if abstract_place not in result:
-					result.append(abstract_place)
-			else:
-				result.append(place)
-		return result
 	if not reitti:
 		return ''
 	eksoalueet = {
 		'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki',
 		'Kaivopuisto',
 	}
-	replacements = {
-		"Ylioppilaskylä-Itä": "Ylioppilaskylä",
-		"Ylioppilaskylä-Länsi": "Ylioppilaskylä",
-		"Caribia": "Ylioppilaskylä",
-		"Jokila": "Lieto",
-		"Piispala": "Lieto",
-		'Saaro': 'Ruissalo',
-		'Silvola': 'Vahto',
-		'Hemmola': 'Vahto',
-		'Paasniittu': 'Ruskon keskusta',
-		'Kahari': 'Ruskon keskusta',
-		'Kemiö': 'Kemiönsaari',
-		'Kasnäs': 'Kemiönsaari',
-	}
 	have_already = set()
 	i = 0
 	while i < len(reitti):
@@ -91,7 +80,7 @@
 		'Ilmarinen': 50,
 		'Vahto': 50,
 		'Ruskon keskusta': 200,
-		'Oriketo': 30,
+		'Oriketo': 50,
 		'Harittu': 40,
 		'Jäkärlä': 50,
 		'Paattinen': 100,
@@ -101,7 +90,7 @@
 		'Piikkiö': 100,
 		'Paimio': 100,
 		'Pargas': 50,
-		'Yli-Maaria': 50,
+		'Yli-Maaria': 70,
 		'Saramäki': 50,
 		'Tarvasjoki': 100,
 		'Marttila': 100,
@@ -124,15 +113,6 @@
 	if 'Kauppatori' not in reitti:
 		priorities['Länsikeskus'] = priorities['Skanssi'] = priorities['Kauppatori']
 
-	# nimiä joista voidaan joustaa tarvittaessa
-	abbreviations = {
-		'Raision keskusta': 'Raisio',
-		'Ruskon keskusta': 'Rusko',
-		'Naantalin keskusta': 'Naantali',
-		'Kaarinan keskusta': 'Kaarina',
-		'Kauppakeskus Mylly': 'Mylly',
-	}
-
 	from_place = reitti[0]
 	destination = reitti[-1]
 	reitti_arvot = {}
@@ -159,7 +139,7 @@
 	weights = weights[:3]
 	# jos kolmas kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan se pois
 	try:
-		if weights[2][0] != destination and weights[2][1] < (1000 / length ** 1.15):
+		if weights[2][0] != destination and weights[2][1] < (1200 / length ** 0.9):
 			del weights[2]
 	except IndexError:
 		pass
@@ -172,7 +152,6 @@
 	weights = sorted(weights, key = lambda paino: paino[2])
 	# muodostetaan sign..
 	sign = [paino[0] for paino in weights]
-	#sign = abstract_sign(sign)
 	# supista nimet jos mahdollista
 	def finalise(sign, abbreviation_level = 0):
 		if abbreviation_level > 0:
--- a/compute-regions.py	Tue Jun 20 10:32:50 2017 +0300
+++ b/compute-regions.py	Wed Jun 21 18:24:34 2017 +0300
@@ -12,10 +12,10 @@
 bus_stops = {}
 
 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']
-		bus_stops[tunniste] = sijainti
+	for row in read_csv(file):
+		location = Sijainti(float(row['stop_lat']), float(row['stop_lon']))
+		reference = row['stop_id']
+		bus_stops[reference] = location
 
 district_shapes = []
 for polygon in data[1].splitlines():
--- a/region-representatives.json	Tue Jun 20 10:32:50 2017 +0300
+++ b/region-representatives.json	Wed Jun 21 18:24:34 2017 +0300
@@ -7,6 +7,7 @@
 	"Tuorla": "6149",
 	"Raadelma": "6153",
 	"Sipilänmäki": "6227",
+	"Piispanlähde": "6015",
 	
 	"Paimio": "6619",
 	"Paimion sairaala": "6664",
@@ -88,7 +89,7 @@
 	"Kaivola": "3229",
 	"Kakskerta": "1764",
 	"Kastu": "627",
-	"Katariina": "1708",
+	"Katariina": "516",
 	"Kauppatori": "T1",
 	"Kerttuli": "867",
 	"Kultaranta": "3027",
--- a/regions.gmp	Tue Jun 20 10:32:50 2017 +0300
+++ b/regions.gmp	Wed Jun 21 18:24:34 2017 +0300
@@ -1,13 +1,13 @@
-roadmap^60.47037672221607, 22.021348696270596^16@undefined^#FF0000,5,1,#ff8800,0.4^^60.39482,22.2577~60.40037,22.27521~60.39147,22.28456~60.38851,22.27179
+roadmap^60.407187649046506, 22.331562262097012^16@undefined^#FF0000,5,1,#ff8800,0.4^^60.39482,22.2577~60.40037,22.27521~60.39147,22.28456~60.38851,22.27179
 polygon^#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
 polygon^#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
-polygon^#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
-polygon^#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
-polygon^#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
-polygon^#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
-polygon^#FF0000,5,1,#ff8800,0.4^^60.42148,22.17333~60.42584,22.18964~60.41902,22.1971~60.41534,22.18056
-polygon^#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
-polygon^#FF0000,5,1,#ff8800,0.4^^60.45775,22.29049~60.4599,22.29787~60.45951,22.29945~60.45688,22.3026~60.45537,22.29751~60.45501,22.29585~60.45465,22.29285~60.45619,22.29141
+undefined^#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
+undefined^#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
+undefined^#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.45775,22.29049~60.4599,22.29787~60.45951,22.29945~60.45688,22.3026~60.45537,22.29751~60.45501,22.29585~60.45465,22.29285~60.45619,22.29141
 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
@@ -69,7 +69,6 @@
 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.40898,22.26645~60.41573,22.27229~60.4162,22.27959~60.41694,22.28892~60.41809,22.29195~60.41392,22.29396~60.40429,22.28059~60.40683,22.26871
 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
@@ -227,4 +226,6 @@
 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
 @@@@@@
--- a/service.py	Tue Jun 20 10:32:50 2017 +0300
+++ b/service.py	Wed Jun 21 18:24:34 2017 +0300
@@ -127,19 +127,21 @@
 			'stop_id': schedule_entry['stop'].stop.reference,
 			'stop_name': tr(schedule_entry['stop'].stop.name, 'bus_stops'),
 		})
+	stops_in_cluster = sorted(
+		({
+			'id': stop.reference,
+			'name': tr(stop.name, 'bus_stops'),
+		} for stop in cluster.stops),
+		key = lambda stop: (len(stop['id']), stop['id'])
+	)
 	return render_template(
 		'cluster.html',
 		schedule = schedule,
 		name = cluster.name,
 		link_to_map = cluster.center.link_to_map,
 		location = cluster.center,
-		stops_in_cluster = sorted(
-			({
-				'id': stop.reference,
-				'name': tr(stop.name, 'bus_stops'),
-			} for stop in cluster.stops),
-			key = lambda stop: (len(stop['id']), stop['id'])
-		),
+		stops_in_cluster = stops_in_cluster,
+		amount_of_stops_in_cluster = len(stops_in_cluster),
 		tr = tr,
 	)
 
@@ -183,7 +185,26 @@
 		description = ' - '.join(tr(place, 'paikat') for place in sign),
 		night = is_night_time(datetime.combine(today(), time()) + trip.schedule[-1].arrival_time),
 		tr = tr,
-		length = trip.length / 1000
+		length = trip.length / 1000,
+	)
+
+@app.route('/linja/<name>')
+def route_page(name):
+	from buses import routes
+	route = routes[name.upper()]
+	schedule = []
+	for trip in route.trips:
+		if trip.is_served_at(today()) and datetime.combine(today(), time()) + trip.schedule[-1].arrival_time < now():
+			schedule.append({
+				'name': trip.reference,
+				'from': trip.from_place,
+				'to': trip.to_place,
+				'time': time_representation(datetime.combine(today(), time()) + trip.schedule[0].departure_time),
+			})
+	return render_template('route.html',
+		name = route.reference + ' ' + route.description,
+		tr = tr,
+		schedule = schedule,
 	)
 
 @app.route('/static/<path:path>')
--- a/templates/cluster.html	Tue Jun 20 10:32:50 2017 +0300
+++ b/templates/cluster.html	Wed Jun 21 18:24:34 2017 +0300
@@ -4,6 +4,7 @@
 	<link rel="stylesheet" type="text/css" href="/static/style.css" />
 	<meta charset='UTF-8' />
 	<title>{{name}}</title>
+	{% if amount_of_stops_in_cluster >= 5 %}
 	<style>
 	div.stops-in-cluster
 	{
@@ -12,12 +13,16 @@
 	}
 	div.stops-in-cluster ul
 	{
-		columns: 2;
+		columns: 3;
 	}
+	</style>
+	{% endif %}
+	<style>
 	div.stops-in-cluster li
 	{
 		text-align: center;
-	}/*
+	}
+	/*
 	body
 	{
 		background: url('/static/tausta-pysäkki.png') no-repeat center center fixed;
@@ -28,7 +33,7 @@
 <body>
 	<h1><img src="/static/iso-pysäkki.png" height="96" /> <span>{{name}}</span></h1>
 	<p id="pysäkki-info">
-	<a class="pysäkki-sijainti" href="{{linkki_karttaan}}" target="_blank">📌 ({{location}})</a>
+	<a class="pysäkki-sijainti" href="{{link_to_map}}" target="_blank">📌 ({{location}})</a>
 	</p>
 	<p>Pysäkit ryhmässä:</p>
 	<div class="stops-in-cluster">
--- a/templates/stop.html	Tue Jun 20 10:32:50 2017 +0300
+++ b/templates/stop.html	Wed Jun 21 18:24:34 2017 +0300
@@ -25,7 +25,7 @@
 	<p id="pysäkki-info">
 	{{region or ""}}

-	<a class="pysäkki-sijainti" href="{{linkki_karttaan}}" target="_blank">📌 ({{location}})</a>
+	<a class="pysäkki-sijainti" href="{{link_to_map}}" target="_blank">📌 ({{location}})</a>
 	</p>
 	{% if cluster %}
 	<p>

mercurial