Thu, 25 May 2017 16:41:21 +0300
Paljon asioita
alue-edustajat.json | file | annotate | diff | comparison | revisions | |
alueet.gmp | file | annotate | diff | comparison | revisions | |
alueet.py | file | annotate | diff | comparison | revisions | |
bussireitti.py | file | annotate | diff | comparison | revisions | |
bussit.py | file | annotate | diff | comparison | revisions | |
en.ini | file | annotate | diff | comparison | revisions | |
fi.ini | file | annotate | diff | comparison | revisions | |
geometria.py | file | annotate | diff | comparison | revisions | |
misc.py | file | annotate | diff | comparison | revisions | |
palvelu.py | file | annotate | diff | comparison | revisions | |
sv.ini | file | annotate | diff | comparison | revisions | |
templates/pysäkki.html | file | annotate | diff | comparison | revisions |
--- a/alue-edustajat.json Fri May 19 21:15:12 2017 +0300 +++ b/alue-edustajat.json Thu May 25 16:41:21 2017 +0300 @@ -1,4 +1,5 @@ { + "Kaarinan keskusta": "6043", "Piikkiö": "6175", "Hadvala": "6171", "Puosta": "6351", @@ -13,7 +14,36 @@ "Hanhijoki": "6657", "Naskarla": "6638", + "Lieto": "5021", + "Pompo": "6112", + "Tammi": "6117", + "Hakkinen": "5004", + "Loukinainen": "5009", + "Sillilä": "5011", + "Piispala": "5029", + "Jokila": "5035", + "Vieru": "5018", + "Ilmarinen": "5070", + "Liedon asemanseutu": "5112", + "Tarvasjoki": "5423", + "Avanti": "5470", + "Aura": "8024", + "Salo": "8900", + "Korpo": "8960", + + "Marttila": "8800", + + "Raision keskusta": "2010", + "Kauppakeskus Mylly": "2117", + "Petäsmäki": "2063", + "Kaanaa": "2037", + + "Koski Tl": "8810", + + "Somero": "8820", + + "Naantalin keskusta": "3016", "Ahteentaka": "3290", "Kurala (Naantali)": "3196", "Haapala": "3283", @@ -87,15 +117,14 @@ "Martti": "74", "Metsäaro": "2089", "Mäntymäki": "1800", - "Moikoinen": "90", + "Moikoinen": "91", "Moisio": "1066", "Muhkuri": "899", "Munittula": "4012", - "Mylly": "2117", "Mälikkälä": "781", - "Naantali": "3016", "Nuorikkala": "2079", "Nummenmäki": "62", + "Nummen koulu": "1826", "Nättinummi": "30", "Ojanto": "4004", "Oriniemi": "316", @@ -119,7 +148,6 @@ "Puutori": "286", "Pyöli": "3247", "Pääskyvuori": "879", - "Raision keskusta": "2010", "Raunistula": "224", "Rautatieasema": "144", "Ruissalo": "666", @@ -143,7 +171,7 @@ "Suutarla": "3286", "Särkilahti": "404", "Aaslaluoto": "3308", - "Teräsrautela": "476", + "Länsikeskus": "476", "Tikanmaa": "2136", "Toijainen": "424", "Tortinmäki": "1149",
--- a/alueet.gmp Fri May 19 21:15:12 2017 +0300 +++ b/alueet.gmp Thu May 25 16:41:21 2017 +0300 @@ -1,24 +1,22 @@ -roadmap^60.430274530422295, 22.693504910984647^15@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.40918767732357, 22.258026819744718^14@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.51616,22.23289~60.50782,22.23676~60.50492,22.27787~60.50936,22.29718~60.51901,22.29847~60.51961,22.26218 -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.47182,22.29006~60.47585,22.29014~60.48198,22.29898~60.4786,22.30708~60.47647,22.31503~60.4748,22.31928~60.47057,22.30316~60.47158,22.29897 -polygon^#FF0000,5,1,#ff8800,0.4^^60.46443,22.27208~60.47176,22.2828~60.47215,22.28351~60.47295,22.28976~60.47586,22.28966~60.47505,22.27803~60.47529,22.26612~60.47341,22.26482~60.47244,22.26502~60.47,22.26609~60.46873,22.26701~60.46674,22.26877~60.46574,22.26934~60.46434,22.27049~60.46395,22.27063~60.46343,22.27033~60.46395,22.27112 -polygon^#FF0000,5,1,#ff8800,0.4^^60.45901,22.268~60.45994,22.26648~60.46324,22.27012~60.46392,22.27117~60.46441,22.2721~60.47172,22.28286~60.4721,22.28353~60.47232,22.2854~60.46842,22.28529~60.4655,22.28372~60.46387,22.28141~60.46168,22.27527 -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 -polygon^#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 -polygon^#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 -polygon^#FF0000,5,1,#ff8800,0.4^^60.42205,22.23332~60.41743,22.22843~60.41462,22.23002~60.41226,22.23362~60.40794,22.23766~60.40841,22.26324~60.41685,22.25384~60.42155,22.24643~60.42243,22.23594 -polygon^#FF0000,5,1,#ff8800,0.4^^60.4537,22.25043~60.45203,22.25283~60.45345,22.25685~60.45493,22.25432 -polygon^#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 -polygon^#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 -polygon^#FF0000,5,1,#ff8800,0.4^^60.35447,22.12646~60.34122,22.13676~60.33714,22.17865~60.35634,22.30671~60.36475,22.31056~60.38221,22.2982~60.37208,22.22194~60.3631,22.16082 +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.47182,22.29006~60.47585,22.29014~60.48198,22.29898~60.4786,22.30708~60.47647,22.31503~60.4748,22.31928~60.47057,22.30316~60.47158,22.29897 +undefined^#FF0000,5,1,#ff8800,0.4^^60.46443,22.27208~60.47176,22.2828~60.47215,22.28351~60.47295,22.28976~60.47586,22.28966~60.47505,22.27803~60.47529,22.26612~60.47341,22.26482~60.47244,22.26502~60.47,22.26609~60.46873,22.26701~60.46674,22.26877~60.46574,22.26934~60.46434,22.27049~60.46395,22.27063~60.46343,22.27033~60.46395,22.27112 +undefined^#FF0000,5,1,#ff8800,0.4^^60.45901,22.268~60.45994,22.26648~60.46324,22.27012~60.46392,22.27117~60.46441,22.2721~60.47172,22.28286~60.4721,22.28353~60.47232,22.2854~60.46842,22.28529~60.4655,22.28372~60.46387,22.28141~60.46168,22.27527 +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 +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 +undefined^#FF0000,5,1,#ff8800,0.4^^60.35447,22.12646~60.34122,22.13676~60.33714,22.17865~60.35634,22.30671~60.36475,22.31056~60.38221,22.2982~60.37208,22.22194~60.3631,22.16082 undefined^#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.35557,22.12732~60.36614,22.11211~60.37617,22.11563~60.38197,22.13505~60.38392,22.1608~60.38367,22.21058~60.38265,22.23049~60.37467,22.23427~60.36377,22.15899 undefined^#FF0000,5,1,#ff8800,0.4^^60.44513,22.32739~60.4509,22.33176~60.45303,22.33709~60.45193,22.34516~60.44766,22.34725~60.44482,22.35053~60.44204,22.35147~60.44187,22.33875~60.44334,22.33174 @@ -35,9 +33,6 @@ undefined^#FF0000,5,1,#ff8800,0.4^^60.45857,22.22045~60.46175,22.23684~60.46635,22.24233~60.46999,22.22342~60.46663,22.21524~60.4656,22.21092~60.46162,22.21221 undefined^#FF0000,5,1,#ff8800,0.4^^60.4697,22.22131~60.46693,22.21517~60.46528,22.20514~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.4848,22.22929~60.4745,22.23281~60.47744,22.25101~60.48083,22.25006~60.48293,22.24869~60.48568,22.24715 -undefined^#FF0000,5,1,#ff8800,0.4^^60.47431,22.23298~60.4707,22.23392~60.4664,22.2498~60.47087,22.2528~60.47636,22.25137~60.47635,22.24784 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48011,22.225~60.48002,22.23015~60.4683,22.23427~60.47094,22.22069 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 @@ -71,7 +66,6 @@ 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.4591,22.21187~60.45665,22.20955~60.4533,22.23375~60.4536,22.23839~60.4543,22.24281~60.45478,22.24573~60.45789,22.2266~60.45939,22.21217 undefined^#FF0000,5,1,#ff8800,0.4^^60.45675,22.24015~60.45438,22.2495~60.45887,22.26658~60.45998,22.26577~60.46269,22.26488 undefined^#FF0000,5,1,#ff8800,0.4^^60.45876,22.22345~60.45709,22.23877~60.46232,22.2613~60.46574,22.24292~60.46138,22.23705 undefined^#FF0000,5,1,#ff8800,0.4^^60.47602,22.25242~60.47484,22.26457~60.47306,22.26336~60.46917,22.26521~60.46496,22.26894~60.46259,22.26148~60.46492,22.24917~60.47087,22.25384~60.47163,22.25338 @@ -137,7 +131,6 @@ 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.48839,22.11325~60.48786,22.11544~60.48829,22.11771~60.48993,22.11788~60.49843,22.11377~60.49917,22.10025~60.49584,22.08536~60.4908,22.08252~60.48687,22.07969~60.48549,22.08037~60.48585,22.09461~60.48687,22.09672~60.48795,22.10552~60.48788,22.10548 -undefined^#FF0000,5,1,#ff8800,0.4^^60.48539,22.08031~60.48569,22.09469~60.48678,22.09683~60.48766,22.10531~60.48835,22.11316~60.4877,22.11514~60.48809,22.11745~60.48705,22.1193~60.48378,22.10835~60.48163,22.09588~60.48026,22.08837~60.48112,22.08156 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 @@ -201,4 +194,33 @@ 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.41478,22.35632~60.40355,22.35623~60.40425,22.39331~60.41563,22.39314 +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.17772,21.45699~60.20832,21.56301~60.21663,21.71242~60.19172,21.88408~60.06724,21.92322~60.0621,21.4532~60.12773,21.4083 +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.47522,22.2368~60.4772,22.24399~60.4774,22.25062~60.4708,22.25337~60.46795,22.25135~60.4713,22.23669~60.47455,22.23838 +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.48533,22.08042~60.48055,22.08599~60.48721,22.11904~60.48744,22.11588~60.48825,22.11327~60.4878,22.10522~60.48675,22.09685~60.48575,22.09462 +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 +undefined^#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 @@@@@@
--- a/alueet.py Fri May 19 21:15:12 2017 +0300 +++ b/alueet.py Thu May 25 16:41:21 2017 +0300 @@ -1,12 +1,7 @@ #!/usr/bin/env python3 -from pprint import pprint -from PyQt5.QtCore import QPointF, Qt -from PyQt5.QtGui import QPolygonF -from PyQt5.QtWidgets import QApplication import sys, json from misc import * - -app = QApplication(sys.argv) +from geometria import * with open('alueet.gmp') as file: data = file.read().split('@') @@ -18,7 +13,7 @@ with open('gtfs/stops.txt') as file: for rivi in lue_csv(file): - sijainti = QPointF(float(rivi['stop_lat']), float(rivi['stop_lon'])) + sijainti = Sijainti(float(rivi['stop_lat']), float(rivi['stop_lon'])) tunniste = rivi['stop_id'] pysäkit[tunniste] = sijainti @@ -28,8 +23,8 @@ coordinates = [] for point in polygon[3].split('~'): x, y = point.split(',') - coordinates.append(QPointF(float(x), float(y))) - district_shapes.append(QPolygonF(coordinates)) + coordinates.append(Sijainti(float(x), float(y))) + district_shapes.append(Monikulmio(*coordinates)) districts = {} bus_stop_districts = {} @@ -38,7 +33,7 @@ if stop_id is None: continue for district_shape in district_shapes: - if district_shape.containsPoint(pysäkit[stop_id], Qt.OddEvenFill): + if district_shape.sisältää_pisteen(pysäkit[stop_id]): assert name not in districts districts[name] = district_shape district_shapes.remove(district_shape) @@ -49,7 +44,7 @@ for stop_id, stop_position in pysäkit.items(): for district, shape in districts.items(): - if shape.containsPoint(stop_position, Qt.OddEvenFill): + if shape.sisältää_pisteen(stop_position): bus_stop_districts[stop_id] = district break else: @@ -58,5 +53,4 @@ 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)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bussireitti.py Thu May 25 16:41:21 2017 +0300 @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +def supista_reitti(reitti, kokonainen = False): + if not reitti: + return '' + kunnat = {'Turku', 'Naantali', 'Lieto', 'Aura', 'Kaarina', 'Pargas', 'Marttila', 'Somero', 'Koski Tl', 'Tarvasjoki'} + 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', + } + have_already = set() + i = 0 + while i < len(reitti): + if reitti[i] in replacements: + reitti[i] = replacements[reitti[i]] + if reitti[i] in have_already: + del reitti[i] + else: + have_already.add(reitti[i]) + i += 1 + prioriteetit = { + 'Ihala': 150, + 'Kauppakeskus Mylly': 200, + 'Kuninkoja': 80, + 'Moikoinen': 50, + 'Raision keskusta': 100, + 'Friskala': 30, + 'Kukola': 50, + 'Kaistarniemi': 50, + 'Papinsaari': 50, + 'Oriniemi': 50, + 'Pikisaari': 50, + 'Häppilä': 50, + 'Haarla': 50, + 'Ylioppilaskylä': 50, + 'Halinen': 70, + 'Kakskerta': 50, + 'Pansio': 50, + 'Räntämäki': 10, + 'Verkahovi': 20, + 'Skanssi': 200, + 'Vaala': 20, + 'Varissuo': 60, + 'Kohmo': 80, + 'Kupittaa': 70, + 'Kauppatori': 1e15, + 'Lentoasema': 50, + 'Runosmäki': 50, + 'Lieto': 100, + 'Liedon asemanseutu': 200, + 'Ilmarinen': 100, + 'Vahto': 50, + 'Ruskon keskusta': 200, + 'Oriketo': 50, + 'Harittu': 40, + 'Jäkärlä': 50, + 'Paattinen': 100, + 'Kaarinan keskusta': 200, + 'Naantalin keskusta': 200, + 'Uittamo': 50, + 'Piikkiö': 40, + 'Paimio': 50, + 'Pargas': 50, + 'Yli-Maaria': 50, + 'Saramäki': 50, + 'Tarvasjoki': 100, + 'Marttila': 100, + 'Koski Tl': 100, + 'Katariina': 50, + 'Länsikeskus': 50, + 'Kaanaa': 100, + 'Satava': 50, + } + + if 'Kauppatori' not in reitti: + prioriteetit['Länsikeskus'] = prioriteetit['Skanssi'] = prioriteetit['Kauppatori'] + + # nimiä joista voidaan joustaa tarvittaessa + helpot_supistukset = { + 'Raision keskusta': 'Raisio', + 'Ruskon keskusta': 'Rusko', + 'Naantalin keskusta': 'Naantali', + 'Kaarinan keskusta': 'Kaarina', + 'Liedon asemanseutu': 'Lieto as.', + 'Kauppakeskus Mylly': 'Mylly', + } + + # jos ei nyt millään vaan mahdu muuten... + vakavat_supistukset = { + 'Kauppatori': 'Tori', + 'Ylioppilaskylä': 'Yo-kylä', + } + + lähtö = reitti[0] + määränpää = reitti[-1] + reitti_arvot = {} + f = lambda i: i**-0.6 + jakaja = max(f(i + 1) for i in range(len(reitti))) + for i, pysäkki in enumerate(reitti): + # muunna indeksi siten että myöhemmät alueet korostuvat + i = f(i + 1) / jakaja + # ota prioriteetti huomioon, jotkin alueet ovat tärkeämpiä kyltissä kuin toiset + i *= prioriteetit.get(pysäkki, 1) + reitti_arvot[pysäkki] = i + # nollaa lähtöpaikan arvo ettei se mitenkään tule kylttiin + if lähtö in reitti_arvot: + reitti_arvot[lähtö] = 0 + # varmista että määränpää tulee kylttiin + reitti_arvot[määränpää] = 1e10 + # muodosta kyltti-tiedot järjestettynä reittiarvon mukaan + painot = sorted([ + (pysäkki, reitti_arvot[pysäkki], i) \ + for i, pysäkki in enumerate(reitti) \ + if reitti_arvot[pysäkki] >= 1 + ], key = lambda pysäkki: -pysäkki[1]) + # enintään neljä tulee kylttiin + painot = painot[:4] + # jos neljäs kylttiarvo ei ole tarpeeksi merkittävä suhteessa reitin pituuteen niin otetaan neljäs pois + if len(painot) == 4 and painot[3][0] != määränpää and painot[3][1] < (4000 / len(reitti) ** 1.5): + del painot[3] + # sama kolmannelle + if len(painot) == 3 and painot[2][0] != määränpää and painot[2][1] < (500 / len(reitti) ** 1.5): + del painot[2] + if len(painot) == 2 and painot[1][0] != määränpää and painot[1][1] < (100 / len(reitti) ** 1.5): + del painot[1] + # lajitellaan painoarvot uudestaan reittijärjestykseen jotta kyltti tulee oikeinpäin + painot = sorted(painot, key = lambda paino: paino[2]) + # muodostetaan kyltti.. + kyltti = [paino[0] for paino in painot] + + # supista nimet jos mahdollista + def viimeistele(kyltti, supistus_taso = 0): + if supistus_taso > 0: + kyltti = [helpot_supistukset.get(paikka, paikka) for paikka in kyltti] + if supistus_taso > 1: + kyltti = [vakavat_supistukset.get(paikka, paikka) for paikka in kyltti] + return kyltti + tulos = viimeistele(kyltti) + if len(' - '.join(kyltti)) > 20: + tulos = viimeistele(kyltti, supistus_taso = 1) + if len(' - '.join(kyltti)) > 70: + tulos = viimeistele(kyltti, supistus_taso = 2) + if kokonainen: + tulos = [lähtö] + tulos + lyhyt_lähtö = replacements.get(lähtö, lähtö) + if lyhyt_lähtö != tulos[-1] and helpot_supistukset.get(lyhyt_lähtö, lyhyt_lähtö) in kunnat | {'Kauppatori'} and tulos[-1] in kunnat | {'Kauppatori'}: + tulos = ['Turku' if k == 'Kauppatori' else k for k in tulos] + return tulos
--- a/bussit.py Fri May 19 21:15:12 2017 +0300 +++ b/bussit.py Thu May 25 16:41:21 2017 +0300 @@ -2,7 +2,9 @@ import enum, json from sys import stderr from datetime import date, time, datetime, timedelta +from copy import copy from misc import * +from geometria import * Suunta = enum.Enum('Suunta', [('Taaksepäin', 0), ('Eteenpäin', 1)]) def muunna_ajovuoro_tunniste(tunniste): @@ -27,6 +29,20 @@ return self.palvelu in palvelut_per_päivä[päivä] except KeyError: return False + def suppea_reitti(self, pysäkistä = None): + if pysäkistä and pysäkistä in self.reitti: + reitti = copy(self.reitti) + reitti = reitti[reitti.index(pysäkistä):] + else: + reitti = self.reitti + käytetyt_alueet = set() + tulos = [] + for pysähdys in reitti: + pysäkki = pysähdys.pysäkki + if pysäkki.alue and pysäkki.alue not in käytetyt_alueet: + käytetyt_alueet.add(pysäkki.alue) + tulos.append(pysäkki.alue) + return tulos class Linja: def __init__(self, tietue): @@ -98,6 +114,9 @@ päivä += timedelta(1) # Typistä lopputulos haluttuun tulosmäärään. return taulu[:määrä] + @property + def linkki_karttaan(self): + return 'http://www.openstreetmap.org/#map=19/%f/%f' % (self.sijainti.leveys, self.sijainti.pituus) class Pysähdys: def __init__(self, saapumisaika, lähtöaika, pysäkki, ajo): @@ -167,7 +186,7 @@ print('Ladataan pysäkit... ', file = stderr, end = '', flush = True) with open('gtfs/stops.txt') as file: for rivi in lue_csv(file): - sijainti = (float(rivi['stop_lat']), float(rivi['stop_lon'])) + sijainti = Sijainti(float(rivi['stop_lat']), float(rivi['stop_lon'])) pysäkki = Pysäkki(rivi['stop_id'], rivi['stop_name'], sijainti) pysäkit[pysäkki.tunniste] = pysäkki with open('pysäkkialueet.json') as file:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/en.ini Thu May 25 16:41:21 2017 +0300 @@ -0,0 +1,10 @@ +[paikat] +satama = ⚓ Harbor +kauppatori = City Centre +lentoasema = ✈ Airport +ylioppilaskylä = Student Village +kauppakeskus mylly = Shopping Center Mylly +raision keskusta = Raisio Centrum +naantalin keskusta = Naantali Centrum +linja-autoasema = Bus Station +rautatieasema = Central Railway Station
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fi.ini Thu May 25 16:41:21 2017 +0300 @@ -0,0 +1,6 @@ +[paikat] +Korpo = Korppoo +Pargas = Parainen +lentoasema = ✈ Lentoasema +satama = ⚓ Satama +kauppakeskus mylly = Mylly
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geometria.py Thu May 25 16:41:21 2017 +0300 @@ -0,0 +1,121 @@ +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): + # 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)) + return 6371 * 2 * atan2(sqrt(a), sqrt(1 - a)) + def __repr__(self): + return '%s(%r, %r)' % (type(self).__name__, self.leveys, self.pituus) + def __str__(self): + return '%.5f, %.5f' % (self.leveys, self.pituus) + @property + def x(self): + return self.leveys + @property + def y(self): + return self.pituus + +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 Monikulmio: + def __init__(self, *pisteet): + self.pisteet = pisteet + def __repr__(self): + return '%s(%s)' % (type(self).__name__, ', '.join(map(repr, self.pisteet))) + def pinta_ala(self): + rengas = Rengas(self.pisteet) + return sum( + rengas[i].x * rengas[i + 1].y - rengas[i + 1].x * rengas[i].y + for i in range(len(rengas)) + ) / 2 + def piiri(self): + rengas = Rengas(self.pisteet) + 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)) + ) + def painopiste(self): + rengas = Rengas(self.pisteet) + 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() + 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]) + 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 + ) + 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) + +class Jana: + def __init__(self, alkupiste, päätepiste): + self.alkupiste, self.päätepiste = alkupiste, päätepiste + 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) + 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) + else: + return None + except ZeroDivisionError: + return None + +class Piste: + def __init__(self, x, y): + self.x, self.y = x, y + def __repr__(self): + return 'Piste(%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/misc.py Fri May 19 21:15:12 2017 +0300 +++ b/misc.py Thu May 25 16:41:21 2017 +0300 @@ -2,7 +2,7 @@ def tänään(): return date.today() - #return date(2017, 4, 10) + #return date(2017, 1, 10) def nyt(): return datetime.now() @@ -10,7 +10,9 @@ def muotoile_aika(aika, suhteellinen = True): erotus = aika - nyt() - if suhteellinen and erotus < timedelta(minutes = 30): + if suhteellinen and erotus < timedelta(minutes = 1): + return 'nyt' + elif suhteellinen and erotus < timedelta(minutes = 10): return '%dm' % round(erotus.seconds / 60) elif aika.date() == tänään(): return '%d:%02d' % (aika.hour, aika.minute)
--- a/palvelu.py Fri May 19 21:15:12 2017 +0300 +++ b/palvelu.py Thu May 25 16:41:21 2017 +0300 @@ -3,27 +3,71 @@ from datetime import datetime, date, time, timedelta from misc import * import locale +from bussireitti import supista_reitti +from configparser import ConfigParser app = Flask(__name__) locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) +kielet = ['fi', 'sv', 'en', 'ru'] +kieli_ini = {} +for kieli in kielet: + ini = ConfigParser() + ini.read(kieli + '.ini') + kieli_ini[kieli] = ini + +def käännä(nimi, osio): + kieli = sivun_kieli() + try: + return kieli_ini[kieli][osio][nimi] + except KeyError: + return nimi + +def sivun_kieli(): + from flask import request + if request.args.get('sv') is not None: + return 'sv' + elif request.args.get('en') is not None: + return 'en' + elif request.args.get('ru') is not None: + return 'ru' + elif request.args.get('kääntämätön') is None: + return 'fi' + else: + return None + @app.route('/pysäkki/<tunniste>') def pysäkkiaikataulu(tunniste): from bussit import pysäkit + from math import ceil aikataulu = [] try: pysäkki = pysäkit[tunniste] except KeyError: abort(404) for (aika, pysähdys) in pysäkki.aikataulu(100): + kyltti = supista_reitti(pysähdys.ajo.suppea_reitti(pysähdys)) + kyltti = [käännä(paikka, 'paikat') for paikka in kyltti] + kylttiesitys = ' - '.join(kyltti) + if len(kylttiesitys) > 25: + k = ceil(len(kyltti) / 2) + kylttiesitys = ' - '.join(kyltti[:k]) + '\n' + ' - '.join(kyltti[k:]) aikataulu.append({ 'aika': muotoile_aika(aika), 'linja': pysähdys.ajo.linja.viite, - 'kyltti': pysähdys.ajo.kyltti, + 'kyltti': kylttiesitys, 'ajovuoro': pysähdys.ajo.nimi, 'yö': yö(aika), }) - return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) + return render_template( + 'pysäkki.html', + aikataulu = aikataulu, + viite = tunniste, + nimi = käännä(pysäkki.nimi, 'pysäkit'), + linkki_karttaan = pysäkki.linkki_karttaan, + alue = pysäkki.alue, + sijainti = pysäkki.sijainti, + ) @app.route('/ajovuoro/<numero>') def ajoreitti(numero): @@ -43,21 +87,24 @@ reitti.append({ 'aika': muotoiltu_aika, 'tunniste': pysähdys.pysäkki.tunniste, - 'alue': pysähdys.pysäkki.alue, - 'nimi': pysähdys.pysäkki.nimi, + 'alue': käännä(pysähdys.pysäkki.alue or '', 'paikat'), + 'nimi': käännä(pysähdys.pysäkki.nimi, 'pysäkit'), }) alue = pysähdys.pysäkki.alue if alue: if alue not in käydyt_alueet: suppea_reitti.append({ 'aika': muotoiltu_aika, - 'alue': alue + 'alue': alue, }) käydyt_alueet.add(alue) + kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True) sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, - numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti, - yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika)) + numero = numero, linja = ajovuoro.linja.viite, + selite = ' - '.join(käännä(paikka, 'paikat') for paikka in kyltti), + yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika), + ) if __name__ == '__main__': from argparse import ArgumentParser
--- a/sv.ini Fri May 19 21:15:12 2017 +0300 +++ b/sv.ini Thu May 25 16:41:21 2017 +0300 @@ -1,4 +1,5 @@ [pysäkit] +korppoo = Korpo artukainen = Artukais artukaisten tehtaat = Artukais fabriker urusvuori = Urusberget @@ -62,13 +63,18 @@ ihalan koulu = Ihala skolan kela = Fpa lentoasema = Flygplatsen -cygnaeuksen koulu = Cygnaeus skolan koski tl = Koskis kupittaan asema = Kuppis station yliopisto = Universitet ylioppilaskylä = Studentbyn satama = Hamnen haarla = Harlax +rahtiasema = Fraktstation +ispoinen = Ispois +itäinen pitkäkatu = Österlånggatan +raisionjoki = Reso å +patterinhaka = Batterihagen +kt terveyskeskus = Hälsovärdcentralen @@ -84,7 +90,6 @@ ahmankatu = Ahmankatu ahola = Ahola ahteentaanranta = Ahteentaanranta -ahteentaka = Ahteentaka ahtolantie = Ahtolantie ahtonkaari = Ahtonkaari ahvenanmaankatu = Ahvenanmaankatu @@ -333,8 +338,6 @@ isosuontie = Isosuontie isotalontie = Isotalontie isovuorentie = Isovuorentie -ispoinen = Ispoinen -itäinen pitkäkatu = Itäinen Pitkäkatu itäkaari = Itäkaari itäkeskus = Itäkeskus itäniityntie = Itäniityntie @@ -552,7 +555,6 @@ korpelantie = Korpelantie korpoström = Korpoström korppolaismäki = Korppolaismäki -korppoo = Korppoo korvenmäki = Korvenmäki koskela = Koskela kostilantie = Kostilantie @@ -579,7 +581,6 @@ kruunutilankatu = Kruunutilankatu kruuvainen = Kruuvainen kräkiläntie = Kräkiläntie -kt terveyskeskus = Kt terveyskeskus kuhilaspelto = Kuhilaspelto kuhilastie = Kuhilastie kuivalahti = Kuivalahti @@ -1028,7 +1029,6 @@ parmaharju = Parmaharju parolanpuisto = Parolanpuisto parrantie = Parrantie -patterinhaka = Patterinhaka paunankatu = Paunankatu pellavakatu = Pellavakatu pellervonkatu = Pellervonkatu @@ -1139,7 +1139,6 @@ raatimiehenkatu = Raatimiehenkatu rahinpolku = Rahinpolku rahkasammaleenkatu = Rahkasammaleenkatu -rahtiasema = Rahtiasema raidetie = Raidetie raidistontie = Raidistontie raikonkuja = Raikonkuja @@ -1153,7 +1152,6 @@ raision sairaala = Raision sairaala raision tehtaat = Raision tehtaat raision vesitorni = Raision vesitorni -raisionjoki = Raisionjoki rajalahti = Rajalahti rakennusmestarintie = Rakennusmestarintie rakentajantie = Rakentajantie @@ -1260,7 +1258,6 @@ sammonkatu = Sammonkatu samppa = Samppa samppalinna = Samppalinna -samppalinna = Samppalinna samppalinnan koulu = Samppalinnan koulu sampsankatu = Sampsankatu sannainen = Sannainen @@ -1642,19 +1639,22 @@ artukainen = Artukais eerikvalla = Erikvalla haarla = Harlax -halinen = Halinen +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 centrum kaistarniemi = Kaistarudden katariina = Katarina kauppatori = Salutorget kerttuli = Gertrudsbacken koivula = Björkas konserttitalo = Konserthuset +koroinen = Korois kuninkoja = Kungsbäcken kupittaa = Kuppis kurala (naantali) = Kurala @@ -1664,31 +1664,39 @@ isokylä = Storby lauste = Laustis lauttaranta = Färjstranden -lentoasema = Flygplatsen +lentoasema = ✈ Flygplatsen liljalaakso = Liljedalen linja-autoasema = Linjebilstationen littoinen = Littois +länsiranta = Väststranden +länsikeskus = Västcentrum majakkaranta = Fyrstranden +metsämäki = Skogsbacka +mäntymäki = Tallbacka moikoinen = Moikois naantali = Nådendal -nummenmäki = Nummisbacken +nummenmäki = Nummis 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 -raision keskusta = +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 -satama = Hamnen +satama = ⚓ Hamnen skanssi = Skansen +toijainen = Toijais tuomiokirkkotori = Domkyrkotorget tyks = ÅUCS urusvuori = Urusberget @@ -1700,6 +1708,16 @@ vähä-heikkilä = Lillheikkilä yli-maaria = Övre S:t Marie yliopistonmäki = Universitetsbacken +ylioppilaskylä = Studentbyn ylioppilaskylä-länsi = Västra Studentbyn ylioppilaskylä-itä = Östra Studentbyn caribia = Spa Caribia +lieto as. = Lundo stn. +kauppakeskus mylly = Köpcentrum Mylly +turku = Åbo +piikkiö = Pikis +paimio = Pemar +paimion sairaala = Pemar sjukhus +lieto = Lundo +koski tl = Koskis +marttila = S:t Mårtens
--- a/templates/pysäkki.html Fri May 19 21:15:12 2017 +0300 +++ b/templates/pysäkki.html Thu May 25 16:41:21 2017 +0300 @@ -35,10 +35,17 @@ width:100%; margin: auto; } - #aikataulu td + + .sarake-aika, .sarake-linja { text-align: center; } + + .sarake-määränpää + { + text-align: left; + } + td, th, body { font-size: 24pt; @@ -46,44 +53,80 @@ .sarake-aika, .sarake-linja { - width: 15%; + width: 25%; } h1 { font-variant: small-caps; } - - .yölinja + + .sarake-määränpää a + { + white-space: pre-wrap; + } + + #aikataulu tr td + { + padding-bottom: 10px; + padding-top: 10px; + padding-left: 0px; + padding-right: 0px; + margin: 0px; + border-top: 1px solid gray; + } + + #aikataulu tr:nth-child(even) { + background-color: #F8F8F8; + } + + #aikataulu tr.yö td { - background-color: #AAF; - color: #00A; - padding-left: 6px; - padding-right: 6px; - border: 1px solid #00A; + /* + background-color: #d8d8ff; + color: #008; + border-bottom: 1px solid #00A; + */ + background-color: #004; + color: #bef; + border-top: 1px solid #008; + } + + #aikataulu tr.yö:nth-child(even) td + { + background-color: #003; + } + + #pysäkki-info + { + text-align: center + } + + .pysäkki-sijainti + { + font-size: smaller; } </style> <title>{{viite}} {{nimi}}</title> </head> <body> <h1>{{viite}} {{nimi}}</h1> - <table id='aikataulu'> + <p id="pysäkki-info"> + {{alue or ""}} + — + <a class="pysäkki-sijainti" href="{{linkki_karttaan}}" target="_blank">📌 ({{sijainti}})</a> + </p> + <table id='aikataulu' cellspacing="0"> <tr> <th class='sarake-aika'>Aika</th> <th class='sarake-linja'>Linja</th> <th class='sarake-määränpää'>Määränpää</th> </tr> {% for rivi in aikataulu %} - <tr> + <tr class="{% if rivi['yö'] %} yö {% endif %}"> <td class='sarake-aika'>{{rivi['aika']}}</td> <td class='sarake-linja linja'> - {% if rivi['yö'] %} - <span class="yölinja"> - {% endif %} <a href="/ajovuoro/{{rivi['ajovuoro']}}">{{rivi['linja']}}</a> - {% if rivi['yö'] %} - </span> - {% endif %} </td> <td class='sarake-määränpää'> <a href="/ajovuoro/{{rivi['ajovuoro']}}">{{rivi['kyltti']}}</a>