From 214a18d201abeca4b5cd9a7167fece5464dca392 Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 10:53:06 +0100 Subject: [PATCH 01/54] Create tramnetwork.json --- labs/lab1/tramnetwork.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 labs/lab1/tramnetwork.json diff --git a/labs/lab1/tramnetwork.json b/labs/lab1/tramnetwork.json new file mode 100644 index 0000000..e69de29 From 26caec0aeb5d25fee80c31e9b2bd9b8bc82db005 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 10:53:50 +0100 Subject: [PATCH 02/54] Create tramdata.py --- labs/lab1/tramdata.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 labs/lab1/tramdata.py diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py new file mode 100644 index 0000000..7f14377 --- /dev/null +++ b/labs/lab1/tramdata.py @@ -0,0 +1,25 @@ +import json + +def build_tram_lines(lines): + pass + +def build_tram_stops(jsonobject): + pass + +def build_tram_network(stopfile, linefile): + pass + +def lines_via_stop(linedict, stop): + pass + +def lines_between_stops(linedict, stop1, stop2): + pass + +def time_between_stops(linedict, timedict, line, stop1, stop2): + pass + +def distance_between_stops(stopdict, stop1, stop2): + pass + +def dialogue(tramfile): + pass \ No newline at end of file From 9298eba521158da9c0d60c1320839622e5ca8b7e Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 10:59:20 +0100 Subject: [PATCH 03/54] Update tramdata.py --- labs/lab1/tramdata.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 7f14377..fb2c603 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,9 +1,9 @@ import json -def build_tram_lines(lines): +def build_tram_stops(jsonobject): pass -def build_tram_stops(jsonobject): +def build_tram_lines(lines): pass def build_tram_network(stopfile, linefile): From d16edfa4e59ebd95dae5c943155850586d4dbfcb Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:04:36 +0100 Subject: [PATCH 04/54] Update tramdata.py --- labs/lab1/tramdata.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 7f14377..f8622a9 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,5 +1,9 @@ import json +TRAM_STOP_FILE = "/../data/tramstops.json" +with open(TRAM_STOP_FILE, 'r') as file: + data = json.load(file) + def build_tram_lines(lines): pass From 4a94e01b57eff35e480f35d6f09ff05978460929 Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:08:56 +0100 Subject: [PATCH 05/54] Update tramdata.py --- labs/lab1/tramdata.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 672eb1b..e9373c6 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,5 +1,10 @@ import json +TRAM_STOP_FILE = "/../data/tramstops.json" +with open(TRAM_STOP_FILE, 'r') as file: + data = json.load(file) + + def build_tram_lines(lines): pass From 1d02a1bac9b8a41ef959be29d61a1b8e06900dff Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:15:51 +0100 Subject: [PATCH 06/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index e9373c6..3530d92 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -2,7 +2,7 @@ TRAM_STOP_FILE = "/../data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as file: - data = json.load(file) + data = json.load(file) def build_tram_lines(lines): From 11b5fa1002f2ba918dfffcd058734eb64d07bfec Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:19:34 +0100 Subject: [PATCH 07/54] Update tramdata.py --- labs/lab1/tramdata.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 3530d92..ae57b59 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,8 +1,8 @@ import json -TRAM_STOP_FILE = "/../data/tramstops.json" -with open(TRAM_STOP_FILE, 'r') as file: - data = json.load(file) +TRAM_STOP_FILE = "./../data/tramstops.json" +with open(TRAM_STOP_FILE, 'r') as fromFile: + data = json.load(fromFile) def build_tram_lines(lines): From 0962df8ca1854a6dd2c94ed53b20fca8ef35124d Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:21:31 +0100 Subject: [PATCH 08/54] Update tramdata.py --- labs/lab1/tramdata.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index ae57b59..b39bf51 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,7 +4,11 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) +TRAM_NET_FILE = "./tramnetwork.json" +with open(TRAM_NET_FILE, 'w') as toFile: + write = json.dump(toFile) + def build_tram_lines(lines): pass From f217e7ed9ad22323d05750723651e96ef73c61d2 Mon Sep 17 00:00:00 2001 From: felixarv Date: Tue, 12 Nov 2024 11:22:42 +0100 Subject: [PATCH 09/54] Update tramdata.py --- labs/lab1/tramdata.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b39bf51..6fe28e4 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,11 +4,8 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -TRAM_NET_FILE = "./tramnetwork.json" -with open(TRAM_NET_FILE, 'w') as toFile: - write = json.dump(toFile) - + def build_tram_lines(lines): pass From de8b49ed1466ba73801d2b83088cf64cdf5329dd Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 11:30:20 +0100 Subject: [PATCH 10/54] Create tramdata.py --- labs/lab1/tramdata.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 labs/lab1/tramdata.py diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py new file mode 100644 index 0000000..827e419 --- /dev/null +++ b/labs/lab1/tramdata.py @@ -0,0 +1,27 @@ +import json + + + +def build_tram_lines(lines): + pass + +def build_tram_stops(jsonobject): + pass + +def build_tram_network(stopfile, linefile): + pass + +def lines_via_stop(linedict, stop): + pass + +def lines_between_stops(linedict, stop1, stop2): + pass + +def time_between_stops(linedict, timedict, line, stop1, stop2): + pass + +def distance_between_stops(stopdict, stop1, stop2): + pass + +def dialogue(tramfile): + pass \ No newline at end of file From f369d919ce83420a4bbeba8953bcc757560bc295 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 11:35:32 +0100 Subject: [PATCH 11/54] Merge branch 'main' of https://github.com/felixarv/chalmers-advanced-python --- labs/lab1/tramdata.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 6fe28e4..9676d01 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,4 +1,13 @@ -import json +import json + +TRAM_STOP_FILE = "./../data/tramstops.json" +with open(TRAM_STOP_FILE, 'r') as fromFile: + data = json.load(fromFile) + + + +def build_tram_lines(lines): + pass TRAM_STOP_FILE = "./../data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as fromFile: From 2e32aeb98a716849a2c66dd12e16d5a092323e1f Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 11:36:08 +0100 Subject: [PATCH 12/54] Update tramdata.py --- labs/lab1/tramdata.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 9676d01..f1ce7b2 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -9,12 +9,6 @@ def build_tram_lines(lines): pass -TRAM_STOP_FILE = "./../data/tramstops.json" -with open(TRAM_STOP_FILE, 'r') as fromFile: - data = json.load(fromFile) - - - def build_tram_lines(lines): pass From 1429c804886b5a45ba7df9f1ff8dfdd723b97cbe Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 11:54:56 +0100 Subject: [PATCH 13/54] Create tramnetwork.json --- labs/lab1/tramnetwork.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 labs/lab1/tramnetwork.json diff --git a/labs/lab1/tramnetwork.json b/labs/lab1/tramnetwork.json new file mode 100644 index 0000000..e69de29 From 96645e8d7f30a2339c804f7c8e19cee368a18b5f Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 12:17:32 +0100 Subject: [PATCH 14/54] Update tramdata.py --- labs/lab1/tramdata.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index f1ce7b2..4fda8b4 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,14 +4,6 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) - - -def build_tram_lines(lines): - pass - -def build_tram_lines(lines): - pass - def build_tram_stops(jsonobject): pass From 61ce804fe82248a8dfa8e14a571c950116c829dc Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 12:19:27 +0100 Subject: [PATCH 15/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 4fda8b4..b246e5f 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,6 +4,8 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) + + def build_tram_stops(jsonobject): pass From d92efae44ad86cb04395225a20d4237be040012a Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:07:54 +0100 Subject: [PATCH 16/54] Update tramdata.py --- labs/lab1/tramdata.py | 1 + 1 file changed, 1 insertion(+) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b246e5f..479148b 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,6 +4,7 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) +#hej def build_tram_stops(jsonobject): From ac0ceab73661d191a679b5117b02485a653f2ee5 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:08:41 +0100 Subject: [PATCH 17/54] Update tramdata.py --- labs/lab1/tramdata.py | 1 - 1 file changed, 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 479148b..b246e5f 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,7 +4,6 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -#hej def build_tram_stops(jsonobject): From 2f39d60cd9597f54bb108b188fdac183c6fcccb8 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:08:56 +0100 Subject: [PATCH 18/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b246e5f..0ec98cd 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,7 +4,7 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) - +#hej hej def build_tram_stops(jsonobject): pass From f3edc217bdb5d8bd48b953a85803e147a0852666 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:10:00 +0100 Subject: [PATCH 19/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 0ec98cd..b246e5f 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,7 +4,7 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -#hej hej + def build_tram_stops(jsonobject): pass From 6c3e9d13f085d86d29a003a1370f55a80dd19916 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:10:28 +0100 Subject: [PATCH 20/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b246e5f..36df700 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -5,7 +5,7 @@ data = json.load(fromFile) - +#hejehjehej def build_tram_stops(jsonobject): pass From 7863846537d35c6c2d6f39cfd04a8bbf601962a8 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:11:09 +0100 Subject: [PATCH 21/54] Update tramdata.py --- labs/lab1/tramdata.py | 1 - 1 file changed, 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 36df700..530a81e 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -5,7 +5,6 @@ data = json.load(fromFile) -#hejehjehej def build_tram_stops(jsonobject): pass From 44d12707ef919afa74348bff2fc9c5886ee3ca90 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 13:59:20 +0100 Subject: [PATCH 22/54] Tramstops fixad lagt till funktion --- labs/lab1/tramdata.py | 10 +- labs/lab1/tramstops.json | 933 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 941 insertions(+), 2 deletions(-) create mode 100644 labs/lab1/tramstops.json diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 530a81e..ff86888 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,12 +1,18 @@ import json -TRAM_STOP_FILE = "./../data/tramstops.json" +TRAM_STOP_FILE = 'labs/data/tramstops.json' with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) +#print(json.dumps(data, indent=2, ensure_ascii=False)) def build_tram_stops(jsonobject): - pass + + stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} + + return stopdict + +print(build_tram_stops(data)) def build_tram_lines(lines): pass diff --git a/labs/lab1/tramstops.json b/labs/lab1/tramstops.json new file mode 100644 index 0000000..2c0292a --- /dev/null +++ b/labs/lab1/tramstops.json @@ -0,0 +1,933 @@ +{ + "\u00d6stra Sjukhuset": { + "town": "G\u00f6teborg", + "position": [ + "57.7224618", + "12.0478166" + ] + }, + "Tingvallsv\u00e4gen": { + "town": "G\u00f6teborg", + "position": [ + "57.7246437", + "12.0420754" + ] + }, + "Kaggeledstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7229358", + "12.0332892" + ] + }, + "\u00c4tteh\u00f6gsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7200477", + "12.0285376" + ] + }, + "Munkeb\u00e4ckstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7185656", + "12.0263524" + ] + }, + "H\u00e4rlanda": { + "town": "G\u00f6teborg", + "position": [ + "57.7181065", + "12.0194426" + ] + }, + "Stockholmsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7170564", + "12.0136038" + ] + }, + "Redbergsplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.716275", + "12.004907" + ] + }, + "Olskrokstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7146209", + "11.9987871" + ] + }, + "Svingeln": { + "town": "G\u00f6teborg", + "position": [ + "57.713358", + "11.9917409" + ] + }, + "Ullevi Norra": { + "town": "G\u00f6teborg", + "position": [ + "57.7081152", + "11.9861639" + ] + }, + "Centralstationen": { + "town": "G\u00f6teborg", + "position": [ + "57.7077849", + "11.9734427" + ] + }, + "Brunnsparken": { + "town": "G\u00f6teborg", + "position": [ + "57.7065955", + "11.9689358" + ] + }, + "Stenpiren": { + "town": "G\u00f6teborg", + "position": [ + "57.7056512", + "11.9574172" + ] + }, + "J\u00e4rntorget": { + "town": "G\u00f6teborg", + "position": [ + "57.6999652", + "11.952972" + ] + }, + "Prinsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6964754", + "11.9513521" + ] + }, + "Olivedalsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6918865", + "11.9536831" + ] + }, + "Linn\u00e9platsen": { + "town": "G\u00f6teborg", + "position": [ + "57.689966", + "11.9520518" + ] + }, + "Botaniska Tr\u00e4dg\u00e5rden": { + "town": "G\u00f6teborg", + "position": [ + "57.6812619", + "11.9455821" + ] + }, + "Marklandsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.673267", + "11.9353621" + ] + }, + "Axel Dahlstr\u00f6ms Torg": { + "town": "G\u00f6teborg", + "position": [ + "57.672288", + "11.9275696" + ] + }, + "Lantmilsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6668601", + "11.924836" + ] + }, + "Nymilsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6624705", + "11.9250789" + ] + }, + "Musikv\u00e4gen": { + "town": "G\u00f6teborg", + "position": [ + "57.6590769", + "11.9206117" + ] + }, + "Positivgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6566374", + "11.9175191" + ] + }, + "Fr\u00f6lunda Torg Sp\u00e5rvagn": { + "town": "G\u00f6teborg", + "position": [ + "57.6527643", + "11.9116376" + ] + }, + "Briljantgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6486393", + "11.9035069" + ] + }, + "Smaragdgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6454509", + "11.8993694" + ] + }, + "Opaltorget": { + "town": "G\u00f6teborg", + "position": [ + "57.6423342", + "11.9010554" + ] + }, + "M\u00f6lndals Innerstad": { + "town": "M\u00f6lndal", + "position": [ + "57.655591400000006", + "12.01855524009189" + ] + }, + "M\u00f6lndals sjukhus": { + "town": "M\u00f6lndal", + "position": [ + "57.6614548", + "12.0136632" + ] + }, + "Lackareb\u00e4ck": { + "town": "M\u00f6lndal", + "position": [ + "57.6663479", + "12.0114421" + ] + }, + "Kroksl\u00e4tts Fabriker": { + "town": "M\u00f6lndal", + "position": [ + "57.6717887", + "12.0100249" + ] + }, + "Kroksl\u00e4tts torg": { + "town": "M\u00f6lndal", + "position": [ + "57.6753924", + "12.0078652" + ] + }, + "Lana": { + "town": "G\u00f6teborg", + "position": [ + "57.678333", + "12.0041666" + ] + }, + "Varbergsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6795297", + "12.003115" + ] + }, + "Elisedal": { + "town": "G\u00f6teborg", + "position": [ + "57.6834394", + "12.0004416" + ] + }, + "Almedal": { + "town": "G\u00f6teborg", + "position": [ + "57.6867844", + "11.9974967" + ] + }, + "Liseberg S\u00f6dra": { + "town": "G\u00f6teborg", + "position": [ + "57.6945173", + "11.993695420809985" + ] + }, + "Korsv\u00e4gen": { + "town": "G\u00f6teborg", + "position": [ + "57.6968295", + "11.9868341" + ] + }, + "Scandinavium": { + "town": "G\u00f6teborg", + "position": [ + "57.7006276", + "11.9858582" + ] + }, + "Ullevi S\u00f6dra": { + "town": "G\u00f6teborg", + "position": [ + "57.7039541", + "11.9850022" + ] + }, + "Domkyrkan": { + "town": "G\u00f6teborg", + "position": [ + "57.7042356", + "11.9636653" + ] + }, + "Gr\u00f6nsakstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7025866", + "11.9639739" + ] + }, + "Vasaplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.6989398", + "11.9705111" + ] + }, + "Vasa Viktoriagatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6985634", + "11.9653312" + ] + }, + "Handelsh\u00f6gskolan": { + "town": "G\u00f6teborg", + "position": [ + "57.6965303", + "11.9625825" + ] + }, + "Brunnsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6936796", + "11.9591759" + ] + }, + "Seminariegatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6920557", + "11.9571828" + ] + }, + "Bokekullsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6771253", + "11.9327977" + ] + }, + "H\u00f6gsbogatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6803596", + "11.9301317" + ] + }, + "Klintens V\u00e4g": { + "town": "G\u00f6teborg", + "position": [ + "57.6824461", + "11.9279843" + ] + }, + "Godhemsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6854379", + "11.9264658" + ] + }, + "Mariaplan": { + "town": "G\u00f6teborg", + "position": [ + "57.686497", + "11.9202959" + ] + }, + "Ostindiegatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6876154", + "11.9156284" + ] + }, + "Vagnhallen Majorna": { + "town": "G\u00f6teborg", + "position": [ + "57.6891689", + "11.9123386" + ] + }, + "Jaegerdorffsplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.6914334", + "11.9150447" + ] + }, + "Chapmans Torg": { + "town": "G\u00f6teborg", + "position": [ + "57.6944764", + "11.9198652" + ] + }, + "Kaptensgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6971583", + "11.9276101" + ] + }, + "Stigbergstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.6990303", + "11.9338896" + ] + }, + "Masthuggstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.6995343", + "11.9447351" + ] + }, + "Hagakyrkan": { + "town": "G\u00f6teborg", + "position": [ + "57.6996013", + "11.9615964" + ] + }, + "Valand": { + "town": "G\u00f6teborg", + "position": [ + "57.7004651", + "11.9748851" + ] + }, + "Kungsportsplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.7039668", + "11.9697972" + ] + }, + "Solrosgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7162733", + "12.0250195" + ] + }, + "Sanatoriegatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7132161", + "12.0240768" + ] + }, + "Virginsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7107812", + "12.0235382" + ] + }, + "Berzeliigatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6983047", + "11.9823431" + ] + }, + "Gamlestads Torg": { + "town": "G\u00f6teborg", + "position": [ + "57.7279636", + "12.0046485" + ] + }, + "Hj\u00e4llbo": { + "town": "G\u00f6teborg", + "position": [ + "57.7692649", + "12.0223749" + ] + }, + "Hammarkullen": { + "town": "G\u00f6teborg", + "position": [ + "57.7800406", + "12.0366009" + ] + }, + "Stor\u00e5s": { + "town": "G\u00f6teborg", + "position": [ + "57.785139", + "12.0462261" + ] + }, + "Angered Centrum": { + "town": "G\u00f6teborg", + "position": [ + "57.7960687", + "12.0495277" + ] + }, + "Welandergatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7060778", + "12.0239345" + ] + }, + "T\u00f6pelsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7023397", + "12.0221389" + ] + }, + "B\u00f6gatan": { + "town": "G\u00f6teborg", + "position": [ + "57.700946", + "12.0160087" + ] + }, + "Ekmanska": { + "town": "G\u00f6teborg", + "position": [ + "57.6996668", + "12.0096351" + ] + }, + "B\u00e4ckeliden": { + "town": "G\u00f6teborg", + "position": [ + "57.6999206", + "12.0033203" + ] + }, + "Sankt Sigfrids Plan": { + "town": "G\u00f6teborg", + "position": [ + "57.6987301", + "11.9994709" + ] + }, + "Liseberg Station": { + "town": "G\u00f6teborg", + "position": [ + "57.6975588", + "11.9942205" + ] + }, + "Lilla Bommen": { + "town": "G\u00f6teborg", + "position": [ + "57.7092219", + "11.9667699" + ] + }, + "Frihamnen": { + "town": "G\u00f6teborg", + "position": [ + "57.7203255", + "11.9600773" + ] + }, + "Hjalmar Brantingsplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.7206077", + "11.9522789" + ] + }, + "V\u00e5gm\u00e4stareplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.720537", + "11.9451746" + ] + }, + "Wieselgrensplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.7205998", + "11.9355948" + ] + }, + "Rambergsvallen": { + "town": "G\u00f6teborg", + "position": [ + "57.719347", + "11.9268104" + ] + }, + "Gropeg\u00e5rdsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7183037", + "11.9191595" + ] + }, + "Eketr\u00e4gatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7164903", + "11.9099118" + ] + }, + "S\u00e4l\u00f6fjordsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7136356", + "11.9029025" + ] + }, + "V\u00e5rv\u00e4derstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7129196", + "11.8931411" + ] + }, + "Mildv\u00e4dersgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7156823", + "11.890926" + ] + }, + "\u00d6nskev\u00e4dersgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7201505", + "11.8930502" + ] + }, + "Friskv\u00e4derstorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7235673", + "11.8931956" + ] + }, + "V\u00e4derilsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7265488", + "11.8933485" + ] + }, + "Temperaturgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.732569", + "11.8952913" + ] + }, + "Varmfrontsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7368776", + "11.8966497" + ] + }, + "Aprilgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7608913", + "12.0409994" + ] + }, + "Allhelgonakyrkan": { + "town": "G\u00f6teborg", + "position": [ + "57.7574065", + "12.0374426" + ] + }, + "Kortedala Torg": { + "town": "G\u00f6teborg", + "position": [ + "57.752779", + "12.0330403" + ] + }, + "Runstavsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7479034", + "12.0303082" + ] + }, + "Nym\u00e5negatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7427511", + "12.0298737" + ] + }, + "Bev\u00e4ringsgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7399617", + "12.0286261" + ] + }, + "Kviberg": { + "town": "G\u00f6teborg", + "position": [ + "57.7367053", + "12.0265257" + ] + }, + "Bellevue": { + "town": "G\u00f6teborg", + "position": [ + "57.7325237", + "12.0246107" + ] + }, + "SKF": { + "town": "G\u00f6teborg", + "position": [ + "57.7291018", + "12.0132691" + ] + }, + "Ejdergatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7210222", + "12.005952" + ] + }, + "Chalmers": { + "town": "G\u00f6teborg", + "position": [ + "57.6900225", + "11.9730927" + ] + }, + "Wavrinskys Plats": { + "town": "G\u00f6teborg", + "position": [ + "57.6888028", + "11.9684664" + ] + }, + "Medicinaregatan": { + "town": "G\u00f6teborg", + "position": [ + "57.6855827", + "11.9619508" + ] + }, + "Sahlgrenska Huvudentr\u00e9": { + "town": "G\u00f6teborg", + "position": [ + "57.6836795", + "11.9614653" + ] + }, + "Nordstan": { + "town": "G\u00f6teborg", + "position": [ + "57.7086397", + "11.969087498371342" + ] + }, + "Komettorget": { + "town": "G\u00f6teborg", + "position": [ + "57.7511423", + "12.0713114" + ] + }, + "Rymdtorget Sp\u00e5rvagn": { + "town": "G\u00f6teborg", + "position": [ + "57.7558013", + "12.0669195" + ] + }, + "Teleskopgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7593", + "12.0597894" + ] + }, + "Galileis Gata": { + "town": "G\u00f6teborg", + "position": [ + "57.7605336", + "12.051446" + ] + }, + "Januarigatan": { + "town": "G\u00f6teborg", + "position": [ + "57.7602447", + "12.0412135" + ] + }, + "Kapellplatsen": { + "town": "G\u00f6teborg", + "position": [ + "57.6927713", + "11.9735773" + ] + }, + "Sannaplan": { + "town": "G\u00f6teborg", + "position": [ + "57.6842394", + "11.9166553" + ] + }, + "Sandarna": { + "town": "G\u00f6teborg", + "position": [ + "57.6827594", + "11.9095056" + ] + }, + "Kungssten": { + "town": "G\u00f6teborg", + "position": [ + "57.6805281", + "11.9018248" + ] + }, + "Doktor Sydows Gata": { + "town": "G\u00f6teborg", + "position": [ + "57.6793184", + "11.9776909" + ] + }, + "Doktor Fries Torg": { + "town": "G\u00f6teborg", + "position": [ + "57.6844804", + "11.9726716" + ] + }, + "Saltholmen": { + "town": "G\u00f6teborg", + "position": [ + "57.6606312", + "11.8455002" + ] + }, + "Roddf\u00f6reningen": { + "town": "G\u00f6teborg", + "position": [ + "57.6640011", + "11.8516451" + ] + }, + "L\u00e5ngedrag": { + "town": "G\u00f6teborg", + "position": [ + "57.6682375", + "11.8535394" + ] + }, + "Hinsholmen": { + "town": "G\u00f6teborg", + "position": [ + "57.6676904", + "11.8610197" + ] + }, + "K\u00e4ringberget": { + "town": "G\u00f6teborg", + "position": [ + "57.6692358", + "11.8710883" + ] + }, + "Tranered": { + "town": "G\u00f6teborg", + "position": [ + "57.6723198", + "11.8793541" + ] + }, + "Hagen": { + "town": "G\u00f6teborg", + "position": [ + "57.6748357", + "11.8841485" + ] + }, + "Nya Varvsall\u00e9n": { + "town": "G\u00f6teborg", + "position": [ + "57.6780065", + "11.8950555" + ] + }, + "Ekedal": { + "town": "G\u00f6teborg", + "position": [ + "57.6871315", + "11.9290998" + ] + }, + "Majvallen": { + "town": "G\u00f6teborg", + "position": [ + "57.6909343", + "11.9354935" + ] + }, + "Fj\u00e4llgatan": { + "town": "G\u00f6teborg", + "position": [ + "57.69443", + "11.9362336" + ] + } +} \ No newline at end of file From cb5bf33488eb3d122f2a5312980de3b2a63cfa00 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 13:59:45 +0100 Subject: [PATCH 23/54] Update tramdata.py --- labs/lab1/tramdata.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 530a81e..ea325fc 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,12 +1,13 @@ import json -TRAM_STOP_FILE = "./../data/tramstops.json" +TRAM_STOP_FILE = "labs/data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) - def build_tram_stops(jsonobject): - pass + + + def build_tram_lines(lines): pass From c51a6bc608619639ca20d260090d389602f97a3f Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 12 Nov 2024 14:01:36 +0100 Subject: [PATCH 24/54] Update tramdata.py --- labs/lab1/tramdata.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 35c204f..05033e0 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,14 +4,6 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -def build_tram_stops(jsonobject): - - - -TRAM_STOP_FILE = 'labs/data/tramstops.json' -with open(TRAM_STOP_FILE, 'r') as fromFile: - data = json.load(fromFile) - #print(json.dumps(data, indent=2, ensure_ascii=False)) def build_tram_stops(jsonobject): From 4c49ccfb6009baca8e2924a7b7cb9f200d517695 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 12 Nov 2024 16:35:38 +0100 Subject: [PATCH 25/54] Update tramdata.py --- labs/lab1/tramdata.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index ff86888..ccf2edf 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,15 +4,24 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -#print(json.dumps(data, indent=2, ensure_ascii=False)) +with open ("labs/data/tramlines.txt", "r") as file: + tramlines = file.readlines() + +lines = [] +for line in tramlines: + lines.append(line[:].strip("\n")) + +print(lines) +#print(json.dumps(data, indent=2, ensure_ascii=False)) +#print(tramlines) def build_tram_stops(jsonobject): stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} return stopdict -print(build_tram_stops(data)) +#print(build_tram_stops(data)) def build_tram_lines(lines): pass From 2d3dcfc042d6aa237d65d7801e0e15dfe67e48c2 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 11:38:10 +0100 Subject: [PATCH 26/54] Update tramdata.py --- labs/lab1/tramdata.py | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index ccf2edf..1bfd728 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -4,16 +4,22 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) + with open ("labs/data/tramlines.txt", "r") as file: - tramlines = file.readlines() + lines = file.read().replace(":","").strip().split("\n\n") + + lines = [line[:-4] for line in lines] + + + +lines = [line.split("\n") for line in lines] -lines = [] -for line in tramlines: - lines.append(line[:].strip("\n")) -print(lines) -#print(json.dumps(data, indent=2, ensure_ascii=False)) + + + + #print(tramlines) def build_tram_stops(jsonobject): @@ -21,10 +27,31 @@ def build_tram_stops(jsonobject): return stopdict -#print(build_tram_stops(data)) + def build_tram_lines(lines): - pass + + linedict = {} + + for line in lines: + key = line[0] + values=[] + line.pop(0) + for x in line: + values.append(x[:-4].strip()) + linedict[key] = values + + + + + + + + return linedict + + +print(build_tram_lines(lines)["9"]) + def build_tram_network(stopfile, linefile): pass From f8662d3a7a33f5e44c4c2d160827116196871d85 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 11:39:03 +0100 Subject: [PATCH 27/54] Update tramdata.py --- labs/lab1/tramdata.py | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 1bfd728..42be4ed 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -7,28 +7,15 @@ with open ("labs/data/tramlines.txt", "r") as file: lines = file.read().replace(":","").strip().split("\n\n") - lines = [line[:-4] for line in lines] + lines = [line.split("\n") for line in lines] - - -lines = [line.split("\n") for line in lines] - - - - - - - -#print(tramlines) def build_tram_stops(jsonobject): stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} return stopdict - - def build_tram_lines(lines): linedict = {} @@ -40,17 +27,10 @@ def build_tram_lines(lines): for x in line: values.append(x[:-4].strip()) linedict[key] = values - - - - - - - return linedict -print(build_tram_lines(lines)["9"]) + def build_tram_network(stopfile, linefile): From c367b7142afd9edc81fbb93fae0f4752b1b53ccf Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 21:05:38 +0100 Subject: [PATCH 28/54] =?UTF-8?q?Lagt=20till=20funktion=20f=C3=B6r=20build?= =?UTF-8?q?=20tramlines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labs/lab1/tramdata.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 42be4ed..c4bc078 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -5,11 +5,46 @@ data = json.load(fromFile) + with open ("labs/data/tramlines.txt", "r") as file: lines = file.read().replace(":","").strip().split("\n\n") - lines = [line[:-4] for line in lines] lines = [line.split("\n") for line in lines] + print(lines) + +hej = [] +da = [] + + +for line in lines: + line.pop(0) + for x in line: + hej.append(x[:-4].strip()) + if x[-1].isdigit(): + da.append(int(x[-1])) + +timedict = {hej[i]: {hej[i+1]: da[i+1] - da[i]} for i in range(len(hej) - 1)} + +""" +while i <= len(hej): + for stop in hej: + if stop not in timedict: + timedict.update({stop}) +""" +print(timedict) + + +timedict = {} + + + + + + + + + + def build_tram_stops(jsonobject): stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} @@ -19,6 +54,7 @@ def build_tram_stops(jsonobject): def build_tram_lines(lines): linedict = {} + timedict = {} for line in lines: key = line[0] @@ -27,6 +63,7 @@ def build_tram_lines(lines): for x in line: values.append(x[:-4].strip()) linedict[key] = values + return linedict From 5bdfa8d9ff060ec0977e3bc4edfbcd628d320c8b Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 22:31:57 +0100 Subject: [PATCH 29/54] Update tramdata.py --- labs/lab1/tramdata.py | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index c4bc078..ec1d6a9 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,4 +1,6 @@ -import json +import json + + TRAM_STOP_FILE = 'labs/data/tramstops.json' with open(TRAM_STOP_FILE, 'r') as fromFile: @@ -6,7 +8,7 @@ -with open ("labs/data/tramlines.txt", "r") as file: +with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: lines = file.read().replace(":","").strip().split("\n\n") lines = [line.split("\n") for line in lines] @@ -23,27 +25,10 @@ if x[-1].isdigit(): da.append(int(x[-1])) -timedict = {hej[i]: {hej[i+1]: da[i+1] - da[i]} for i in range(len(hej) - 1)} - -""" -while i <= len(hej): - for stop in hej: - if stop not in timedict: - timedict.update({stop}) -""" -print(timedict) - - -timedict = {} - - +timedict = {hej[i]: {hej[i+1]:int()} for i in range(len(hej) - 1)} - - - - - + def build_tram_stops(jsonobject): @@ -51,6 +36,8 @@ def build_tram_stops(jsonobject): return stopdict + + def build_tram_lines(lines): linedict = {} From 798aa552253a59b3fee6e221fd6ca65b3883eb15 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 23:58:43 +0100 Subject: [PATCH 30/54] Update tramdata.py --- labs/lab1/tramdata.py | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index ec1d6a9..d76ad36 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -10,10 +10,12 @@ with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: lines = file.read().replace(":","").strip().split("\n\n") + lines = [line.split("\n") for line in lines] - print(lines) + +""" hej = [] da = [] @@ -25,10 +27,39 @@ if x[-1].isdigit(): da.append(int(x[-1])) -timedict = {hej[i]: {hej[i+1]:int()} for i in range(len(hej) - 1)} +timedict = {} +i = 0 +for stop in hej: + if timedict[hej[i + 1]][stop] not in timedict[stop]: + + timedict[stop] = {hej[i+1]: da[i+1] - da[i]} + i += 1 + else: + i += 1 + + +value = da[i+1] - da[i] + +timedict = {hej[i]: {hej[i+1]: value} for i in range(len(hej) - 1)} +""" +""" +while i <= len(hej): + for stop in hej: + if stop not in timedict: + timedict.update({stop}) +""" + + + + + + + + + - + def build_tram_stops(jsonobject): From f0e48178943d6b5ae62d0767f3de11afd871663d Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 13 Nov 2024 23:58:54 +0100 Subject: [PATCH 31/54] Update tramdata.py --- labs/lab1/tramdata.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index d76ad36..6135478 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -15,7 +15,7 @@ print(lines) -""" + hej = [] da = [] @@ -42,13 +42,12 @@ value = da[i+1] - da[i] timedict = {hej[i]: {hej[i+1]: value} for i in range(len(hej) - 1)} -""" -""" + while i <= len(hej): for stop in hej: if stop not in timedict: timedict.update({stop}) -""" + From 2a4b04cadf28f3a1087b0c3ddd958ee33499fa14 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Sun, 17 Nov 2024 23:19:35 +0100 Subject: [PATCH 32/54] Update tramdata.py --- labs/lab1/tramdata.py | 65 ++++++++----------------------------------- 1 file changed, 11 insertions(+), 54 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 6135478..d6002f9 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,4 +1,5 @@ import json +from pprint import pprint @@ -10,54 +11,11 @@ with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: lines = file.read().replace(":","").strip().split("\n\n") - + lines = [line.split("\n") for line in lines] - print(lines) -hej = [] -da = [] - - -for line in lines: - line.pop(0) - for x in line: - hej.append(x[:-4].strip()) - if x[-1].isdigit(): - da.append(int(x[-1])) - - -timedict = {} -i = 0 -for stop in hej: - if timedict[hej[i + 1]][stop] not in timedict[stop]: - - timedict[stop] = {hej[i+1]: da[i+1] - da[i]} - i += 1 - else: - i += 1 - - -value = da[i+1] - da[i] - -timedict = {hej[i]: {hej[i+1]: value} for i in range(len(hej) - 1)} - -while i <= len(hej): - for stop in hej: - if stop not in timedict: - timedict.update({stop}) - - - - - - - - - - - def build_tram_stops(jsonobject): @@ -67,24 +25,23 @@ def build_tram_stops(jsonobject): return stopdict - +pprint(build_tram_stops(data)) def build_tram_lines(lines): linedict = {} timedict = {} for line in lines: - key = line[0] values=[] - line.pop(0) - for x in line: - values.append(x[:-4].strip()) + key = line[0] + for i in range(1, len(line) - 1): + name, time = [item.strip() for item in line[i].split(" ") if item] + next_name, next_time = [item.strip() for item in line[i+1].split(" ") if item] + values.append(name) + timedict[name] = {next_name: int(next_time) - int(time)} linedict[key] = values - - return linedict - - - + + return linedict, timedict def build_tram_network(stopfile, linefile): From 0e8d930882ce66200a80bec6845814d993987279 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Sun, 17 Nov 2024 23:19:46 +0100 Subject: [PATCH 33/54] Update tramdata.py --- labs/lab1/tramdata.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index d6002f9..a4c3e84 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -2,7 +2,6 @@ from pprint import pprint - TRAM_STOP_FILE = 'labs/data/tramstops.json' with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) @@ -25,7 +24,6 @@ def build_tram_stops(jsonobject): return stopdict -pprint(build_tram_stops(data)) def build_tram_lines(lines): linedict = {} From 264eb377b8c1e2e5dbcdb1ff2eed64da1af4337a Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Mon, 18 Nov 2024 00:33:24 +0100 Subject: [PATCH 34/54] Fixat build_tram_lines uppdaterat funktion --- labs/lab1/test_tramdata.py | 2 +- labs/lab1/tramdata.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 09b9461..b6711d7 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -1,7 +1,7 @@ import unittest from tramdata import * -TRAM_FILE = './tramnetwork.json' +TRAM_FILE = 'labs/data/tramstops.json' class TestTramData(unittest.TestCase): diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index a4c3e84..9e10216 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -35,12 +35,22 @@ def build_tram_lines(lines): for i in range(1, len(line) - 1): name, time = [item.strip() for item in line[i].split(" ") if item] next_name, next_time = [item.strip() for item in line[i+1].split(" ") if item] + time_diff = int(next_time) - int(time) values.append(name) - timedict[name] = {next_name: int(next_time) - int(time)} + if name not in timedict: + timedict[name] = {} + if next_name not in timedict[name]: + timedict[name][next_name] = time_diff + + + + + + #timedict[name] = {next_name: int(next_time) - int(time)} linedict[key] = values return linedict, timedict - +pprint(build_tram_lines(lines)) def build_tram_network(stopfile, linefile): pass From aa692bb0957e6b78fc789e1f5017c10c1ec5cf70 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Mon, 18 Nov 2024 00:56:16 +0100 Subject: [PATCH 35/54] build_tram_lines faktiskt fixad --- labs/lab1/tramdata.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 9e10216..5d0d8bd 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -39,18 +39,15 @@ def build_tram_lines(lines): values.append(name) if name not in timedict: timedict[name] = {} - if next_name not in timedict[name]: + if next_name not in timedict: + timedict[next_name] = {} + if name not in timedict[next_name]: timedict[name][next_name] = time_diff - - - - - - #timedict[name] = {next_name: int(next_time) - int(time)} + #timedict[name] = {next_name: int(next_time) - int(time)} linedict[key] = values return linedict, timedict -pprint(build_tram_lines(lines)) + def build_tram_network(stopfile, linefile): pass From 82d432bbb1f46a233928bf28b95b79f532928df2 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Mon, 18 Nov 2024 01:26:21 +0100 Subject: [PATCH 36/54] build_tram_network fixad --- labs/lab1/tramdata.py | 12 +++++++++--- labs/lab1/tramnetwork.json | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 5d0d8bd..2db6ef5 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -43,14 +43,20 @@ def build_tram_lines(lines): timedict[next_name] = {} if name not in timedict[next_name]: timedict[name][next_name] = time_diff - #timedict[name] = {next_name: int(next_time) - int(time)} linedict[key] = values - return linedict, timedict + return (linedict, timedict) +pprint(build_tram_lines(lines)) def build_tram_network(stopfile, linefile): - pass + + outdict = {"stops": build_tram_stops(stopfile), "lines": build_tram_lines(linefile)[0], "times": build_tram_lines(linefile)[1]} + + with open("labs/lab1/tramnetwork.json", "w") as file: + json.dump(outdict, file) + +build_tram_network(data, lines) def lines_via_stop(linedict, stop): pass diff --git a/labs/lab1/tramnetwork.json b/labs/lab1/tramnetwork.json index e69de29..23c192a 100644 --- a/labs/lab1/tramnetwork.json +++ b/labs/lab1/tramnetwork.json @@ -0,0 +1 @@ +{"stops": {"\u00d6stra Sjukhuset": {"lat": "57.7224618", "lon": "12.0478166"}, "Tingvallsv\u00e4gen": {"lat": "57.7246437", "lon": "12.0420754"}, "Kaggeledstorget": {"lat": "57.7229358", "lon": "12.0332892"}, "\u00c4tteh\u00f6gsgatan": {"lat": "57.7200477", "lon": "12.0285376"}, "Munkeb\u00e4ckstorget": {"lat": "57.7185656", "lon": "12.0263524"}, "H\u00e4rlanda": {"lat": "57.7181065", "lon": "12.0194426"}, "Stockholmsgatan": {"lat": "57.7170564", "lon": "12.0136038"}, "Redbergsplatsen": {"lat": "57.716275", "lon": "12.004907"}, "Olskrokstorget": {"lat": "57.7146209", "lon": "11.9987871"}, "Svingeln": {"lat": "57.713358", "lon": "11.9917409"}, "Ullevi Norra": {"lat": "57.7081152", "lon": "11.9861639"}, "Centralstationen": {"lat": "57.7077849", "lon": "11.9734427"}, "Brunnsparken": {"lat": "57.7065955", "lon": "11.9689358"}, "Stenpiren": {"lat": "57.7056512", "lon": "11.9574172"}, "J\u00e4rntorget": {"lat": "57.6999652", "lon": "11.952972"}, "Prinsgatan": {"lat": "57.6964754", "lon": "11.9513521"}, "Olivedalsgatan": {"lat": "57.6918865", "lon": "11.9536831"}, "Linn\u00e9platsen": {"lat": "57.689966", "lon": "11.9520518"}, "Botaniska Tr\u00e4dg\u00e5rden": {"lat": "57.6812619", "lon": "11.9455821"}, "Marklandsgatan": {"lat": "57.673267", "lon": "11.9353621"}, "Axel Dahlstr\u00f6ms Torg": {"lat": "57.672288", "lon": "11.9275696"}, "Lantmilsgatan": {"lat": "57.6668601", "lon": "11.924836"}, "Nymilsgatan": {"lat": "57.6624705", "lon": "11.9250789"}, "Musikv\u00e4gen": {"lat": "57.6590769", "lon": "11.9206117"}, "Positivgatan": {"lat": "57.6566374", "lon": "11.9175191"}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"lat": "57.6527643", "lon": "11.9116376"}, "Briljantgatan": {"lat": "57.6486393", "lon": "11.9035069"}, "Smaragdgatan": {"lat": "57.6454509", "lon": "11.8993694"}, "Opaltorget": {"lat": "57.6423342", "lon": "11.9010554"}, "M\u00f6lndals Innerstad": {"lat": "57.655591400000006", "lon": "12.01855524009189"}, "M\u00f6lndals sjukhus": {"lat": "57.6614548", "lon": "12.0136632"}, "Lackareb\u00e4ck": {"lat": "57.6663479", "lon": "12.0114421"}, "Kroksl\u00e4tts Fabriker": {"lat": "57.6717887", "lon": "12.0100249"}, "Kroksl\u00e4tts torg": {"lat": "57.6753924", "lon": "12.0078652"}, "Lana": {"lat": "57.678333", "lon": "12.0041666"}, "Varbergsgatan": {"lat": "57.6795297", "lon": "12.003115"}, "Elisedal": {"lat": "57.6834394", "lon": "12.0004416"}, "Almedal": {"lat": "57.6867844", "lon": "11.9974967"}, "Liseberg S\u00f6dra": {"lat": "57.6945173", "lon": "11.993695420809985"}, "Korsv\u00e4gen": {"lat": "57.6968295", "lon": "11.9868341"}, "Scandinavium": {"lat": "57.7006276", "lon": "11.9858582"}, "Ullevi S\u00f6dra": {"lat": "57.7039541", "lon": "11.9850022"}, "Domkyrkan": {"lat": "57.7042356", "lon": "11.9636653"}, "Gr\u00f6nsakstorget": {"lat": "57.7025866", "lon": "11.9639739"}, "Vasaplatsen": {"lat": "57.6989398", "lon": "11.9705111"}, "Vasa Viktoriagatan": {"lat": "57.6985634", "lon": "11.9653312"}, "Handelsh\u00f6gskolan": {"lat": "57.6965303", "lon": "11.9625825"}, "Brunnsgatan": {"lat": "57.6936796", "lon": "11.9591759"}, "Seminariegatan": {"lat": "57.6920557", "lon": "11.9571828"}, "Bokekullsgatan": {"lat": "57.6771253", "lon": "11.9327977"}, "H\u00f6gsbogatan": {"lat": "57.6803596", "lon": "11.9301317"}, "Klintens V\u00e4g": {"lat": "57.6824461", "lon": "11.9279843"}, "Godhemsgatan": {"lat": "57.6854379", "lon": "11.9264658"}, "Mariaplan": {"lat": "57.686497", "lon": "11.9202959"}, "Ostindiegatan": {"lat": "57.6876154", "lon": "11.9156284"}, "Vagnhallen Majorna": {"lat": "57.6891689", "lon": "11.9123386"}, "Jaegerdorffsplatsen": {"lat": "57.6914334", "lon": "11.9150447"}, "Chapmans Torg": {"lat": "57.6944764", "lon": "11.9198652"}, "Kaptensgatan": {"lat": "57.6971583", "lon": "11.9276101"}, "Stigbergstorget": {"lat": "57.6990303", "lon": "11.9338896"}, "Masthuggstorget": {"lat": "57.6995343", "lon": "11.9447351"}, "Hagakyrkan": {"lat": "57.6996013", "lon": "11.9615964"}, "Valand": {"lat": "57.7004651", "lon": "11.9748851"}, "Kungsportsplatsen": {"lat": "57.7039668", "lon": "11.9697972"}, "Solrosgatan": {"lat": "57.7162733", "lon": "12.0250195"}, "Sanatoriegatan": {"lat": "57.7132161", "lon": "12.0240768"}, "Virginsgatan": {"lat": "57.7107812", "lon": "12.0235382"}, "Berzeliigatan": {"lat": "57.6983047", "lon": "11.9823431"}, "Gamlestads Torg": {"lat": "57.7279636", "lon": "12.0046485"}, "Hj\u00e4llbo": {"lat": "57.7692649", "lon": "12.0223749"}, "Hammarkullen": {"lat": "57.7800406", "lon": "12.0366009"}, "Stor\u00e5s": {"lat": "57.785139", "lon": "12.0462261"}, "Angered Centrum": {"lat": "57.7960687", "lon": "12.0495277"}, "Welandergatan": {"lat": "57.7060778", "lon": "12.0239345"}, "T\u00f6pelsgatan": {"lat": "57.7023397", "lon": "12.0221389"}, "B\u00f6gatan": {"lat": "57.700946", "lon": "12.0160087"}, "Ekmanska": {"lat": "57.6996668", "lon": "12.0096351"}, "B\u00e4ckeliden": {"lat": "57.6999206", "lon": "12.0033203"}, "Sankt Sigfrids Plan": {"lat": "57.6987301", "lon": "11.9994709"}, "Liseberg Station": {"lat": "57.6975588", "lon": "11.9942205"}, "Lilla Bommen": {"lat": "57.7092219", "lon": "11.9667699"}, "Frihamnen": {"lat": "57.7203255", "lon": "11.9600773"}, "Hjalmar Brantingsplatsen": {"lat": "57.7206077", "lon": "11.9522789"}, "V\u00e5gm\u00e4stareplatsen": {"lat": "57.720537", "lon": "11.9451746"}, "Wieselgrensplatsen": {"lat": "57.7205998", "lon": "11.9355948"}, "Rambergsvallen": {"lat": "57.719347", "lon": "11.9268104"}, "Gropeg\u00e5rdsgatan": {"lat": "57.7183037", "lon": "11.9191595"}, "Eketr\u00e4gatan": {"lat": "57.7164903", "lon": "11.9099118"}, "S\u00e4l\u00f6fjordsgatan": {"lat": "57.7136356", "lon": "11.9029025"}, "V\u00e5rv\u00e4derstorget": {"lat": "57.7129196", "lon": "11.8931411"}, "Mildv\u00e4dersgatan": {"lat": "57.7156823", "lon": "11.890926"}, "\u00d6nskev\u00e4dersgatan": {"lat": "57.7201505", "lon": "11.8930502"}, "Friskv\u00e4derstorget": {"lat": "57.7235673", "lon": "11.8931956"}, "V\u00e4derilsgatan": {"lat": "57.7265488", "lon": "11.8933485"}, "Temperaturgatan": {"lat": "57.732569", "lon": "11.8952913"}, "Varmfrontsgatan": {"lat": "57.7368776", "lon": "11.8966497"}, "Aprilgatan": {"lat": "57.7608913", "lon": "12.0409994"}, "Allhelgonakyrkan": {"lat": "57.7574065", "lon": "12.0374426"}, "Kortedala Torg": {"lat": "57.752779", "lon": "12.0330403"}, "Runstavsgatan": {"lat": "57.7479034", "lon": "12.0303082"}, "Nym\u00e5negatan": {"lat": "57.7427511", "lon": "12.0298737"}, "Bev\u00e4ringsgatan": {"lat": "57.7399617", "lon": "12.0286261"}, "Kviberg": {"lat": "57.7367053", "lon": "12.0265257"}, "Bellevue": {"lat": "57.7325237", "lon": "12.0246107"}, "SKF": {"lat": "57.7291018", "lon": "12.0132691"}, "Ejdergatan": {"lat": "57.7210222", "lon": "12.005952"}, "Chalmers": {"lat": "57.6900225", "lon": "11.9730927"}, "Wavrinskys Plats": {"lat": "57.6888028", "lon": "11.9684664"}, "Medicinaregatan": {"lat": "57.6855827", "lon": "11.9619508"}, "Sahlgrenska Huvudentr\u00e9": {"lat": "57.6836795", "lon": "11.9614653"}, "Nordstan": {"lat": "57.7086397", "lon": "11.969087498371342"}, "Komettorget": {"lat": "57.7511423", "lon": "12.0713114"}, "Rymdtorget Sp\u00e5rvagn": {"lat": "57.7558013", "lon": "12.0669195"}, "Teleskopgatan": {"lat": "57.7593", "lon": "12.0597894"}, "Galileis Gata": {"lat": "57.7605336", "lon": "12.051446"}, "Januarigatan": {"lat": "57.7602447", "lon": "12.0412135"}, "Kapellplatsen": {"lat": "57.6927713", "lon": "11.9735773"}, "Sannaplan": {"lat": "57.6842394", "lon": "11.9166553"}, "Sandarna": {"lat": "57.6827594", "lon": "11.9095056"}, "Kungssten": {"lat": "57.6805281", "lon": "11.9018248"}, "Doktor Sydows Gata": {"lat": "57.6793184", "lon": "11.9776909"}, "Doktor Fries Torg": {"lat": "57.6844804", "lon": "11.9726716"}, "Saltholmen": {"lat": "57.6606312", "lon": "11.8455002"}, "Roddf\u00f6reningen": {"lat": "57.6640011", "lon": "11.8516451"}, "L\u00e5ngedrag": {"lat": "57.6682375", "lon": "11.8535394"}, "Hinsholmen": {"lat": "57.6676904", "lon": "11.8610197"}, "K\u00e4ringberget": {"lat": "57.6692358", "lon": "11.8710883"}, "Tranered": {"lat": "57.6723198", "lon": "11.8793541"}, "Hagen": {"lat": "57.6748357", "lon": "11.8841485"}, "Nya Varvsall\u00e9n": {"lat": "57.6780065", "lon": "11.8950555"}, "Ekedal": {"lat": "57.6871315", "lon": "11.9290998"}, "Majvallen": {"lat": "57.6909343", "lon": "11.9354935"}, "Fj\u00e4llgatan": {"lat": "57.69443", "lon": "11.9362336"}}, "lines": {"1": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "H\u00e4rlanda", "Stockholmsgatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Prinsgatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "2": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen", "Brunnsparken", "Domkyrkan", "Gr\u00f6nsakstorget", "Vasaplatsen", "Vasa Viktoriagatan", "Handelsh\u00f6gskolan", "Brunnsgatan", "Seminariegatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan"], "3": ["Marklandsgatan", "Bokekullsgatan", "H\u00f6gsbogatan", "Klintens V\u00e4g", "Godhemsgatan", "Mariaplan", "Ostindiegatan", "Vagnhallen Majorna", "Jaegerdorffsplatsen", "Chapmans Torg", "Kaptensgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Vasa Viktoriagatan", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Ullevi Norra", "Svingeln", "Olskrokstorget", "Redbergsplatsen", "Stockholmsgatan", "H\u00e4rlanda", "Solrosgatan", "Sanatoriegatan"], "4": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "Hj\u00e4llbo", "Hammarkullen", "Stor\u00e5s"], "5": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "Solrosgatan", "Sanatoriegatan", "Virginsgatan", "Welandergatan", "T\u00f6pelsgatan", "B\u00f6gatan", "Ekmanska", "B\u00e4ckeliden", "Sankt Sigfrids Plan", "Liseberg Station", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "6": ["Aprilgatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Linn\u00e9platsen", "Olivedalsgatan", "Prinsgatan", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Nordstan", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "7": ["Komettorget", "Rymdtorget Sp\u00e5rvagn", "Teleskopgatan", "Galileis Gata", "Januarigatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Kungsportsplatsen", "Valand", "Vasaplatsen", "Kapellplatsen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "8": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan"], "9": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Masthuggstorget", "Stigbergstorget", "Kaptensgatan", "Chapmans Torg", "Jaegerdorffsplatsen", "Vagnhallen Majorna", "Ostindiegatan", "Sannaplan", "Sandarna"], "10": ["Doktor Sydows Gata", "Doktor Fries Torg", "Wavrinskys Plats", "Chalmers", "Kapellplatsen", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget"], "11": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Godhemsgatan", "Ekedal", "Majvallen", "Fj\u00e4llgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "SKF", "Bellevue", "Kviberg", "Bev\u00e4ringsgatan", "Nym\u00e5negatan", "Runstavsgatan", "Kortedala Torg", "Allhelgonakyrkan", "Januarigatan", "Galileis Gata", "Teleskopgatan", "Rymdtorget Sp\u00e5rvagn"], "13": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Marklandsgatan", "Botaniska Tr\u00e4dg\u00e5rden", "Sahlgrenska Huvudentr\u00e9", "Medicinaregatan", "Wavrinskys Plats", "Chalmers", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra"]}, "times": {"\u00d6stra Sjukhuset": {"Tingvallsv\u00e4gen": 1}, "Tingvallsv\u00e4gen": {"Kaggeledstorget": 2}, "Kaggeledstorget": {"\u00c4tteh\u00f6gsgatan": 0}, "\u00c4tteh\u00f6gsgatan": {"Munkeb\u00e4ckstorget": 1}, "Munkeb\u00e4ckstorget": {"H\u00e4rlanda": 2, "Solrosgatan": 1}, "H\u00e4rlanda": {"Stockholmsgatan": 1, "Solrosgatan": 2}, "Stockholmsgatan": {"Redbergsplatsen": 2}, "Redbergsplatsen": {"Olskrokstorget": 1}, "Olskrokstorget": {"Svingeln": 2}, "Svingeln": {"Ullevi Norra": 2}, "Ullevi Norra": {"Centralstationen": 1, "Ullevi S\u00f6dra": 2}, "Centralstationen": {"Brunnsparken": 1, "Gamlestads Torg": 6, "Lilla Bommen": 1}, "Brunnsparken": {"Stenpiren": 1, "Domkyrkan": 1, "Lilla Bommen": 0, "Nordstan": 1}, "Stenpiren": {"J\u00e4rntorget": 2}, "J\u00e4rntorget": {"Prinsgatan": 1, "Hagakyrkan": 3}, "Prinsgatan": {"Olivedalsgatan": 2}, "Olivedalsgatan": {"Linn\u00e9platsen": 1}, "Linn\u00e9platsen": {"Botaniska Tr\u00e4dg\u00e5rden": 2}, "Botaniska Tr\u00e4dg\u00e5rden": {"Marklandsgatan": 3}, "Marklandsgatan": {"Axel Dahlstr\u00f6ms Torg": 1, "Bokekullsgatan": 1}, "Axel Dahlstr\u00f6ms Torg": {"Lantmilsgatan": 1}, "Lantmilsgatan": {"Nymilsgatan": 1}, "Nymilsgatan": {"Musikv\u00e4gen": 1}, "Musikv\u00e4gen": {"Positivgatan": 2}, "Positivgatan": {"Fr\u00f6lunda Torg Sp\u00e5rvagn": 1}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"Briljantgatan": 2}, "Briljantgatan": {"Smaragdgatan": 1}, "Smaragdgatan": {"Opaltorget": 0}, "Opaltorget": {}, "M\u00f6lndals Innerstad": {"M\u00f6lndals sjukhus": 1}, "M\u00f6lndals sjukhus": {"Lackareb\u00e4ck": 2}, "Lackareb\u00e4ck": {"Kroksl\u00e4tts Fabriker": 1}, "Kroksl\u00e4tts Fabriker": {"Kroksl\u00e4tts torg": 1}, "Kroksl\u00e4tts torg": {"Lana": 1}, "Lana": {"Varbergsgatan": 1}, "Varbergsgatan": {"Elisedal": 1}, "Elisedal": {"Almedal": 1}, "Almedal": {"Liseberg S\u00f6dra": 2}, "Liseberg S\u00f6dra": {"Korsv\u00e4gen": 2}, "Korsv\u00e4gen": {"Scandinavium": 1, "Berzeliigatan": 1, "Chalmers": 3}, "Scandinavium": {"Ullevi S\u00f6dra": 2}, "Ullevi S\u00f6dra": {"Centralstationen": 3}, "Domkyrkan": {"Gr\u00f6nsakstorget": 1}, "Gr\u00f6nsakstorget": {"Vasaplatsen": 2}, "Vasaplatsen": {"Vasa Viktoriagatan": 1, "Valand": 1, "Kapellplatsen": 2}, "Vasa Viktoriagatan": {"Handelsh\u00f6gskolan": 1}, "Handelsh\u00f6gskolan": {"Brunnsgatan": 2}, "Brunnsgatan": {"Seminariegatan": 1}, "Seminariegatan": {"Olivedalsgatan": 1}, "Bokekullsgatan": {"H\u00f6gsbogatan": 1}, "H\u00f6gsbogatan": {"Klintens V\u00e4g": 2}, "Klintens V\u00e4g": {"Godhemsgatan": 1}, "Godhemsgatan": {"Mariaplan": 2, "Ekedal": 1}, "Mariaplan": {"Ostindiegatan": 1, "Marklandsgatan": 4}, "Ostindiegatan": {"Vagnhallen Majorna": 2, "Sannaplan": 1}, "Vagnhallen Majorna": {"Jaegerdorffsplatsen": 1}, "Jaegerdorffsplatsen": {"Chapmans Torg": 1}, "Chapmans Torg": {"Kaptensgatan": 2}, "Kaptensgatan": {"Stigbergstorget": 2}, "Stigbergstorget": {"Masthuggstorget": 2}, "Masthuggstorget": {"J\u00e4rntorget": 2}, "Hagakyrkan": {"Vasa Viktoriagatan": 1, "Gr\u00f6nsakstorget": 2}, "Valand": {"Kungsportsplatsen": 2}, "Kungsportsplatsen": {"Brunnsparken": 1}, "Solrosgatan": {"Sanatoriegatan": 1}, "Sanatoriegatan": {"Virginsgatan": 0}, "Virginsgatan": {"Welandergatan": 2}, "Berzeliigatan": {"Valand": 2}, "Gamlestads Torg": {"Hj\u00e4llbo": 1, "Ejdergatan": 2}, "Hj\u00e4llbo": {"Hammarkullen": 3}, "Hammarkullen": {"Stor\u00e5s": 1}, "Stor\u00e5s": {"Angered Centrum": 3}, "Angered Centrum": {}, "Welandergatan": {"T\u00f6pelsgatan": 1}, "T\u00f6pelsgatan": {"B\u00f6gatan": 1}, "B\u00f6gatan": {"Ekmanska": 1}, "Ekmanska": {"B\u00e4ckeliden": 1}, "B\u00e4ckeliden": {"Sankt Sigfrids Plan": 1}, "Sankt Sigfrids Plan": {"Liseberg Station": 1}, "Liseberg Station": {"Korsv\u00e4gen": 2}, "Lilla Bommen": {"Frihamnen": 4}, "Frihamnen": {"Hjalmar Brantingsplatsen": 1}, "Hjalmar Brantingsplatsen": {"V\u00e5gm\u00e4stareplatsen": 1}, "V\u00e5gm\u00e4stareplatsen": {"Wieselgrensplatsen": 1}, "Wieselgrensplatsen": {"Rambergsvallen": 1}, "Rambergsvallen": {"Gropeg\u00e5rdsgatan": 2}, "Gropeg\u00e5rdsgatan": {"Eketr\u00e4gatan": 1}, "Eketr\u00e4gatan": {"S\u00e4l\u00f6fjordsgatan": 2}, "S\u00e4l\u00f6fjordsgatan": {"V\u00e5rv\u00e4derstorget": 1}, "V\u00e5rv\u00e4derstorget": {"Mildv\u00e4dersgatan": 1}, "Mildv\u00e4dersgatan": {"\u00d6nskev\u00e4dersgatan": 1}, "\u00d6nskev\u00e4dersgatan": {"Friskv\u00e4derstorget": 1}, "Friskv\u00e4derstorget": {"V\u00e4derilsgatan": 1}, "V\u00e4derilsgatan": {"Temperaturgatan": 2}, "Temperaturgatan": {"Varmfrontsgatan": 0}, "Varmfrontsgatan": {}, "Aprilgatan": {"Allhelgonakyrkan": 1}, "Allhelgonakyrkan": {"Kortedala Torg": 1}, "Kortedala Torg": {"Runstavsgatan": 2}, "Runstavsgatan": {"Nym\u00e5negatan": 1}, "Nym\u00e5negatan": {"Bev\u00e4ringsgatan": 1}, "Bev\u00e4ringsgatan": {"Kviberg": 1}, "Kviberg": {"Bellevue": 1}, "Bellevue": {"SKF": 2}, "SKF": {"Gamlestads Torg": 1}, "Ejdergatan": {"Redbergsplatsen": 2}, "Chalmers": {"Wavrinskys Plats": 1}, "Wavrinskys Plats": {"Medicinaregatan": 2}, "Medicinaregatan": {"Sahlgrenska Huvudentr\u00e9": 2}, "Sahlgrenska Huvudentr\u00e9": {"Linn\u00e9platsen": 1, "Botaniska Tr\u00e4dg\u00e5rden": 3}, "Nordstan": {"Frihamnen": 1}, "Komettorget": {"Rymdtorget Sp\u00e5rvagn": 2}, "Rymdtorget Sp\u00e5rvagn": {"Teleskopgatan": 1}, "Teleskopgatan": {"Galileis Gata": 1}, "Galileis Gata": {"Januarigatan": 1}, "Januarigatan": {"Allhelgonakyrkan": 1}, "Kapellplatsen": {"Chalmers": 1}, "Sannaplan": {"Sandarna": 1, "Mariaplan": 1}, "Sandarna": {"Kungssten": 2}, "Kungssten": {}, "Doktor Sydows Gata": {"Doktor Fries Torg": 1}, "Doktor Fries Torg": {"Wavrinskys Plats": 2}, "Saltholmen": {"Roddf\u00f6reningen": 1}, "Roddf\u00f6reningen": {"L\u00e5ngedrag": 1}, "L\u00e5ngedrag": {"Hinsholmen": 1}, "Hinsholmen": {"K\u00e4ringberget": 2}, "K\u00e4ringberget": {"Tranered": 1}, "Tranered": {"Hagen": 1}, "Hagen": {"Nya Varvsall\u00e9n": 2}, "Nya Varvsall\u00e9n": {"Kungssten": 1}, "Ekedal": {"Majvallen": 1}, "Majvallen": {"Fj\u00e4llgatan": 1}, "Fj\u00e4llgatan": {"Stigbergstorget": 2}}} \ No newline at end of file From 8a5117d1001dc9f4ce6771aad74e4b705367971c Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Mon, 18 Nov 2024 01:33:22 +0100 Subject: [PATCH 37/54] Test OK --- labs/{lab1 => data}/tramnetwork.json | 0 labs/lab1/test_tramdata.py | 2 +- labs/lab1/tramdata.py | 7 +------ 3 files changed, 2 insertions(+), 7 deletions(-) rename labs/{lab1 => data}/tramnetwork.json (100%) diff --git a/labs/lab1/tramnetwork.json b/labs/data/tramnetwork.json similarity index 100% rename from labs/lab1/tramnetwork.json rename to labs/data/tramnetwork.json diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index b6711d7..3a427cb 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -1,7 +1,7 @@ import unittest from tramdata import * -TRAM_FILE = 'labs/data/tramstops.json' +TRAM_FILE = 'labs/data/tramnetwork.json' class TestTramData(unittest.TestCase): diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 2db6ef5..b83639b 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -10,13 +10,10 @@ with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: lines = file.read().replace(":","").strip().split("\n\n") - lines = [line.split("\n") for line in lines] - - def build_tram_stops(jsonobject): stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} @@ -47,16 +44,14 @@ def build_tram_lines(lines): return (linedict, timedict) -pprint(build_tram_lines(lines)) def build_tram_network(stopfile, linefile): outdict = {"stops": build_tram_stops(stopfile), "lines": build_tram_lines(linefile)[0], "times": build_tram_lines(linefile)[1]} - with open("labs/lab1/tramnetwork.json", "w") as file: + with open("labs/data/tramnetwork.json", "w") as file: json.dump(outdict, file) -build_tram_network(data, lines) def lines_via_stop(linedict, stop): pass From db7201eca55b8b85f684b1bfc183f06dfff3057a Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 19 Nov 2024 10:22:13 +0100 Subject: [PATCH 38/54] Update test_tramdata.py --- labs/lab1/test_tramdata.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 3a427cb..f0b96d8 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -16,7 +16,16 @@ def test_stops_exist(self): for stop in stopset: self.assertIn(stop, self.stopdict, msg = stop + ' not in stopdict') - # add your own tests here + def test_all_stops_included(self): + pass + def test_stops_in_line(self): + pass + def test_distance_feasible(self): + pass + def test_times_beetween_stops(self): + pass + + if __name__ == '__main__': From ad1958ed10a666319749aff451cadb1816945a82 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 19 Nov 2024 16:54:39 +0100 Subject: [PATCH 39/54] time_beetween_stops tillagd --- labs/data/tramnetwork.json | 2 +- labs/lab1/test_tramdata.py | 36 ++++++++++++++++++++++-- labs/lab1/tramdata.py | 56 ++++++++++++++++++++++++++++++++++---- testfile.py | 25 +++++++++++++++++ 4 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 testfile.py diff --git a/labs/data/tramnetwork.json b/labs/data/tramnetwork.json index 23c192a..b18b386 100644 --- a/labs/data/tramnetwork.json +++ b/labs/data/tramnetwork.json @@ -1 +1 @@ -{"stops": {"\u00d6stra Sjukhuset": {"lat": "57.7224618", "lon": "12.0478166"}, "Tingvallsv\u00e4gen": {"lat": "57.7246437", "lon": "12.0420754"}, "Kaggeledstorget": {"lat": "57.7229358", "lon": "12.0332892"}, "\u00c4tteh\u00f6gsgatan": {"lat": "57.7200477", "lon": "12.0285376"}, "Munkeb\u00e4ckstorget": {"lat": "57.7185656", "lon": "12.0263524"}, "H\u00e4rlanda": {"lat": "57.7181065", "lon": "12.0194426"}, "Stockholmsgatan": {"lat": "57.7170564", "lon": "12.0136038"}, "Redbergsplatsen": {"lat": "57.716275", "lon": "12.004907"}, "Olskrokstorget": {"lat": "57.7146209", "lon": "11.9987871"}, "Svingeln": {"lat": "57.713358", "lon": "11.9917409"}, "Ullevi Norra": {"lat": "57.7081152", "lon": "11.9861639"}, "Centralstationen": {"lat": "57.7077849", "lon": "11.9734427"}, "Brunnsparken": {"lat": "57.7065955", "lon": "11.9689358"}, "Stenpiren": {"lat": "57.7056512", "lon": "11.9574172"}, "J\u00e4rntorget": {"lat": "57.6999652", "lon": "11.952972"}, "Prinsgatan": {"lat": "57.6964754", "lon": "11.9513521"}, "Olivedalsgatan": {"lat": "57.6918865", "lon": "11.9536831"}, "Linn\u00e9platsen": {"lat": "57.689966", "lon": "11.9520518"}, "Botaniska Tr\u00e4dg\u00e5rden": {"lat": "57.6812619", "lon": "11.9455821"}, "Marklandsgatan": {"lat": "57.673267", "lon": "11.9353621"}, "Axel Dahlstr\u00f6ms Torg": {"lat": "57.672288", "lon": "11.9275696"}, "Lantmilsgatan": {"lat": "57.6668601", "lon": "11.924836"}, "Nymilsgatan": {"lat": "57.6624705", "lon": "11.9250789"}, "Musikv\u00e4gen": {"lat": "57.6590769", "lon": "11.9206117"}, "Positivgatan": {"lat": "57.6566374", "lon": "11.9175191"}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"lat": "57.6527643", "lon": "11.9116376"}, "Briljantgatan": {"lat": "57.6486393", "lon": "11.9035069"}, "Smaragdgatan": {"lat": "57.6454509", "lon": "11.8993694"}, "Opaltorget": {"lat": "57.6423342", "lon": "11.9010554"}, "M\u00f6lndals Innerstad": {"lat": "57.655591400000006", "lon": "12.01855524009189"}, "M\u00f6lndals sjukhus": {"lat": "57.6614548", "lon": "12.0136632"}, "Lackareb\u00e4ck": {"lat": "57.6663479", "lon": "12.0114421"}, "Kroksl\u00e4tts Fabriker": {"lat": "57.6717887", "lon": "12.0100249"}, "Kroksl\u00e4tts torg": {"lat": "57.6753924", "lon": "12.0078652"}, "Lana": {"lat": "57.678333", "lon": "12.0041666"}, "Varbergsgatan": {"lat": "57.6795297", "lon": "12.003115"}, "Elisedal": {"lat": "57.6834394", "lon": "12.0004416"}, "Almedal": {"lat": "57.6867844", "lon": "11.9974967"}, "Liseberg S\u00f6dra": {"lat": "57.6945173", "lon": "11.993695420809985"}, "Korsv\u00e4gen": {"lat": "57.6968295", "lon": "11.9868341"}, "Scandinavium": {"lat": "57.7006276", "lon": "11.9858582"}, "Ullevi S\u00f6dra": {"lat": "57.7039541", "lon": "11.9850022"}, "Domkyrkan": {"lat": "57.7042356", "lon": "11.9636653"}, "Gr\u00f6nsakstorget": {"lat": "57.7025866", "lon": "11.9639739"}, "Vasaplatsen": {"lat": "57.6989398", "lon": "11.9705111"}, "Vasa Viktoriagatan": {"lat": "57.6985634", "lon": "11.9653312"}, "Handelsh\u00f6gskolan": {"lat": "57.6965303", "lon": "11.9625825"}, "Brunnsgatan": {"lat": "57.6936796", "lon": "11.9591759"}, "Seminariegatan": {"lat": "57.6920557", "lon": "11.9571828"}, "Bokekullsgatan": {"lat": "57.6771253", "lon": "11.9327977"}, "H\u00f6gsbogatan": {"lat": "57.6803596", "lon": "11.9301317"}, "Klintens V\u00e4g": {"lat": "57.6824461", "lon": "11.9279843"}, "Godhemsgatan": {"lat": "57.6854379", "lon": "11.9264658"}, "Mariaplan": {"lat": "57.686497", "lon": "11.9202959"}, "Ostindiegatan": {"lat": "57.6876154", "lon": "11.9156284"}, "Vagnhallen Majorna": {"lat": "57.6891689", "lon": "11.9123386"}, "Jaegerdorffsplatsen": {"lat": "57.6914334", "lon": "11.9150447"}, "Chapmans Torg": {"lat": "57.6944764", "lon": "11.9198652"}, "Kaptensgatan": {"lat": "57.6971583", "lon": "11.9276101"}, "Stigbergstorget": {"lat": "57.6990303", "lon": "11.9338896"}, "Masthuggstorget": {"lat": "57.6995343", "lon": "11.9447351"}, "Hagakyrkan": {"lat": "57.6996013", "lon": "11.9615964"}, "Valand": {"lat": "57.7004651", "lon": "11.9748851"}, "Kungsportsplatsen": {"lat": "57.7039668", "lon": "11.9697972"}, "Solrosgatan": {"lat": "57.7162733", "lon": "12.0250195"}, "Sanatoriegatan": {"lat": "57.7132161", "lon": "12.0240768"}, "Virginsgatan": {"lat": "57.7107812", "lon": "12.0235382"}, "Berzeliigatan": {"lat": "57.6983047", "lon": "11.9823431"}, "Gamlestads Torg": {"lat": "57.7279636", "lon": "12.0046485"}, "Hj\u00e4llbo": {"lat": "57.7692649", "lon": "12.0223749"}, "Hammarkullen": {"lat": "57.7800406", "lon": "12.0366009"}, "Stor\u00e5s": {"lat": "57.785139", "lon": "12.0462261"}, "Angered Centrum": {"lat": "57.7960687", "lon": "12.0495277"}, "Welandergatan": {"lat": "57.7060778", "lon": "12.0239345"}, "T\u00f6pelsgatan": {"lat": "57.7023397", "lon": "12.0221389"}, "B\u00f6gatan": {"lat": "57.700946", "lon": "12.0160087"}, "Ekmanska": {"lat": "57.6996668", "lon": "12.0096351"}, "B\u00e4ckeliden": {"lat": "57.6999206", "lon": "12.0033203"}, "Sankt Sigfrids Plan": {"lat": "57.6987301", "lon": "11.9994709"}, "Liseberg Station": {"lat": "57.6975588", "lon": "11.9942205"}, "Lilla Bommen": {"lat": "57.7092219", "lon": "11.9667699"}, "Frihamnen": {"lat": "57.7203255", "lon": "11.9600773"}, "Hjalmar Brantingsplatsen": {"lat": "57.7206077", "lon": "11.9522789"}, "V\u00e5gm\u00e4stareplatsen": {"lat": "57.720537", "lon": "11.9451746"}, "Wieselgrensplatsen": {"lat": "57.7205998", "lon": "11.9355948"}, "Rambergsvallen": {"lat": "57.719347", "lon": "11.9268104"}, "Gropeg\u00e5rdsgatan": {"lat": "57.7183037", "lon": "11.9191595"}, "Eketr\u00e4gatan": {"lat": "57.7164903", "lon": "11.9099118"}, "S\u00e4l\u00f6fjordsgatan": {"lat": "57.7136356", "lon": "11.9029025"}, "V\u00e5rv\u00e4derstorget": {"lat": "57.7129196", "lon": "11.8931411"}, "Mildv\u00e4dersgatan": {"lat": "57.7156823", "lon": "11.890926"}, "\u00d6nskev\u00e4dersgatan": {"lat": "57.7201505", "lon": "11.8930502"}, "Friskv\u00e4derstorget": {"lat": "57.7235673", "lon": "11.8931956"}, "V\u00e4derilsgatan": {"lat": "57.7265488", "lon": "11.8933485"}, "Temperaturgatan": {"lat": "57.732569", "lon": "11.8952913"}, "Varmfrontsgatan": {"lat": "57.7368776", "lon": "11.8966497"}, "Aprilgatan": {"lat": "57.7608913", "lon": "12.0409994"}, "Allhelgonakyrkan": {"lat": "57.7574065", "lon": "12.0374426"}, "Kortedala Torg": {"lat": "57.752779", "lon": "12.0330403"}, "Runstavsgatan": {"lat": "57.7479034", "lon": "12.0303082"}, "Nym\u00e5negatan": {"lat": "57.7427511", "lon": "12.0298737"}, "Bev\u00e4ringsgatan": {"lat": "57.7399617", "lon": "12.0286261"}, "Kviberg": {"lat": "57.7367053", "lon": "12.0265257"}, "Bellevue": {"lat": "57.7325237", "lon": "12.0246107"}, "SKF": {"lat": "57.7291018", "lon": "12.0132691"}, "Ejdergatan": {"lat": "57.7210222", "lon": "12.005952"}, "Chalmers": {"lat": "57.6900225", "lon": "11.9730927"}, "Wavrinskys Plats": {"lat": "57.6888028", "lon": "11.9684664"}, "Medicinaregatan": {"lat": "57.6855827", "lon": "11.9619508"}, "Sahlgrenska Huvudentr\u00e9": {"lat": "57.6836795", "lon": "11.9614653"}, "Nordstan": {"lat": "57.7086397", "lon": "11.969087498371342"}, "Komettorget": {"lat": "57.7511423", "lon": "12.0713114"}, "Rymdtorget Sp\u00e5rvagn": {"lat": "57.7558013", "lon": "12.0669195"}, "Teleskopgatan": {"lat": "57.7593", "lon": "12.0597894"}, "Galileis Gata": {"lat": "57.7605336", "lon": "12.051446"}, "Januarigatan": {"lat": "57.7602447", "lon": "12.0412135"}, "Kapellplatsen": {"lat": "57.6927713", "lon": "11.9735773"}, "Sannaplan": {"lat": "57.6842394", "lon": "11.9166553"}, "Sandarna": {"lat": "57.6827594", "lon": "11.9095056"}, "Kungssten": {"lat": "57.6805281", "lon": "11.9018248"}, "Doktor Sydows Gata": {"lat": "57.6793184", "lon": "11.9776909"}, "Doktor Fries Torg": {"lat": "57.6844804", "lon": "11.9726716"}, "Saltholmen": {"lat": "57.6606312", "lon": "11.8455002"}, "Roddf\u00f6reningen": {"lat": "57.6640011", "lon": "11.8516451"}, "L\u00e5ngedrag": {"lat": "57.6682375", "lon": "11.8535394"}, "Hinsholmen": {"lat": "57.6676904", "lon": "11.8610197"}, "K\u00e4ringberget": {"lat": "57.6692358", "lon": "11.8710883"}, "Tranered": {"lat": "57.6723198", "lon": "11.8793541"}, "Hagen": {"lat": "57.6748357", "lon": "11.8841485"}, "Nya Varvsall\u00e9n": {"lat": "57.6780065", "lon": "11.8950555"}, "Ekedal": {"lat": "57.6871315", "lon": "11.9290998"}, "Majvallen": {"lat": "57.6909343", "lon": "11.9354935"}, "Fj\u00e4llgatan": {"lat": "57.69443", "lon": "11.9362336"}}, "lines": {"1": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "H\u00e4rlanda", "Stockholmsgatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Prinsgatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "2": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen", "Brunnsparken", "Domkyrkan", "Gr\u00f6nsakstorget", "Vasaplatsen", "Vasa Viktoriagatan", "Handelsh\u00f6gskolan", "Brunnsgatan", "Seminariegatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan"], "3": ["Marklandsgatan", "Bokekullsgatan", "H\u00f6gsbogatan", "Klintens V\u00e4g", "Godhemsgatan", "Mariaplan", "Ostindiegatan", "Vagnhallen Majorna", "Jaegerdorffsplatsen", "Chapmans Torg", "Kaptensgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Vasa Viktoriagatan", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Ullevi Norra", "Svingeln", "Olskrokstorget", "Redbergsplatsen", "Stockholmsgatan", "H\u00e4rlanda", "Solrosgatan", "Sanatoriegatan"], "4": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "Hj\u00e4llbo", "Hammarkullen", "Stor\u00e5s"], "5": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "Solrosgatan", "Sanatoriegatan", "Virginsgatan", "Welandergatan", "T\u00f6pelsgatan", "B\u00f6gatan", "Ekmanska", "B\u00e4ckeliden", "Sankt Sigfrids Plan", "Liseberg Station", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "6": ["Aprilgatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Linn\u00e9platsen", "Olivedalsgatan", "Prinsgatan", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Nordstan", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "7": ["Komettorget", "Rymdtorget Sp\u00e5rvagn", "Teleskopgatan", "Galileis Gata", "Januarigatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Kungsportsplatsen", "Valand", "Vasaplatsen", "Kapellplatsen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "8": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan"], "9": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Masthuggstorget", "Stigbergstorget", "Kaptensgatan", "Chapmans Torg", "Jaegerdorffsplatsen", "Vagnhallen Majorna", "Ostindiegatan", "Sannaplan", "Sandarna"], "10": ["Doktor Sydows Gata", "Doktor Fries Torg", "Wavrinskys Plats", "Chalmers", "Kapellplatsen", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget"], "11": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Godhemsgatan", "Ekedal", "Majvallen", "Fj\u00e4llgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "SKF", "Bellevue", "Kviberg", "Bev\u00e4ringsgatan", "Nym\u00e5negatan", "Runstavsgatan", "Kortedala Torg", "Allhelgonakyrkan", "Januarigatan", "Galileis Gata", "Teleskopgatan", "Rymdtorget Sp\u00e5rvagn"], "13": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Marklandsgatan", "Botaniska Tr\u00e4dg\u00e5rden", "Sahlgrenska Huvudentr\u00e9", "Medicinaregatan", "Wavrinskys Plats", "Chalmers", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra"]}, "times": {"\u00d6stra Sjukhuset": {"Tingvallsv\u00e4gen": 1}, "Tingvallsv\u00e4gen": {"Kaggeledstorget": 2}, "Kaggeledstorget": {"\u00c4tteh\u00f6gsgatan": 0}, "\u00c4tteh\u00f6gsgatan": {"Munkeb\u00e4ckstorget": 1}, "Munkeb\u00e4ckstorget": {"H\u00e4rlanda": 2, "Solrosgatan": 1}, "H\u00e4rlanda": {"Stockholmsgatan": 1, "Solrosgatan": 2}, "Stockholmsgatan": {"Redbergsplatsen": 2}, "Redbergsplatsen": {"Olskrokstorget": 1}, "Olskrokstorget": {"Svingeln": 2}, "Svingeln": {"Ullevi Norra": 2}, "Ullevi Norra": {"Centralstationen": 1, "Ullevi S\u00f6dra": 2}, "Centralstationen": {"Brunnsparken": 1, "Gamlestads Torg": 6, "Lilla Bommen": 1}, "Brunnsparken": {"Stenpiren": 1, "Domkyrkan": 1, "Lilla Bommen": 0, "Nordstan": 1}, "Stenpiren": {"J\u00e4rntorget": 2}, "J\u00e4rntorget": {"Prinsgatan": 1, "Hagakyrkan": 3}, "Prinsgatan": {"Olivedalsgatan": 2}, "Olivedalsgatan": {"Linn\u00e9platsen": 1}, "Linn\u00e9platsen": {"Botaniska Tr\u00e4dg\u00e5rden": 2}, "Botaniska Tr\u00e4dg\u00e5rden": {"Marklandsgatan": 3}, "Marklandsgatan": {"Axel Dahlstr\u00f6ms Torg": 1, "Bokekullsgatan": 1}, "Axel Dahlstr\u00f6ms Torg": {"Lantmilsgatan": 1}, "Lantmilsgatan": {"Nymilsgatan": 1}, "Nymilsgatan": {"Musikv\u00e4gen": 1}, "Musikv\u00e4gen": {"Positivgatan": 2}, "Positivgatan": {"Fr\u00f6lunda Torg Sp\u00e5rvagn": 1}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"Briljantgatan": 2}, "Briljantgatan": {"Smaragdgatan": 1}, "Smaragdgatan": {"Opaltorget": 0}, "Opaltorget": {}, "M\u00f6lndals Innerstad": {"M\u00f6lndals sjukhus": 1}, "M\u00f6lndals sjukhus": {"Lackareb\u00e4ck": 2}, "Lackareb\u00e4ck": {"Kroksl\u00e4tts Fabriker": 1}, "Kroksl\u00e4tts Fabriker": {"Kroksl\u00e4tts torg": 1}, "Kroksl\u00e4tts torg": {"Lana": 1}, "Lana": {"Varbergsgatan": 1}, "Varbergsgatan": {"Elisedal": 1}, "Elisedal": {"Almedal": 1}, "Almedal": {"Liseberg S\u00f6dra": 2}, "Liseberg S\u00f6dra": {"Korsv\u00e4gen": 2}, "Korsv\u00e4gen": {"Scandinavium": 1, "Berzeliigatan": 1, "Chalmers": 3}, "Scandinavium": {"Ullevi S\u00f6dra": 2}, "Ullevi S\u00f6dra": {"Centralstationen": 3}, "Domkyrkan": {"Gr\u00f6nsakstorget": 1}, "Gr\u00f6nsakstorget": {"Vasaplatsen": 2}, "Vasaplatsen": {"Vasa Viktoriagatan": 1, "Valand": 1, "Kapellplatsen": 2}, "Vasa Viktoriagatan": {"Handelsh\u00f6gskolan": 1}, "Handelsh\u00f6gskolan": {"Brunnsgatan": 2}, "Brunnsgatan": {"Seminariegatan": 1}, "Seminariegatan": {"Olivedalsgatan": 1}, "Bokekullsgatan": {"H\u00f6gsbogatan": 1}, "H\u00f6gsbogatan": {"Klintens V\u00e4g": 2}, "Klintens V\u00e4g": {"Godhemsgatan": 1}, "Godhemsgatan": {"Mariaplan": 2, "Ekedal": 1}, "Mariaplan": {"Ostindiegatan": 1, "Marklandsgatan": 4}, "Ostindiegatan": {"Vagnhallen Majorna": 2, "Sannaplan": 1}, "Vagnhallen Majorna": {"Jaegerdorffsplatsen": 1}, "Jaegerdorffsplatsen": {"Chapmans Torg": 1}, "Chapmans Torg": {"Kaptensgatan": 2}, "Kaptensgatan": {"Stigbergstorget": 2}, "Stigbergstorget": {"Masthuggstorget": 2}, "Masthuggstorget": {"J\u00e4rntorget": 2}, "Hagakyrkan": {"Vasa Viktoriagatan": 1, "Gr\u00f6nsakstorget": 2}, "Valand": {"Kungsportsplatsen": 2}, "Kungsportsplatsen": {"Brunnsparken": 1}, "Solrosgatan": {"Sanatoriegatan": 1}, "Sanatoriegatan": {"Virginsgatan": 0}, "Virginsgatan": {"Welandergatan": 2}, "Berzeliigatan": {"Valand": 2}, "Gamlestads Torg": {"Hj\u00e4llbo": 1, "Ejdergatan": 2}, "Hj\u00e4llbo": {"Hammarkullen": 3}, "Hammarkullen": {"Stor\u00e5s": 1}, "Stor\u00e5s": {"Angered Centrum": 3}, "Angered Centrum": {}, "Welandergatan": {"T\u00f6pelsgatan": 1}, "T\u00f6pelsgatan": {"B\u00f6gatan": 1}, "B\u00f6gatan": {"Ekmanska": 1}, "Ekmanska": {"B\u00e4ckeliden": 1}, "B\u00e4ckeliden": {"Sankt Sigfrids Plan": 1}, "Sankt Sigfrids Plan": {"Liseberg Station": 1}, "Liseberg Station": {"Korsv\u00e4gen": 2}, "Lilla Bommen": {"Frihamnen": 4}, "Frihamnen": {"Hjalmar Brantingsplatsen": 1}, "Hjalmar Brantingsplatsen": {"V\u00e5gm\u00e4stareplatsen": 1}, "V\u00e5gm\u00e4stareplatsen": {"Wieselgrensplatsen": 1}, "Wieselgrensplatsen": {"Rambergsvallen": 1}, "Rambergsvallen": {"Gropeg\u00e5rdsgatan": 2}, "Gropeg\u00e5rdsgatan": {"Eketr\u00e4gatan": 1}, "Eketr\u00e4gatan": {"S\u00e4l\u00f6fjordsgatan": 2}, "S\u00e4l\u00f6fjordsgatan": {"V\u00e5rv\u00e4derstorget": 1}, "V\u00e5rv\u00e4derstorget": {"Mildv\u00e4dersgatan": 1}, "Mildv\u00e4dersgatan": {"\u00d6nskev\u00e4dersgatan": 1}, "\u00d6nskev\u00e4dersgatan": {"Friskv\u00e4derstorget": 1}, "Friskv\u00e4derstorget": {"V\u00e4derilsgatan": 1}, "V\u00e4derilsgatan": {"Temperaturgatan": 2}, "Temperaturgatan": {"Varmfrontsgatan": 0}, "Varmfrontsgatan": {}, "Aprilgatan": {"Allhelgonakyrkan": 1}, "Allhelgonakyrkan": {"Kortedala Torg": 1}, "Kortedala Torg": {"Runstavsgatan": 2}, "Runstavsgatan": {"Nym\u00e5negatan": 1}, "Nym\u00e5negatan": {"Bev\u00e4ringsgatan": 1}, "Bev\u00e4ringsgatan": {"Kviberg": 1}, "Kviberg": {"Bellevue": 1}, "Bellevue": {"SKF": 2}, "SKF": {"Gamlestads Torg": 1}, "Ejdergatan": {"Redbergsplatsen": 2}, "Chalmers": {"Wavrinskys Plats": 1}, "Wavrinskys Plats": {"Medicinaregatan": 2}, "Medicinaregatan": {"Sahlgrenska Huvudentr\u00e9": 2}, "Sahlgrenska Huvudentr\u00e9": {"Linn\u00e9platsen": 1, "Botaniska Tr\u00e4dg\u00e5rden": 3}, "Nordstan": {"Frihamnen": 1}, "Komettorget": {"Rymdtorget Sp\u00e5rvagn": 2}, "Rymdtorget Sp\u00e5rvagn": {"Teleskopgatan": 1}, "Teleskopgatan": {"Galileis Gata": 1}, "Galileis Gata": {"Januarigatan": 1}, "Januarigatan": {"Allhelgonakyrkan": 1}, "Kapellplatsen": {"Chalmers": 1}, "Sannaplan": {"Sandarna": 1, "Mariaplan": 1}, "Sandarna": {"Kungssten": 2}, "Kungssten": {}, "Doktor Sydows Gata": {"Doktor Fries Torg": 1}, "Doktor Fries Torg": {"Wavrinskys Plats": 2}, "Saltholmen": {"Roddf\u00f6reningen": 1}, "Roddf\u00f6reningen": {"L\u00e5ngedrag": 1}, "L\u00e5ngedrag": {"Hinsholmen": 1}, "Hinsholmen": {"K\u00e4ringberget": 2}, "K\u00e4ringberget": {"Tranered": 1}, "Tranered": {"Hagen": 1}, "Hagen": {"Nya Varvsall\u00e9n": 2}, "Nya Varvsall\u00e9n": {"Kungssten": 1}, "Ekedal": {"Majvallen": 1}, "Majvallen": {"Fj\u00e4llgatan": 1}, "Fj\u00e4llgatan": {"Stigbergstorget": 2}}} \ No newline at end of file +{"stops": {"\u00d6stra Sjukhuset": {"lat": "57.7224618", "lon": "12.0478166"}, "Tingvallsv\u00e4gen": {"lat": "57.7246437", "lon": "12.0420754"}, "Kaggeledstorget": {"lat": "57.7229358", "lon": "12.0332892"}, "\u00c4tteh\u00f6gsgatan": {"lat": "57.7200477", "lon": "12.0285376"}, "Munkeb\u00e4ckstorget": {"lat": "57.7185656", "lon": "12.0263524"}, "H\u00e4rlanda": {"lat": "57.7181065", "lon": "12.0194426"}, "Stockholmsgatan": {"lat": "57.7170564", "lon": "12.0136038"}, "Redbergsplatsen": {"lat": "57.716275", "lon": "12.004907"}, "Olskrokstorget": {"lat": "57.7146209", "lon": "11.9987871"}, "Svingeln": {"lat": "57.713358", "lon": "11.9917409"}, "Ullevi Norra": {"lat": "57.7081152", "lon": "11.9861639"}, "Centralstationen": {"lat": "57.7077849", "lon": "11.9734427"}, "Brunnsparken": {"lat": "57.7065955", "lon": "11.9689358"}, "Stenpiren": {"lat": "57.7056512", "lon": "11.9574172"}, "J\u00e4rntorget": {"lat": "57.6999652", "lon": "11.952972"}, "Prinsgatan": {"lat": "57.6964754", "lon": "11.9513521"}, "Olivedalsgatan": {"lat": "57.6918865", "lon": "11.9536831"}, "Linn\u00e9platsen": {"lat": "57.689966", "lon": "11.9520518"}, "Botaniska Tr\u00e4dg\u00e5rden": {"lat": "57.6812619", "lon": "11.9455821"}, "Marklandsgatan": {"lat": "57.673267", "lon": "11.9353621"}, "Axel Dahlstr\u00f6ms Torg": {"lat": "57.672288", "lon": "11.9275696"}, "Lantmilsgatan": {"lat": "57.6668601", "lon": "11.924836"}, "Nymilsgatan": {"lat": "57.6624705", "lon": "11.9250789"}, "Musikv\u00e4gen": {"lat": "57.6590769", "lon": "11.9206117"}, "Positivgatan": {"lat": "57.6566374", "lon": "11.9175191"}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"lat": "57.6527643", "lon": "11.9116376"}, "Briljantgatan": {"lat": "57.6486393", "lon": "11.9035069"}, "Smaragdgatan": {"lat": "57.6454509", "lon": "11.8993694"}, "Opaltorget": {"lat": "57.6423342", "lon": "11.9010554"}, "M\u00f6lndals Innerstad": {"lat": "57.655591400000006", "lon": "12.01855524009189"}, "M\u00f6lndals sjukhus": {"lat": "57.6614548", "lon": "12.0136632"}, "Lackareb\u00e4ck": {"lat": "57.6663479", "lon": "12.0114421"}, "Kroksl\u00e4tts Fabriker": {"lat": "57.6717887", "lon": "12.0100249"}, "Kroksl\u00e4tts torg": {"lat": "57.6753924", "lon": "12.0078652"}, "Lana": {"lat": "57.678333", "lon": "12.0041666"}, "Varbergsgatan": {"lat": "57.6795297", "lon": "12.003115"}, "Elisedal": {"lat": "57.6834394", "lon": "12.0004416"}, "Almedal": {"lat": "57.6867844", "lon": "11.9974967"}, "Liseberg S\u00f6dra": {"lat": "57.6945173", "lon": "11.993695420809985"}, "Korsv\u00e4gen": {"lat": "57.6968295", "lon": "11.9868341"}, "Scandinavium": {"lat": "57.7006276", "lon": "11.9858582"}, "Ullevi S\u00f6dra": {"lat": "57.7039541", "lon": "11.9850022"}, "Domkyrkan": {"lat": "57.7042356", "lon": "11.9636653"}, "Gr\u00f6nsakstorget": {"lat": "57.7025866", "lon": "11.9639739"}, "Vasaplatsen": {"lat": "57.6989398", "lon": "11.9705111"}, "Vasa Viktoriagatan": {"lat": "57.6985634", "lon": "11.9653312"}, "Handelsh\u00f6gskolan": {"lat": "57.6965303", "lon": "11.9625825"}, "Brunnsgatan": {"lat": "57.6936796", "lon": "11.9591759"}, "Seminariegatan": {"lat": "57.6920557", "lon": "11.9571828"}, "Bokekullsgatan": {"lat": "57.6771253", "lon": "11.9327977"}, "H\u00f6gsbogatan": {"lat": "57.6803596", "lon": "11.9301317"}, "Klintens V\u00e4g": {"lat": "57.6824461", "lon": "11.9279843"}, "Godhemsgatan": {"lat": "57.6854379", "lon": "11.9264658"}, "Mariaplan": {"lat": "57.686497", "lon": "11.9202959"}, "Ostindiegatan": {"lat": "57.6876154", "lon": "11.9156284"}, "Vagnhallen Majorna": {"lat": "57.6891689", "lon": "11.9123386"}, "Jaegerdorffsplatsen": {"lat": "57.6914334", "lon": "11.9150447"}, "Chapmans Torg": {"lat": "57.6944764", "lon": "11.9198652"}, "Kaptensgatan": {"lat": "57.6971583", "lon": "11.9276101"}, "Stigbergstorget": {"lat": "57.6990303", "lon": "11.9338896"}, "Masthuggstorget": {"lat": "57.6995343", "lon": "11.9447351"}, "Hagakyrkan": {"lat": "57.6996013", "lon": "11.9615964"}, "Valand": {"lat": "57.7004651", "lon": "11.9748851"}, "Kungsportsplatsen": {"lat": "57.7039668", "lon": "11.9697972"}, "Solrosgatan": {"lat": "57.7162733", "lon": "12.0250195"}, "Sanatoriegatan": {"lat": "57.7132161", "lon": "12.0240768"}, "Virginsgatan": {"lat": "57.7107812", "lon": "12.0235382"}, "Berzeliigatan": {"lat": "57.6983047", "lon": "11.9823431"}, "Gamlestads Torg": {"lat": "57.7279636", "lon": "12.0046485"}, "Hj\u00e4llbo": {"lat": "57.7692649", "lon": "12.0223749"}, "Hammarkullen": {"lat": "57.7800406", "lon": "12.0366009"}, "Stor\u00e5s": {"lat": "57.785139", "lon": "12.0462261"}, "Angered Centrum": {"lat": "57.7960687", "lon": "12.0495277"}, "Welandergatan": {"lat": "57.7060778", "lon": "12.0239345"}, "T\u00f6pelsgatan": {"lat": "57.7023397", "lon": "12.0221389"}, "B\u00f6gatan": {"lat": "57.700946", "lon": "12.0160087"}, "Ekmanska": {"lat": "57.6996668", "lon": "12.0096351"}, "B\u00e4ckeliden": {"lat": "57.6999206", "lon": "12.0033203"}, "Sankt Sigfrids Plan": {"lat": "57.6987301", "lon": "11.9994709"}, "Liseberg Station": {"lat": "57.6975588", "lon": "11.9942205"}, "Lilla Bommen": {"lat": "57.7092219", "lon": "11.9667699"}, "Frihamnen": {"lat": "57.7203255", "lon": "11.9600773"}, "Hjalmar Brantingsplatsen": {"lat": "57.7206077", "lon": "11.9522789"}, "V\u00e5gm\u00e4stareplatsen": {"lat": "57.720537", "lon": "11.9451746"}, "Wieselgrensplatsen": {"lat": "57.7205998", "lon": "11.9355948"}, "Rambergsvallen": {"lat": "57.719347", "lon": "11.9268104"}, "Gropeg\u00e5rdsgatan": {"lat": "57.7183037", "lon": "11.9191595"}, "Eketr\u00e4gatan": {"lat": "57.7164903", "lon": "11.9099118"}, "S\u00e4l\u00f6fjordsgatan": {"lat": "57.7136356", "lon": "11.9029025"}, "V\u00e5rv\u00e4derstorget": {"lat": "57.7129196", "lon": "11.8931411"}, "Mildv\u00e4dersgatan": {"lat": "57.7156823", "lon": "11.890926"}, "\u00d6nskev\u00e4dersgatan": {"lat": "57.7201505", "lon": "11.8930502"}, "Friskv\u00e4derstorget": {"lat": "57.7235673", "lon": "11.8931956"}, "V\u00e4derilsgatan": {"lat": "57.7265488", "lon": "11.8933485"}, "Temperaturgatan": {"lat": "57.732569", "lon": "11.8952913"}, "Varmfrontsgatan": {"lat": "57.7368776", "lon": "11.8966497"}, "Aprilgatan": {"lat": "57.7608913", "lon": "12.0409994"}, "Allhelgonakyrkan": {"lat": "57.7574065", "lon": "12.0374426"}, "Kortedala Torg": {"lat": "57.752779", "lon": "12.0330403"}, "Runstavsgatan": {"lat": "57.7479034", "lon": "12.0303082"}, "Nym\u00e5negatan": {"lat": "57.7427511", "lon": "12.0298737"}, "Bev\u00e4ringsgatan": {"lat": "57.7399617", "lon": "12.0286261"}, "Kviberg": {"lat": "57.7367053", "lon": "12.0265257"}, "Bellevue": {"lat": "57.7325237", "lon": "12.0246107"}, "SKF": {"lat": "57.7291018", "lon": "12.0132691"}, "Ejdergatan": {"lat": "57.7210222", "lon": "12.005952"}, "Chalmers": {"lat": "57.6900225", "lon": "11.9730927"}, "Wavrinskys Plats": {"lat": "57.6888028", "lon": "11.9684664"}, "Medicinaregatan": {"lat": "57.6855827", "lon": "11.9619508"}, "Sahlgrenska Huvudentr\u00e9": {"lat": "57.6836795", "lon": "11.9614653"}, "Nordstan": {"lat": "57.7086397", "lon": "11.969087498371342"}, "Komettorget": {"lat": "57.7511423", "lon": "12.0713114"}, "Rymdtorget Sp\u00e5rvagn": {"lat": "57.7558013", "lon": "12.0669195"}, "Teleskopgatan": {"lat": "57.7593", "lon": "12.0597894"}, "Galileis Gata": {"lat": "57.7605336", "lon": "12.051446"}, "Januarigatan": {"lat": "57.7602447", "lon": "12.0412135"}, "Kapellplatsen": {"lat": "57.6927713", "lon": "11.9735773"}, "Sannaplan": {"lat": "57.6842394", "lon": "11.9166553"}, "Sandarna": {"lat": "57.6827594", "lon": "11.9095056"}, "Kungssten": {"lat": "57.6805281", "lon": "11.9018248"}, "Doktor Sydows Gata": {"lat": "57.6793184", "lon": "11.9776909"}, "Doktor Fries Torg": {"lat": "57.6844804", "lon": "11.9726716"}, "Saltholmen": {"lat": "57.6606312", "lon": "11.8455002"}, "Roddf\u00f6reningen": {"lat": "57.6640011", "lon": "11.8516451"}, "L\u00e5ngedrag": {"lat": "57.6682375", "lon": "11.8535394"}, "Hinsholmen": {"lat": "57.6676904", "lon": "11.8610197"}, "K\u00e4ringberget": {"lat": "57.6692358", "lon": "11.8710883"}, "Tranered": {"lat": "57.6723198", "lon": "11.8793541"}, "Hagen": {"lat": "57.6748357", "lon": "11.8841485"}, "Nya Varvsall\u00e9n": {"lat": "57.6780065", "lon": "11.8950555"}, "Ekedal": {"lat": "57.6871315", "lon": "11.9290998"}, "Majvallen": {"lat": "57.6909343", "lon": "11.9354935"}, "Fj\u00e4llgatan": {"lat": "57.69443", "lon": "11.9362336"}}, "lines": {"1": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "H\u00e4rlanda", "Stockholmsgatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Prinsgatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan", "Opaltorget"], "2": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen", "Brunnsparken", "Domkyrkan", "Gr\u00f6nsakstorget", "Vasaplatsen", "Vasa Viktoriagatan", "Handelsh\u00f6gskolan", "Brunnsgatan", "Seminariegatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg"], "3": ["Marklandsgatan", "Bokekullsgatan", "H\u00f6gsbogatan", "Klintens V\u00e4g", "Godhemsgatan", "Mariaplan", "Ostindiegatan", "Vagnhallen Majorna", "Jaegerdorffsplatsen", "Chapmans Torg", "Kaptensgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Vasa Viktoriagatan", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Ullevi Norra", "Svingeln", "Olskrokstorget", "Redbergsplatsen", "Stockholmsgatan", "H\u00e4rlanda", "Solrosgatan", "Sanatoriegatan", "Virginsgatan"], "4": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "Hj\u00e4llbo", "Hammarkullen", "Stor\u00e5s", "Angered Centrum"], "5": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "Solrosgatan", "Sanatoriegatan", "Virginsgatan", "Welandergatan", "T\u00f6pelsgatan", "B\u00f6gatan", "Ekmanska", "B\u00e4ckeliden", "Sankt Sigfrids Plan", "Liseberg Station", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan", "Varmfrontsgatan"], "6": ["Aprilgatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Linn\u00e9platsen", "Olivedalsgatan", "Prinsgatan", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Nordstan", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan", "Varmfrontsgatan"], "7": ["Komettorget", "Rymdtorget Sp\u00e5rvagn", "Teleskopgatan", "Galileis Gata", "Januarigatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Kungsportsplatsen", "Valand", "Vasaplatsen", "Kapellplatsen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan", "Opaltorget"], "8": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn"], "9": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Masthuggstorget", "Stigbergstorget", "Kaptensgatan", "Chapmans Torg", "Jaegerdorffsplatsen", "Vagnhallen Majorna", "Ostindiegatan", "Sannaplan", "Sandarna", "Kungssten"], "10": ["Doktor Sydows Gata", "Doktor Fries Torg", "Wavrinskys Plats", "Chalmers", "Kapellplatsen", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan"], "11": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Godhemsgatan", "Ekedal", "Majvallen", "Fj\u00e4llgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "SKF", "Bellevue", "Kviberg", "Bev\u00e4ringsgatan", "Nym\u00e5negatan", "Runstavsgatan", "Kortedala Torg", "Allhelgonakyrkan", "Januarigatan", "Galileis Gata", "Teleskopgatan", "Rymdtorget Sp\u00e5rvagn", "Komettorget"], "13": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Marklandsgatan", "Botaniska Tr\u00e4dg\u00e5rden", "Sahlgrenska Huvudentr\u00e9", "Medicinaregatan", "Wavrinskys Plats", "Chalmers", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen"]}, "times": {"\u00d6stra Sjukhuset": {"Tingvallsv\u00e4gen": 1}, "Tingvallsv\u00e4gen": {"Kaggeledstorget": 2}, "Kaggeledstorget": {"\u00c4tteh\u00f6gsgatan": 0}, "\u00c4tteh\u00f6gsgatan": {"Munkeb\u00e4ckstorget": 1}, "Munkeb\u00e4ckstorget": {"H\u00e4rlanda": 2, "Solrosgatan": 1}, "H\u00e4rlanda": {"Stockholmsgatan": 1, "Solrosgatan": 2}, "Stockholmsgatan": {"Redbergsplatsen": 2}, "Redbergsplatsen": {"Olskrokstorget": 1}, "Olskrokstorget": {"Svingeln": 2}, "Svingeln": {"Ullevi Norra": 2}, "Ullevi Norra": {"Centralstationen": 1, "Ullevi S\u00f6dra": 2}, "Centralstationen": {"Brunnsparken": 1, "Gamlestads Torg": 6, "Lilla Bommen": 1}, "Brunnsparken": {"Stenpiren": 1, "Domkyrkan": 1, "Lilla Bommen": 0, "Nordstan": 1}, "Stenpiren": {"J\u00e4rntorget": 2}, "J\u00e4rntorget": {"Prinsgatan": 1, "Hagakyrkan": 3}, "Prinsgatan": {"Olivedalsgatan": 2}, "Olivedalsgatan": {"Linn\u00e9platsen": 1}, "Linn\u00e9platsen": {"Botaniska Tr\u00e4dg\u00e5rden": 2}, "Botaniska Tr\u00e4dg\u00e5rden": {"Marklandsgatan": 3}, "Marklandsgatan": {"Axel Dahlstr\u00f6ms Torg": 1, "Bokekullsgatan": 1}, "Axel Dahlstr\u00f6ms Torg": {"Lantmilsgatan": 1}, "Lantmilsgatan": {"Nymilsgatan": 1}, "Nymilsgatan": {"Musikv\u00e4gen": 1}, "Musikv\u00e4gen": {"Positivgatan": 2}, "Positivgatan": {"Fr\u00f6lunda Torg Sp\u00e5rvagn": 1}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"Briljantgatan": 2}, "Briljantgatan": {"Smaragdgatan": 1}, "Smaragdgatan": {"Opaltorget": 0}, "Opaltorget": {}, "M\u00f6lndals Innerstad": {"M\u00f6lndals sjukhus": 1}, "M\u00f6lndals sjukhus": {"Lackareb\u00e4ck": 2}, "Lackareb\u00e4ck": {"Kroksl\u00e4tts Fabriker": 1}, "Kroksl\u00e4tts Fabriker": {"Kroksl\u00e4tts torg": 1}, "Kroksl\u00e4tts torg": {"Lana": 1}, "Lana": {"Varbergsgatan": 1}, "Varbergsgatan": {"Elisedal": 1}, "Elisedal": {"Almedal": 1}, "Almedal": {"Liseberg S\u00f6dra": 2}, "Liseberg S\u00f6dra": {"Korsv\u00e4gen": 2}, "Korsv\u00e4gen": {"Scandinavium": 1, "Berzeliigatan": 1, "Chalmers": 3}, "Scandinavium": {"Ullevi S\u00f6dra": 2}, "Ullevi S\u00f6dra": {"Centralstationen": 3}, "Domkyrkan": {"Gr\u00f6nsakstorget": 1}, "Gr\u00f6nsakstorget": {"Vasaplatsen": 2}, "Vasaplatsen": {"Vasa Viktoriagatan": 1, "Valand": 1, "Kapellplatsen": 2}, "Vasa Viktoriagatan": {"Handelsh\u00f6gskolan": 1}, "Handelsh\u00f6gskolan": {"Brunnsgatan": 2}, "Brunnsgatan": {"Seminariegatan": 1}, "Seminariegatan": {"Olivedalsgatan": 1}, "Bokekullsgatan": {"H\u00f6gsbogatan": 1}, "H\u00f6gsbogatan": {"Klintens V\u00e4g": 2}, "Klintens V\u00e4g": {"Godhemsgatan": 1}, "Godhemsgatan": {"Mariaplan": 2, "Ekedal": 1}, "Mariaplan": {"Ostindiegatan": 1, "Marklandsgatan": 4}, "Ostindiegatan": {"Vagnhallen Majorna": 2, "Sannaplan": 1}, "Vagnhallen Majorna": {"Jaegerdorffsplatsen": 1}, "Jaegerdorffsplatsen": {"Chapmans Torg": 1}, "Chapmans Torg": {"Kaptensgatan": 2}, "Kaptensgatan": {"Stigbergstorget": 2}, "Stigbergstorget": {"Masthuggstorget": 2}, "Masthuggstorget": {"J\u00e4rntorget": 2}, "Hagakyrkan": {"Vasa Viktoriagatan": 1, "Gr\u00f6nsakstorget": 2}, "Valand": {"Kungsportsplatsen": 2}, "Kungsportsplatsen": {"Brunnsparken": 1}, "Solrosgatan": {"Sanatoriegatan": 1}, "Sanatoriegatan": {"Virginsgatan": 0}, "Virginsgatan": {"Welandergatan": 2}, "Berzeliigatan": {"Valand": 2}, "Gamlestads Torg": {"Hj\u00e4llbo": 1, "Ejdergatan": 2}, "Hj\u00e4llbo": {"Hammarkullen": 3}, "Hammarkullen": {"Stor\u00e5s": 1}, "Stor\u00e5s": {"Angered Centrum": 3}, "Angered Centrum": {}, "Welandergatan": {"T\u00f6pelsgatan": 1}, "T\u00f6pelsgatan": {"B\u00f6gatan": 1}, "B\u00f6gatan": {"Ekmanska": 1}, "Ekmanska": {"B\u00e4ckeliden": 1}, "B\u00e4ckeliden": {"Sankt Sigfrids Plan": 1}, "Sankt Sigfrids Plan": {"Liseberg Station": 1}, "Liseberg Station": {"Korsv\u00e4gen": 2}, "Lilla Bommen": {"Frihamnen": 4}, "Frihamnen": {"Hjalmar Brantingsplatsen": 1}, "Hjalmar Brantingsplatsen": {"V\u00e5gm\u00e4stareplatsen": 1}, "V\u00e5gm\u00e4stareplatsen": {"Wieselgrensplatsen": 1}, "Wieselgrensplatsen": {"Rambergsvallen": 1}, "Rambergsvallen": {"Gropeg\u00e5rdsgatan": 2}, "Gropeg\u00e5rdsgatan": {"Eketr\u00e4gatan": 1}, "Eketr\u00e4gatan": {"S\u00e4l\u00f6fjordsgatan": 2}, "S\u00e4l\u00f6fjordsgatan": {"V\u00e5rv\u00e4derstorget": 1}, "V\u00e5rv\u00e4derstorget": {"Mildv\u00e4dersgatan": 1}, "Mildv\u00e4dersgatan": {"\u00d6nskev\u00e4dersgatan": 1}, "\u00d6nskev\u00e4dersgatan": {"Friskv\u00e4derstorget": 1}, "Friskv\u00e4derstorget": {"V\u00e4derilsgatan": 1}, "V\u00e4derilsgatan": {"Temperaturgatan": 2}, "Temperaturgatan": {"Varmfrontsgatan": 0}, "Varmfrontsgatan": {}, "Aprilgatan": {"Allhelgonakyrkan": 1}, "Allhelgonakyrkan": {"Kortedala Torg": 1}, "Kortedala Torg": {"Runstavsgatan": 2}, "Runstavsgatan": {"Nym\u00e5negatan": 1}, "Nym\u00e5negatan": {"Bev\u00e4ringsgatan": 1}, "Bev\u00e4ringsgatan": {"Kviberg": 1}, "Kviberg": {"Bellevue": 1}, "Bellevue": {"SKF": 2}, "SKF": {"Gamlestads Torg": 1}, "Ejdergatan": {"Redbergsplatsen": 2}, "Chalmers": {"Wavrinskys Plats": 1}, "Wavrinskys Plats": {"Medicinaregatan": 2}, "Medicinaregatan": {"Sahlgrenska Huvudentr\u00e9": 2}, "Sahlgrenska Huvudentr\u00e9": {"Linn\u00e9platsen": 1, "Botaniska Tr\u00e4dg\u00e5rden": 3}, "Nordstan": {"Frihamnen": 1}, "Komettorget": {"Rymdtorget Sp\u00e5rvagn": 2}, "Rymdtorget Sp\u00e5rvagn": {"Teleskopgatan": 1}, "Teleskopgatan": {"Galileis Gata": 1}, "Galileis Gata": {"Januarigatan": 1}, "Januarigatan": {"Allhelgonakyrkan": 1}, "Kapellplatsen": {"Chalmers": 1}, "Sannaplan": {"Sandarna": 1, "Mariaplan": 1}, "Sandarna": {"Kungssten": 2}, "Kungssten": {}, "Doktor Sydows Gata": {"Doktor Fries Torg": 1}, "Doktor Fries Torg": {"Wavrinskys Plats": 2}, "Saltholmen": {"Roddf\u00f6reningen": 1}, "Roddf\u00f6reningen": {"L\u00e5ngedrag": 1}, "L\u00e5ngedrag": {"Hinsholmen": 1}, "Hinsholmen": {"K\u00e4ringberget": 2}, "K\u00e4ringberget": {"Tranered": 1}, "Tranered": {"Hagen": 1}, "Hagen": {"Nya Varvsall\u00e9n": 2}, "Nya Varvsall\u00e9n": {"Kungssten": 1}, "Ekedal": {"Majvallen": 1}, "Majvallen": {"Fj\u00e4llgatan": 1}, "Fj\u00e4llgatan": {"Stigbergstorget": 2}}} \ No newline at end of file diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index f0b96d8..ea03367 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -6,10 +6,29 @@ class TestTramData(unittest.TestCase): def setUp(self): + + with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: + lines = file.read().replace(":","").strip().split("\n\n") + lines = [line.split("\n") for line in lines] + test1 = [] + test2 =[] + for line in lines: + stoplist = [] + test2.append(line[0]) + for i in range(1, len(line)): + item1, item2= [item.strip() for item in line[i].split(" ") if item] + stoplist.append((item1)) + test1.append(stoplist) + self.stoplist = test1 + self.linelist = test2 + with open(TRAM_FILE) as trams: tramdict = json.loads(trams.read()) self.stopdict = tramdict['stops'] self.linedict = tramdict['lines'] + self.timedict = tramdict['times'] + + def test_stops_exist(self): stopset = {stop for line in self.linedict for stop in self.linedict[line]} @@ -17,14 +36,27 @@ def test_stops_exist(self): self.assertIn(stop, self.stopdict, msg = stop + ' not in stopdict') def test_all_stops_included(self): - pass + "Testar ifall alla spårvagnslinjer finns med" + for i in range(len(self.linelist)): + if self.linelist[i] not in self.linedict: + print(f"{self.linelist[i]} not in tramdict") + def test_stops_in_line(self): - pass + "Testar ifall alla hållplatser finns i linjerna" + x = 0 + for i in range(len(self.stoplist)): + if self.stoplist[i] != self.linedict[self.linelist[i]]: + print(f"Stops in line {self.linelist[i]} not ok") + else: + x += 1 + print(f"{x} out of {len(self.stoplist)} tests passed") + def test_distance_feasible(self): pass def test_times_beetween_stops(self): pass + diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b83639b..cdbaa6b 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -40,27 +40,73 @@ def build_tram_lines(lines): timedict[next_name] = {} if name not in timedict[next_name]: timedict[name][next_name] = time_diff + values.append(next_name) linedict[key] = values return (linedict, timedict) - - def build_tram_network(stopfile, linefile): outdict = {"stops": build_tram_stops(stopfile), "lines": build_tram_lines(linefile)[0], "times": build_tram_lines(linefile)[1]} + with open("labs/data/tramnetwork.json", "w") as file: json.dump(outdict, file) def lines_via_stop(linedict, stop): - pass + + stoplist = [] + + for key in linedict: + if stop in linedict[key]: + stoplist.append(key) + + return stoplist + +#print(lines_via_stop(build_tram_lines(lines)[0], "Valand")) def lines_between_stops(linedict, stop1, stop2): - pass + stoplist = [] + + for key in linedict: + if stop1 in linedict[key] and stop2 in linedict[key]: + stoplist.append(key) + + return stoplist +#print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): - pass + + + if linedict[str(line)].index(stop1) < linedict[str(line)].index(stop2): + index_1 = linedict[str(line)].index(stop1) + index_2 = linedict[str(line)].index(stop2) + 1 + else: + index_1 = linedict[str(line)].index(stop2) + index_2 = linedict[str(line)].index(stop1) + 1 + + stoplist = linedict[str(line)][index_1:index_2] + + time = 0 + for i in range(len(stoplist) - 1): + if stoplist[i+1] in timedict[stoplist[i]]: + time += timedict[stoplist[i]][stoplist[i+1]] + + elif stoplist[i] in timedict[stoplist[i+1]]: + time += timedict[stoplist[i+1]][stoplist[i]] + print(time) + + return str(time) + + + + + + + + +time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 7, "Komettorget", "Komettorget") + def distance_between_stops(stopdict, stop1, stop2): pass diff --git a/testfile.py b/testfile.py new file mode 100644 index 0000000..44d0511 --- /dev/null +++ b/testfile.py @@ -0,0 +1,25 @@ +import json +from pprint import pprint + + + +with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: + lines = file.read().replace(":","").strip().split("\n\n") + lines = [line.split("\n") for line in lines] +print(lines) +test1 = [] +test2 =[] +for line in lines: + stoplist = [] + test2.append(line[0]) + for i in range(1, len(line)): + item1, item2= [item.strip() for item in line[i].split(" ") if item] + stoplist.append((item1)) + test1.append(stoplist) + + + + + +print(test1) +print(test2) \ No newline at end of file From da01f4a5dc4d56b8e4851ff2df641fe038d96dd3 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Tue, 19 Nov 2024 17:11:36 +0100 Subject: [PATCH 40/54] =?UTF-8?q?alla=20funktioner=20f=C3=B6rutom=20dialog?= =?UTF-8?q?ue=20fixade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labs/lab1/tramdata.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index cdbaa6b..7bf47f3 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,5 +1,6 @@ import json from pprint import pprint +from haversine import haversine TRAM_STOP_FILE = 'labs/data/tramstops.json' @@ -94,22 +95,20 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): elif stoplist[i] in timedict[stoplist[i+1]]: time += timedict[stoplist[i+1]][stoplist[i]] - print(time) return str(time) - - - - - -time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 7, "Komettorget", "Komettorget") +#time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 11, "Centralstationen", "Majvallen") +def distance_between_stops(stopdict, stop1, stop2): + location_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) + location_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) + + return haversine(location_1, location_2) +#print(distance_between_stops(build_tram_stops(data), "Centralstationen", "Ullevi Norra")) -def distance_between_stops(stopdict, stop1, stop2): - pass def dialogue(tramfile): pass \ No newline at end of file From 6650c490aa41d9c0bc3b228e588092fddf2f5e15 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 19 Nov 2024 21:02:04 +0100 Subject: [PATCH 41/54] random changes --- labs/data/tramnetwork.json | 2 +- labs/lab1/test_tramdata.py | 45 ++++++++++++++++++++++++++++++++++---- labs/lab1/tramdata.py | 12 ++++++++-- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/labs/data/tramnetwork.json b/labs/data/tramnetwork.json index 23c192a..b18b386 100644 --- a/labs/data/tramnetwork.json +++ b/labs/data/tramnetwork.json @@ -1 +1 @@ -{"stops": {"\u00d6stra Sjukhuset": {"lat": "57.7224618", "lon": "12.0478166"}, "Tingvallsv\u00e4gen": {"lat": "57.7246437", "lon": "12.0420754"}, "Kaggeledstorget": {"lat": "57.7229358", "lon": "12.0332892"}, "\u00c4tteh\u00f6gsgatan": {"lat": "57.7200477", "lon": "12.0285376"}, "Munkeb\u00e4ckstorget": {"lat": "57.7185656", "lon": "12.0263524"}, "H\u00e4rlanda": {"lat": "57.7181065", "lon": "12.0194426"}, "Stockholmsgatan": {"lat": "57.7170564", "lon": "12.0136038"}, "Redbergsplatsen": {"lat": "57.716275", "lon": "12.004907"}, "Olskrokstorget": {"lat": "57.7146209", "lon": "11.9987871"}, "Svingeln": {"lat": "57.713358", "lon": "11.9917409"}, "Ullevi Norra": {"lat": "57.7081152", "lon": "11.9861639"}, "Centralstationen": {"lat": "57.7077849", "lon": "11.9734427"}, "Brunnsparken": {"lat": "57.7065955", "lon": "11.9689358"}, "Stenpiren": {"lat": "57.7056512", "lon": "11.9574172"}, "J\u00e4rntorget": {"lat": "57.6999652", "lon": "11.952972"}, "Prinsgatan": {"lat": "57.6964754", "lon": "11.9513521"}, "Olivedalsgatan": {"lat": "57.6918865", "lon": "11.9536831"}, "Linn\u00e9platsen": {"lat": "57.689966", "lon": "11.9520518"}, "Botaniska Tr\u00e4dg\u00e5rden": {"lat": "57.6812619", "lon": "11.9455821"}, "Marklandsgatan": {"lat": "57.673267", "lon": "11.9353621"}, "Axel Dahlstr\u00f6ms Torg": {"lat": "57.672288", "lon": "11.9275696"}, "Lantmilsgatan": {"lat": "57.6668601", "lon": "11.924836"}, "Nymilsgatan": {"lat": "57.6624705", "lon": "11.9250789"}, "Musikv\u00e4gen": {"lat": "57.6590769", "lon": "11.9206117"}, "Positivgatan": {"lat": "57.6566374", "lon": "11.9175191"}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"lat": "57.6527643", "lon": "11.9116376"}, "Briljantgatan": {"lat": "57.6486393", "lon": "11.9035069"}, "Smaragdgatan": {"lat": "57.6454509", "lon": "11.8993694"}, "Opaltorget": {"lat": "57.6423342", "lon": "11.9010554"}, "M\u00f6lndals Innerstad": {"lat": "57.655591400000006", "lon": "12.01855524009189"}, "M\u00f6lndals sjukhus": {"lat": "57.6614548", "lon": "12.0136632"}, "Lackareb\u00e4ck": {"lat": "57.6663479", "lon": "12.0114421"}, "Kroksl\u00e4tts Fabriker": {"lat": "57.6717887", "lon": "12.0100249"}, "Kroksl\u00e4tts torg": {"lat": "57.6753924", "lon": "12.0078652"}, "Lana": {"lat": "57.678333", "lon": "12.0041666"}, "Varbergsgatan": {"lat": "57.6795297", "lon": "12.003115"}, "Elisedal": {"lat": "57.6834394", "lon": "12.0004416"}, "Almedal": {"lat": "57.6867844", "lon": "11.9974967"}, "Liseberg S\u00f6dra": {"lat": "57.6945173", "lon": "11.993695420809985"}, "Korsv\u00e4gen": {"lat": "57.6968295", "lon": "11.9868341"}, "Scandinavium": {"lat": "57.7006276", "lon": "11.9858582"}, "Ullevi S\u00f6dra": {"lat": "57.7039541", "lon": "11.9850022"}, "Domkyrkan": {"lat": "57.7042356", "lon": "11.9636653"}, "Gr\u00f6nsakstorget": {"lat": "57.7025866", "lon": "11.9639739"}, "Vasaplatsen": {"lat": "57.6989398", "lon": "11.9705111"}, "Vasa Viktoriagatan": {"lat": "57.6985634", "lon": "11.9653312"}, "Handelsh\u00f6gskolan": {"lat": "57.6965303", "lon": "11.9625825"}, "Brunnsgatan": {"lat": "57.6936796", "lon": "11.9591759"}, "Seminariegatan": {"lat": "57.6920557", "lon": "11.9571828"}, "Bokekullsgatan": {"lat": "57.6771253", "lon": "11.9327977"}, "H\u00f6gsbogatan": {"lat": "57.6803596", "lon": "11.9301317"}, "Klintens V\u00e4g": {"lat": "57.6824461", "lon": "11.9279843"}, "Godhemsgatan": {"lat": "57.6854379", "lon": "11.9264658"}, "Mariaplan": {"lat": "57.686497", "lon": "11.9202959"}, "Ostindiegatan": {"lat": "57.6876154", "lon": "11.9156284"}, "Vagnhallen Majorna": {"lat": "57.6891689", "lon": "11.9123386"}, "Jaegerdorffsplatsen": {"lat": "57.6914334", "lon": "11.9150447"}, "Chapmans Torg": {"lat": "57.6944764", "lon": "11.9198652"}, "Kaptensgatan": {"lat": "57.6971583", "lon": "11.9276101"}, "Stigbergstorget": {"lat": "57.6990303", "lon": "11.9338896"}, "Masthuggstorget": {"lat": "57.6995343", "lon": "11.9447351"}, "Hagakyrkan": {"lat": "57.6996013", "lon": "11.9615964"}, "Valand": {"lat": "57.7004651", "lon": "11.9748851"}, "Kungsportsplatsen": {"lat": "57.7039668", "lon": "11.9697972"}, "Solrosgatan": {"lat": "57.7162733", "lon": "12.0250195"}, "Sanatoriegatan": {"lat": "57.7132161", "lon": "12.0240768"}, "Virginsgatan": {"lat": "57.7107812", "lon": "12.0235382"}, "Berzeliigatan": {"lat": "57.6983047", "lon": "11.9823431"}, "Gamlestads Torg": {"lat": "57.7279636", "lon": "12.0046485"}, "Hj\u00e4llbo": {"lat": "57.7692649", "lon": "12.0223749"}, "Hammarkullen": {"lat": "57.7800406", "lon": "12.0366009"}, "Stor\u00e5s": {"lat": "57.785139", "lon": "12.0462261"}, "Angered Centrum": {"lat": "57.7960687", "lon": "12.0495277"}, "Welandergatan": {"lat": "57.7060778", "lon": "12.0239345"}, "T\u00f6pelsgatan": {"lat": "57.7023397", "lon": "12.0221389"}, "B\u00f6gatan": {"lat": "57.700946", "lon": "12.0160087"}, "Ekmanska": {"lat": "57.6996668", "lon": "12.0096351"}, "B\u00e4ckeliden": {"lat": "57.6999206", "lon": "12.0033203"}, "Sankt Sigfrids Plan": {"lat": "57.6987301", "lon": "11.9994709"}, "Liseberg Station": {"lat": "57.6975588", "lon": "11.9942205"}, "Lilla Bommen": {"lat": "57.7092219", "lon": "11.9667699"}, "Frihamnen": {"lat": "57.7203255", "lon": "11.9600773"}, "Hjalmar Brantingsplatsen": {"lat": "57.7206077", "lon": "11.9522789"}, "V\u00e5gm\u00e4stareplatsen": {"lat": "57.720537", "lon": "11.9451746"}, "Wieselgrensplatsen": {"lat": "57.7205998", "lon": "11.9355948"}, "Rambergsvallen": {"lat": "57.719347", "lon": "11.9268104"}, "Gropeg\u00e5rdsgatan": {"lat": "57.7183037", "lon": "11.9191595"}, "Eketr\u00e4gatan": {"lat": "57.7164903", "lon": "11.9099118"}, "S\u00e4l\u00f6fjordsgatan": {"lat": "57.7136356", "lon": "11.9029025"}, "V\u00e5rv\u00e4derstorget": {"lat": "57.7129196", "lon": "11.8931411"}, "Mildv\u00e4dersgatan": {"lat": "57.7156823", "lon": "11.890926"}, "\u00d6nskev\u00e4dersgatan": {"lat": "57.7201505", "lon": "11.8930502"}, "Friskv\u00e4derstorget": {"lat": "57.7235673", "lon": "11.8931956"}, "V\u00e4derilsgatan": {"lat": "57.7265488", "lon": "11.8933485"}, "Temperaturgatan": {"lat": "57.732569", "lon": "11.8952913"}, "Varmfrontsgatan": {"lat": "57.7368776", "lon": "11.8966497"}, "Aprilgatan": {"lat": "57.7608913", "lon": "12.0409994"}, "Allhelgonakyrkan": {"lat": "57.7574065", "lon": "12.0374426"}, "Kortedala Torg": {"lat": "57.752779", "lon": "12.0330403"}, "Runstavsgatan": {"lat": "57.7479034", "lon": "12.0303082"}, "Nym\u00e5negatan": {"lat": "57.7427511", "lon": "12.0298737"}, "Bev\u00e4ringsgatan": {"lat": "57.7399617", "lon": "12.0286261"}, "Kviberg": {"lat": "57.7367053", "lon": "12.0265257"}, "Bellevue": {"lat": "57.7325237", "lon": "12.0246107"}, "SKF": {"lat": "57.7291018", "lon": "12.0132691"}, "Ejdergatan": {"lat": "57.7210222", "lon": "12.005952"}, "Chalmers": {"lat": "57.6900225", "lon": "11.9730927"}, "Wavrinskys Plats": {"lat": "57.6888028", "lon": "11.9684664"}, "Medicinaregatan": {"lat": "57.6855827", "lon": "11.9619508"}, "Sahlgrenska Huvudentr\u00e9": {"lat": "57.6836795", "lon": "11.9614653"}, "Nordstan": {"lat": "57.7086397", "lon": "11.969087498371342"}, "Komettorget": {"lat": "57.7511423", "lon": "12.0713114"}, "Rymdtorget Sp\u00e5rvagn": {"lat": "57.7558013", "lon": "12.0669195"}, "Teleskopgatan": {"lat": "57.7593", "lon": "12.0597894"}, "Galileis Gata": {"lat": "57.7605336", "lon": "12.051446"}, "Januarigatan": {"lat": "57.7602447", "lon": "12.0412135"}, "Kapellplatsen": {"lat": "57.6927713", "lon": "11.9735773"}, "Sannaplan": {"lat": "57.6842394", "lon": "11.9166553"}, "Sandarna": {"lat": "57.6827594", "lon": "11.9095056"}, "Kungssten": {"lat": "57.6805281", "lon": "11.9018248"}, "Doktor Sydows Gata": {"lat": "57.6793184", "lon": "11.9776909"}, "Doktor Fries Torg": {"lat": "57.6844804", "lon": "11.9726716"}, "Saltholmen": {"lat": "57.6606312", "lon": "11.8455002"}, "Roddf\u00f6reningen": {"lat": "57.6640011", "lon": "11.8516451"}, "L\u00e5ngedrag": {"lat": "57.6682375", "lon": "11.8535394"}, "Hinsholmen": {"lat": "57.6676904", "lon": "11.8610197"}, "K\u00e4ringberget": {"lat": "57.6692358", "lon": "11.8710883"}, "Tranered": {"lat": "57.6723198", "lon": "11.8793541"}, "Hagen": {"lat": "57.6748357", "lon": "11.8841485"}, "Nya Varvsall\u00e9n": {"lat": "57.6780065", "lon": "11.8950555"}, "Ekedal": {"lat": "57.6871315", "lon": "11.9290998"}, "Majvallen": {"lat": "57.6909343", "lon": "11.9354935"}, "Fj\u00e4llgatan": {"lat": "57.69443", "lon": "11.9362336"}}, "lines": {"1": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "H\u00e4rlanda", "Stockholmsgatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Prinsgatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "2": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen", "Brunnsparken", "Domkyrkan", "Gr\u00f6nsakstorget", "Vasaplatsen", "Vasa Viktoriagatan", "Handelsh\u00f6gskolan", "Brunnsgatan", "Seminariegatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan"], "3": ["Marklandsgatan", "Bokekullsgatan", "H\u00f6gsbogatan", "Klintens V\u00e4g", "Godhemsgatan", "Mariaplan", "Ostindiegatan", "Vagnhallen Majorna", "Jaegerdorffsplatsen", "Chapmans Torg", "Kaptensgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Vasa Viktoriagatan", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Ullevi Norra", "Svingeln", "Olskrokstorget", "Redbergsplatsen", "Stockholmsgatan", "H\u00e4rlanda", "Solrosgatan", "Sanatoriegatan"], "4": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "Hj\u00e4llbo", "Hammarkullen", "Stor\u00e5s"], "5": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "Solrosgatan", "Sanatoriegatan", "Virginsgatan", "Welandergatan", "T\u00f6pelsgatan", "B\u00f6gatan", "Ekmanska", "B\u00e4ckeliden", "Sankt Sigfrids Plan", "Liseberg Station", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "6": ["Aprilgatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Linn\u00e9platsen", "Olivedalsgatan", "Prinsgatan", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Nordstan", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan"], "7": ["Komettorget", "Rymdtorget Sp\u00e5rvagn", "Teleskopgatan", "Galileis Gata", "Januarigatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Kungsportsplatsen", "Valand", "Vasaplatsen", "Kapellplatsen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan"], "8": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan"], "9": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Masthuggstorget", "Stigbergstorget", "Kaptensgatan", "Chapmans Torg", "Jaegerdorffsplatsen", "Vagnhallen Majorna", "Ostindiegatan", "Sannaplan", "Sandarna"], "10": ["Doktor Sydows Gata", "Doktor Fries Torg", "Wavrinskys Plats", "Chalmers", "Kapellplatsen", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget"], "11": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Godhemsgatan", "Ekedal", "Majvallen", "Fj\u00e4llgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "SKF", "Bellevue", "Kviberg", "Bev\u00e4ringsgatan", "Nym\u00e5negatan", "Runstavsgatan", "Kortedala Torg", "Allhelgonakyrkan", "Januarigatan", "Galileis Gata", "Teleskopgatan", "Rymdtorget Sp\u00e5rvagn"], "13": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Marklandsgatan", "Botaniska Tr\u00e4dg\u00e5rden", "Sahlgrenska Huvudentr\u00e9", "Medicinaregatan", "Wavrinskys Plats", "Chalmers", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra"]}, "times": {"\u00d6stra Sjukhuset": {"Tingvallsv\u00e4gen": 1}, "Tingvallsv\u00e4gen": {"Kaggeledstorget": 2}, "Kaggeledstorget": {"\u00c4tteh\u00f6gsgatan": 0}, "\u00c4tteh\u00f6gsgatan": {"Munkeb\u00e4ckstorget": 1}, "Munkeb\u00e4ckstorget": {"H\u00e4rlanda": 2, "Solrosgatan": 1}, "H\u00e4rlanda": {"Stockholmsgatan": 1, "Solrosgatan": 2}, "Stockholmsgatan": {"Redbergsplatsen": 2}, "Redbergsplatsen": {"Olskrokstorget": 1}, "Olskrokstorget": {"Svingeln": 2}, "Svingeln": {"Ullevi Norra": 2}, "Ullevi Norra": {"Centralstationen": 1, "Ullevi S\u00f6dra": 2}, "Centralstationen": {"Brunnsparken": 1, "Gamlestads Torg": 6, "Lilla Bommen": 1}, "Brunnsparken": {"Stenpiren": 1, "Domkyrkan": 1, "Lilla Bommen": 0, "Nordstan": 1}, "Stenpiren": {"J\u00e4rntorget": 2}, "J\u00e4rntorget": {"Prinsgatan": 1, "Hagakyrkan": 3}, "Prinsgatan": {"Olivedalsgatan": 2}, "Olivedalsgatan": {"Linn\u00e9platsen": 1}, "Linn\u00e9platsen": {"Botaniska Tr\u00e4dg\u00e5rden": 2}, "Botaniska Tr\u00e4dg\u00e5rden": {"Marklandsgatan": 3}, "Marklandsgatan": {"Axel Dahlstr\u00f6ms Torg": 1, "Bokekullsgatan": 1}, "Axel Dahlstr\u00f6ms Torg": {"Lantmilsgatan": 1}, "Lantmilsgatan": {"Nymilsgatan": 1}, "Nymilsgatan": {"Musikv\u00e4gen": 1}, "Musikv\u00e4gen": {"Positivgatan": 2}, "Positivgatan": {"Fr\u00f6lunda Torg Sp\u00e5rvagn": 1}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"Briljantgatan": 2}, "Briljantgatan": {"Smaragdgatan": 1}, "Smaragdgatan": {"Opaltorget": 0}, "Opaltorget": {}, "M\u00f6lndals Innerstad": {"M\u00f6lndals sjukhus": 1}, "M\u00f6lndals sjukhus": {"Lackareb\u00e4ck": 2}, "Lackareb\u00e4ck": {"Kroksl\u00e4tts Fabriker": 1}, "Kroksl\u00e4tts Fabriker": {"Kroksl\u00e4tts torg": 1}, "Kroksl\u00e4tts torg": {"Lana": 1}, "Lana": {"Varbergsgatan": 1}, "Varbergsgatan": {"Elisedal": 1}, "Elisedal": {"Almedal": 1}, "Almedal": {"Liseberg S\u00f6dra": 2}, "Liseberg S\u00f6dra": {"Korsv\u00e4gen": 2}, "Korsv\u00e4gen": {"Scandinavium": 1, "Berzeliigatan": 1, "Chalmers": 3}, "Scandinavium": {"Ullevi S\u00f6dra": 2}, "Ullevi S\u00f6dra": {"Centralstationen": 3}, "Domkyrkan": {"Gr\u00f6nsakstorget": 1}, "Gr\u00f6nsakstorget": {"Vasaplatsen": 2}, "Vasaplatsen": {"Vasa Viktoriagatan": 1, "Valand": 1, "Kapellplatsen": 2}, "Vasa Viktoriagatan": {"Handelsh\u00f6gskolan": 1}, "Handelsh\u00f6gskolan": {"Brunnsgatan": 2}, "Brunnsgatan": {"Seminariegatan": 1}, "Seminariegatan": {"Olivedalsgatan": 1}, "Bokekullsgatan": {"H\u00f6gsbogatan": 1}, "H\u00f6gsbogatan": {"Klintens V\u00e4g": 2}, "Klintens V\u00e4g": {"Godhemsgatan": 1}, "Godhemsgatan": {"Mariaplan": 2, "Ekedal": 1}, "Mariaplan": {"Ostindiegatan": 1, "Marklandsgatan": 4}, "Ostindiegatan": {"Vagnhallen Majorna": 2, "Sannaplan": 1}, "Vagnhallen Majorna": {"Jaegerdorffsplatsen": 1}, "Jaegerdorffsplatsen": {"Chapmans Torg": 1}, "Chapmans Torg": {"Kaptensgatan": 2}, "Kaptensgatan": {"Stigbergstorget": 2}, "Stigbergstorget": {"Masthuggstorget": 2}, "Masthuggstorget": {"J\u00e4rntorget": 2}, "Hagakyrkan": {"Vasa Viktoriagatan": 1, "Gr\u00f6nsakstorget": 2}, "Valand": {"Kungsportsplatsen": 2}, "Kungsportsplatsen": {"Brunnsparken": 1}, "Solrosgatan": {"Sanatoriegatan": 1}, "Sanatoriegatan": {"Virginsgatan": 0}, "Virginsgatan": {"Welandergatan": 2}, "Berzeliigatan": {"Valand": 2}, "Gamlestads Torg": {"Hj\u00e4llbo": 1, "Ejdergatan": 2}, "Hj\u00e4llbo": {"Hammarkullen": 3}, "Hammarkullen": {"Stor\u00e5s": 1}, "Stor\u00e5s": {"Angered Centrum": 3}, "Angered Centrum": {}, "Welandergatan": {"T\u00f6pelsgatan": 1}, "T\u00f6pelsgatan": {"B\u00f6gatan": 1}, "B\u00f6gatan": {"Ekmanska": 1}, "Ekmanska": {"B\u00e4ckeliden": 1}, "B\u00e4ckeliden": {"Sankt Sigfrids Plan": 1}, "Sankt Sigfrids Plan": {"Liseberg Station": 1}, "Liseberg Station": {"Korsv\u00e4gen": 2}, "Lilla Bommen": {"Frihamnen": 4}, "Frihamnen": {"Hjalmar Brantingsplatsen": 1}, "Hjalmar Brantingsplatsen": {"V\u00e5gm\u00e4stareplatsen": 1}, "V\u00e5gm\u00e4stareplatsen": {"Wieselgrensplatsen": 1}, "Wieselgrensplatsen": {"Rambergsvallen": 1}, "Rambergsvallen": {"Gropeg\u00e5rdsgatan": 2}, "Gropeg\u00e5rdsgatan": {"Eketr\u00e4gatan": 1}, "Eketr\u00e4gatan": {"S\u00e4l\u00f6fjordsgatan": 2}, "S\u00e4l\u00f6fjordsgatan": {"V\u00e5rv\u00e4derstorget": 1}, "V\u00e5rv\u00e4derstorget": {"Mildv\u00e4dersgatan": 1}, "Mildv\u00e4dersgatan": {"\u00d6nskev\u00e4dersgatan": 1}, "\u00d6nskev\u00e4dersgatan": {"Friskv\u00e4derstorget": 1}, "Friskv\u00e4derstorget": {"V\u00e4derilsgatan": 1}, "V\u00e4derilsgatan": {"Temperaturgatan": 2}, "Temperaturgatan": {"Varmfrontsgatan": 0}, "Varmfrontsgatan": {}, "Aprilgatan": {"Allhelgonakyrkan": 1}, "Allhelgonakyrkan": {"Kortedala Torg": 1}, "Kortedala Torg": {"Runstavsgatan": 2}, "Runstavsgatan": {"Nym\u00e5negatan": 1}, "Nym\u00e5negatan": {"Bev\u00e4ringsgatan": 1}, "Bev\u00e4ringsgatan": {"Kviberg": 1}, "Kviberg": {"Bellevue": 1}, "Bellevue": {"SKF": 2}, "SKF": {"Gamlestads Torg": 1}, "Ejdergatan": {"Redbergsplatsen": 2}, "Chalmers": {"Wavrinskys Plats": 1}, "Wavrinskys Plats": {"Medicinaregatan": 2}, "Medicinaregatan": {"Sahlgrenska Huvudentr\u00e9": 2}, "Sahlgrenska Huvudentr\u00e9": {"Linn\u00e9platsen": 1, "Botaniska Tr\u00e4dg\u00e5rden": 3}, "Nordstan": {"Frihamnen": 1}, "Komettorget": {"Rymdtorget Sp\u00e5rvagn": 2}, "Rymdtorget Sp\u00e5rvagn": {"Teleskopgatan": 1}, "Teleskopgatan": {"Galileis Gata": 1}, "Galileis Gata": {"Januarigatan": 1}, "Januarigatan": {"Allhelgonakyrkan": 1}, "Kapellplatsen": {"Chalmers": 1}, "Sannaplan": {"Sandarna": 1, "Mariaplan": 1}, "Sandarna": {"Kungssten": 2}, "Kungssten": {}, "Doktor Sydows Gata": {"Doktor Fries Torg": 1}, "Doktor Fries Torg": {"Wavrinskys Plats": 2}, "Saltholmen": {"Roddf\u00f6reningen": 1}, "Roddf\u00f6reningen": {"L\u00e5ngedrag": 1}, "L\u00e5ngedrag": {"Hinsholmen": 1}, "Hinsholmen": {"K\u00e4ringberget": 2}, "K\u00e4ringberget": {"Tranered": 1}, "Tranered": {"Hagen": 1}, "Hagen": {"Nya Varvsall\u00e9n": 2}, "Nya Varvsall\u00e9n": {"Kungssten": 1}, "Ekedal": {"Majvallen": 1}, "Majvallen": {"Fj\u00e4llgatan": 1}, "Fj\u00e4llgatan": {"Stigbergstorget": 2}}} \ No newline at end of file +{"stops": {"\u00d6stra Sjukhuset": {"lat": "57.7224618", "lon": "12.0478166"}, "Tingvallsv\u00e4gen": {"lat": "57.7246437", "lon": "12.0420754"}, "Kaggeledstorget": {"lat": "57.7229358", "lon": "12.0332892"}, "\u00c4tteh\u00f6gsgatan": {"lat": "57.7200477", "lon": "12.0285376"}, "Munkeb\u00e4ckstorget": {"lat": "57.7185656", "lon": "12.0263524"}, "H\u00e4rlanda": {"lat": "57.7181065", "lon": "12.0194426"}, "Stockholmsgatan": {"lat": "57.7170564", "lon": "12.0136038"}, "Redbergsplatsen": {"lat": "57.716275", "lon": "12.004907"}, "Olskrokstorget": {"lat": "57.7146209", "lon": "11.9987871"}, "Svingeln": {"lat": "57.713358", "lon": "11.9917409"}, "Ullevi Norra": {"lat": "57.7081152", "lon": "11.9861639"}, "Centralstationen": {"lat": "57.7077849", "lon": "11.9734427"}, "Brunnsparken": {"lat": "57.7065955", "lon": "11.9689358"}, "Stenpiren": {"lat": "57.7056512", "lon": "11.9574172"}, "J\u00e4rntorget": {"lat": "57.6999652", "lon": "11.952972"}, "Prinsgatan": {"lat": "57.6964754", "lon": "11.9513521"}, "Olivedalsgatan": {"lat": "57.6918865", "lon": "11.9536831"}, "Linn\u00e9platsen": {"lat": "57.689966", "lon": "11.9520518"}, "Botaniska Tr\u00e4dg\u00e5rden": {"lat": "57.6812619", "lon": "11.9455821"}, "Marklandsgatan": {"lat": "57.673267", "lon": "11.9353621"}, "Axel Dahlstr\u00f6ms Torg": {"lat": "57.672288", "lon": "11.9275696"}, "Lantmilsgatan": {"lat": "57.6668601", "lon": "11.924836"}, "Nymilsgatan": {"lat": "57.6624705", "lon": "11.9250789"}, "Musikv\u00e4gen": {"lat": "57.6590769", "lon": "11.9206117"}, "Positivgatan": {"lat": "57.6566374", "lon": "11.9175191"}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"lat": "57.6527643", "lon": "11.9116376"}, "Briljantgatan": {"lat": "57.6486393", "lon": "11.9035069"}, "Smaragdgatan": {"lat": "57.6454509", "lon": "11.8993694"}, "Opaltorget": {"lat": "57.6423342", "lon": "11.9010554"}, "M\u00f6lndals Innerstad": {"lat": "57.655591400000006", "lon": "12.01855524009189"}, "M\u00f6lndals sjukhus": {"lat": "57.6614548", "lon": "12.0136632"}, "Lackareb\u00e4ck": {"lat": "57.6663479", "lon": "12.0114421"}, "Kroksl\u00e4tts Fabriker": {"lat": "57.6717887", "lon": "12.0100249"}, "Kroksl\u00e4tts torg": {"lat": "57.6753924", "lon": "12.0078652"}, "Lana": {"lat": "57.678333", "lon": "12.0041666"}, "Varbergsgatan": {"lat": "57.6795297", "lon": "12.003115"}, "Elisedal": {"lat": "57.6834394", "lon": "12.0004416"}, "Almedal": {"lat": "57.6867844", "lon": "11.9974967"}, "Liseberg S\u00f6dra": {"lat": "57.6945173", "lon": "11.993695420809985"}, "Korsv\u00e4gen": {"lat": "57.6968295", "lon": "11.9868341"}, "Scandinavium": {"lat": "57.7006276", "lon": "11.9858582"}, "Ullevi S\u00f6dra": {"lat": "57.7039541", "lon": "11.9850022"}, "Domkyrkan": {"lat": "57.7042356", "lon": "11.9636653"}, "Gr\u00f6nsakstorget": {"lat": "57.7025866", "lon": "11.9639739"}, "Vasaplatsen": {"lat": "57.6989398", "lon": "11.9705111"}, "Vasa Viktoriagatan": {"lat": "57.6985634", "lon": "11.9653312"}, "Handelsh\u00f6gskolan": {"lat": "57.6965303", "lon": "11.9625825"}, "Brunnsgatan": {"lat": "57.6936796", "lon": "11.9591759"}, "Seminariegatan": {"lat": "57.6920557", "lon": "11.9571828"}, "Bokekullsgatan": {"lat": "57.6771253", "lon": "11.9327977"}, "H\u00f6gsbogatan": {"lat": "57.6803596", "lon": "11.9301317"}, "Klintens V\u00e4g": {"lat": "57.6824461", "lon": "11.9279843"}, "Godhemsgatan": {"lat": "57.6854379", "lon": "11.9264658"}, "Mariaplan": {"lat": "57.686497", "lon": "11.9202959"}, "Ostindiegatan": {"lat": "57.6876154", "lon": "11.9156284"}, "Vagnhallen Majorna": {"lat": "57.6891689", "lon": "11.9123386"}, "Jaegerdorffsplatsen": {"lat": "57.6914334", "lon": "11.9150447"}, "Chapmans Torg": {"lat": "57.6944764", "lon": "11.9198652"}, "Kaptensgatan": {"lat": "57.6971583", "lon": "11.9276101"}, "Stigbergstorget": {"lat": "57.6990303", "lon": "11.9338896"}, "Masthuggstorget": {"lat": "57.6995343", "lon": "11.9447351"}, "Hagakyrkan": {"lat": "57.6996013", "lon": "11.9615964"}, "Valand": {"lat": "57.7004651", "lon": "11.9748851"}, "Kungsportsplatsen": {"lat": "57.7039668", "lon": "11.9697972"}, "Solrosgatan": {"lat": "57.7162733", "lon": "12.0250195"}, "Sanatoriegatan": {"lat": "57.7132161", "lon": "12.0240768"}, "Virginsgatan": {"lat": "57.7107812", "lon": "12.0235382"}, "Berzeliigatan": {"lat": "57.6983047", "lon": "11.9823431"}, "Gamlestads Torg": {"lat": "57.7279636", "lon": "12.0046485"}, "Hj\u00e4llbo": {"lat": "57.7692649", "lon": "12.0223749"}, "Hammarkullen": {"lat": "57.7800406", "lon": "12.0366009"}, "Stor\u00e5s": {"lat": "57.785139", "lon": "12.0462261"}, "Angered Centrum": {"lat": "57.7960687", "lon": "12.0495277"}, "Welandergatan": {"lat": "57.7060778", "lon": "12.0239345"}, "T\u00f6pelsgatan": {"lat": "57.7023397", "lon": "12.0221389"}, "B\u00f6gatan": {"lat": "57.700946", "lon": "12.0160087"}, "Ekmanska": {"lat": "57.6996668", "lon": "12.0096351"}, "B\u00e4ckeliden": {"lat": "57.6999206", "lon": "12.0033203"}, "Sankt Sigfrids Plan": {"lat": "57.6987301", "lon": "11.9994709"}, "Liseberg Station": {"lat": "57.6975588", "lon": "11.9942205"}, "Lilla Bommen": {"lat": "57.7092219", "lon": "11.9667699"}, "Frihamnen": {"lat": "57.7203255", "lon": "11.9600773"}, "Hjalmar Brantingsplatsen": {"lat": "57.7206077", "lon": "11.9522789"}, "V\u00e5gm\u00e4stareplatsen": {"lat": "57.720537", "lon": "11.9451746"}, "Wieselgrensplatsen": {"lat": "57.7205998", "lon": "11.9355948"}, "Rambergsvallen": {"lat": "57.719347", "lon": "11.9268104"}, "Gropeg\u00e5rdsgatan": {"lat": "57.7183037", "lon": "11.9191595"}, "Eketr\u00e4gatan": {"lat": "57.7164903", "lon": "11.9099118"}, "S\u00e4l\u00f6fjordsgatan": {"lat": "57.7136356", "lon": "11.9029025"}, "V\u00e5rv\u00e4derstorget": {"lat": "57.7129196", "lon": "11.8931411"}, "Mildv\u00e4dersgatan": {"lat": "57.7156823", "lon": "11.890926"}, "\u00d6nskev\u00e4dersgatan": {"lat": "57.7201505", "lon": "11.8930502"}, "Friskv\u00e4derstorget": {"lat": "57.7235673", "lon": "11.8931956"}, "V\u00e4derilsgatan": {"lat": "57.7265488", "lon": "11.8933485"}, "Temperaturgatan": {"lat": "57.732569", "lon": "11.8952913"}, "Varmfrontsgatan": {"lat": "57.7368776", "lon": "11.8966497"}, "Aprilgatan": {"lat": "57.7608913", "lon": "12.0409994"}, "Allhelgonakyrkan": {"lat": "57.7574065", "lon": "12.0374426"}, "Kortedala Torg": {"lat": "57.752779", "lon": "12.0330403"}, "Runstavsgatan": {"lat": "57.7479034", "lon": "12.0303082"}, "Nym\u00e5negatan": {"lat": "57.7427511", "lon": "12.0298737"}, "Bev\u00e4ringsgatan": {"lat": "57.7399617", "lon": "12.0286261"}, "Kviberg": {"lat": "57.7367053", "lon": "12.0265257"}, "Bellevue": {"lat": "57.7325237", "lon": "12.0246107"}, "SKF": {"lat": "57.7291018", "lon": "12.0132691"}, "Ejdergatan": {"lat": "57.7210222", "lon": "12.005952"}, "Chalmers": {"lat": "57.6900225", "lon": "11.9730927"}, "Wavrinskys Plats": {"lat": "57.6888028", "lon": "11.9684664"}, "Medicinaregatan": {"lat": "57.6855827", "lon": "11.9619508"}, "Sahlgrenska Huvudentr\u00e9": {"lat": "57.6836795", "lon": "11.9614653"}, "Nordstan": {"lat": "57.7086397", "lon": "11.969087498371342"}, "Komettorget": {"lat": "57.7511423", "lon": "12.0713114"}, "Rymdtorget Sp\u00e5rvagn": {"lat": "57.7558013", "lon": "12.0669195"}, "Teleskopgatan": {"lat": "57.7593", "lon": "12.0597894"}, "Galileis Gata": {"lat": "57.7605336", "lon": "12.051446"}, "Januarigatan": {"lat": "57.7602447", "lon": "12.0412135"}, "Kapellplatsen": {"lat": "57.6927713", "lon": "11.9735773"}, "Sannaplan": {"lat": "57.6842394", "lon": "11.9166553"}, "Sandarna": {"lat": "57.6827594", "lon": "11.9095056"}, "Kungssten": {"lat": "57.6805281", "lon": "11.9018248"}, "Doktor Sydows Gata": {"lat": "57.6793184", "lon": "11.9776909"}, "Doktor Fries Torg": {"lat": "57.6844804", "lon": "11.9726716"}, "Saltholmen": {"lat": "57.6606312", "lon": "11.8455002"}, "Roddf\u00f6reningen": {"lat": "57.6640011", "lon": "11.8516451"}, "L\u00e5ngedrag": {"lat": "57.6682375", "lon": "11.8535394"}, "Hinsholmen": {"lat": "57.6676904", "lon": "11.8610197"}, "K\u00e4ringberget": {"lat": "57.6692358", "lon": "11.8710883"}, "Tranered": {"lat": "57.6723198", "lon": "11.8793541"}, "Hagen": {"lat": "57.6748357", "lon": "11.8841485"}, "Nya Varvsall\u00e9n": {"lat": "57.6780065", "lon": "11.8950555"}, "Ekedal": {"lat": "57.6871315", "lon": "11.9290998"}, "Majvallen": {"lat": "57.6909343", "lon": "11.9354935"}, "Fj\u00e4llgatan": {"lat": "57.69443", "lon": "11.9362336"}}, "lines": {"1": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "H\u00e4rlanda", "Stockholmsgatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Prinsgatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan", "Opaltorget"], "2": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen", "Brunnsparken", "Domkyrkan", "Gr\u00f6nsakstorget", "Vasaplatsen", "Vasa Viktoriagatan", "Handelsh\u00f6gskolan", "Brunnsgatan", "Seminariegatan", "Olivedalsgatan", "Linn\u00e9platsen", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg"], "3": ["Marklandsgatan", "Bokekullsgatan", "H\u00f6gsbogatan", "Klintens V\u00e4g", "Godhemsgatan", "Mariaplan", "Ostindiegatan", "Vagnhallen Majorna", "Jaegerdorffsplatsen", "Chapmans Torg", "Kaptensgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Vasa Viktoriagatan", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Ullevi Norra", "Svingeln", "Olskrokstorget", "Redbergsplatsen", "Stockholmsgatan", "H\u00e4rlanda", "Solrosgatan", "Sanatoriegatan", "Virginsgatan"], "4": ["M\u00f6lndals Innerstad", "M\u00f6lndals sjukhus", "Lackareb\u00e4ck", "Kroksl\u00e4tts Fabriker", "Kroksl\u00e4tts torg", "Lana", "Varbergsgatan", "Elisedal", "Almedal", "Liseberg S\u00f6dra", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "Hj\u00e4llbo", "Hammarkullen", "Stor\u00e5s", "Angered Centrum"], "5": ["\u00d6stra Sjukhuset", "Tingvallsv\u00e4gen", "Kaggeledstorget", "\u00c4tteh\u00f6gsgatan", "Munkeb\u00e4ckstorget", "Solrosgatan", "Sanatoriegatan", "Virginsgatan", "Welandergatan", "T\u00f6pelsgatan", "B\u00f6gatan", "Ekmanska", "B\u00e4ckeliden", "Sankt Sigfrids Plan", "Liseberg Station", "Korsv\u00e4gen", "Berzeliigatan", "Valand", "Kungsportsplatsen", "Brunnsparken", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan", "Varmfrontsgatan"], "6": ["Aprilgatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Linn\u00e9platsen", "Olivedalsgatan", "Prinsgatan", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Nordstan", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan", "Temperaturgatan", "Varmfrontsgatan"], "7": ["Komettorget", "Rymdtorget Sp\u00e5rvagn", "Teleskopgatan", "Galileis Gata", "Januarigatan", "Allhelgonakyrkan", "Kortedala Torg", "Runstavsgatan", "Nym\u00e5negatan", "Bev\u00e4ringsgatan", "Kviberg", "Bellevue", "SKF", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Kungsportsplatsen", "Valand", "Vasaplatsen", "Kapellplatsen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn", "Briljantgatan", "Smaragdgatan", "Opaltorget"], "8": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Ejdergatan", "Redbergsplatsen", "Olskrokstorget", "Svingeln", "Ullevi Norra", "Ullevi S\u00f6dra", "Scandinavium", "Korsv\u00e4gen", "Chalmers", "Wavrinskys Plats", "Medicinaregatan", "Sahlgrenska Huvudentr\u00e9", "Botaniska Tr\u00e4dg\u00e5rden", "Marklandsgatan", "Axel Dahlstr\u00f6ms Torg", "Lantmilsgatan", "Nymilsgatan", "Musikv\u00e4gen", "Positivgatan", "Fr\u00f6lunda Torg Sp\u00e5rvagn"], "9": ["Angered Centrum", "Stor\u00e5s", "Hammarkullen", "Hj\u00e4llbo", "Gamlestads Torg", "Centralstationen", "Brunnsparken", "Stenpiren", "J\u00e4rntorget", "Masthuggstorget", "Stigbergstorget", "Kaptensgatan", "Chapmans Torg", "Jaegerdorffsplatsen", "Vagnhallen Majorna", "Ostindiegatan", "Sannaplan", "Sandarna", "Kungssten"], "10": ["Doktor Sydows Gata", "Doktor Fries Torg", "Wavrinskys Plats", "Chalmers", "Kapellplatsen", "Vasaplatsen", "Valand", "Kungsportsplatsen", "Brunnsparken", "Centralstationen", "Lilla Bommen", "Frihamnen", "Hjalmar Brantingsplatsen", "V\u00e5gm\u00e4stareplatsen", "Wieselgrensplatsen", "Rambergsvallen", "Gropeg\u00e5rdsgatan", "Eketr\u00e4gatan", "S\u00e4l\u00f6fjordsgatan", "V\u00e5rv\u00e4derstorget", "Mildv\u00e4dersgatan", "\u00d6nskev\u00e4dersgatan", "Friskv\u00e4derstorget", "V\u00e4derilsgatan"], "11": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Godhemsgatan", "Ekedal", "Majvallen", "Fj\u00e4llgatan", "Stigbergstorget", "Masthuggstorget", "J\u00e4rntorget", "Hagakyrkan", "Gr\u00f6nsakstorget", "Domkyrkan", "Brunnsparken", "Centralstationen", "Gamlestads Torg", "SKF", "Bellevue", "Kviberg", "Bev\u00e4ringsgatan", "Nym\u00e5negatan", "Runstavsgatan", "Kortedala Torg", "Allhelgonakyrkan", "Januarigatan", "Galileis Gata", "Teleskopgatan", "Rymdtorget Sp\u00e5rvagn", "Komettorget"], "13": ["Saltholmen", "Roddf\u00f6reningen", "L\u00e5ngedrag", "Hinsholmen", "K\u00e4ringberget", "Tranered", "Hagen", "Nya Varvsall\u00e9n", "Kungssten", "Sandarna", "Sannaplan", "Mariaplan", "Marklandsgatan", "Botaniska Tr\u00e4dg\u00e5rden", "Sahlgrenska Huvudentr\u00e9", "Medicinaregatan", "Wavrinskys Plats", "Chalmers", "Korsv\u00e4gen", "Scandinavium", "Ullevi S\u00f6dra", "Centralstationen"]}, "times": {"\u00d6stra Sjukhuset": {"Tingvallsv\u00e4gen": 1}, "Tingvallsv\u00e4gen": {"Kaggeledstorget": 2}, "Kaggeledstorget": {"\u00c4tteh\u00f6gsgatan": 0}, "\u00c4tteh\u00f6gsgatan": {"Munkeb\u00e4ckstorget": 1}, "Munkeb\u00e4ckstorget": {"H\u00e4rlanda": 2, "Solrosgatan": 1}, "H\u00e4rlanda": {"Stockholmsgatan": 1, "Solrosgatan": 2}, "Stockholmsgatan": {"Redbergsplatsen": 2}, "Redbergsplatsen": {"Olskrokstorget": 1}, "Olskrokstorget": {"Svingeln": 2}, "Svingeln": {"Ullevi Norra": 2}, "Ullevi Norra": {"Centralstationen": 1, "Ullevi S\u00f6dra": 2}, "Centralstationen": {"Brunnsparken": 1, "Gamlestads Torg": 6, "Lilla Bommen": 1}, "Brunnsparken": {"Stenpiren": 1, "Domkyrkan": 1, "Lilla Bommen": 0, "Nordstan": 1}, "Stenpiren": {"J\u00e4rntorget": 2}, "J\u00e4rntorget": {"Prinsgatan": 1, "Hagakyrkan": 3}, "Prinsgatan": {"Olivedalsgatan": 2}, "Olivedalsgatan": {"Linn\u00e9platsen": 1}, "Linn\u00e9platsen": {"Botaniska Tr\u00e4dg\u00e5rden": 2}, "Botaniska Tr\u00e4dg\u00e5rden": {"Marklandsgatan": 3}, "Marklandsgatan": {"Axel Dahlstr\u00f6ms Torg": 1, "Bokekullsgatan": 1}, "Axel Dahlstr\u00f6ms Torg": {"Lantmilsgatan": 1}, "Lantmilsgatan": {"Nymilsgatan": 1}, "Nymilsgatan": {"Musikv\u00e4gen": 1}, "Musikv\u00e4gen": {"Positivgatan": 2}, "Positivgatan": {"Fr\u00f6lunda Torg Sp\u00e5rvagn": 1}, "Fr\u00f6lunda Torg Sp\u00e5rvagn": {"Briljantgatan": 2}, "Briljantgatan": {"Smaragdgatan": 1}, "Smaragdgatan": {"Opaltorget": 0}, "Opaltorget": {}, "M\u00f6lndals Innerstad": {"M\u00f6lndals sjukhus": 1}, "M\u00f6lndals sjukhus": {"Lackareb\u00e4ck": 2}, "Lackareb\u00e4ck": {"Kroksl\u00e4tts Fabriker": 1}, "Kroksl\u00e4tts Fabriker": {"Kroksl\u00e4tts torg": 1}, "Kroksl\u00e4tts torg": {"Lana": 1}, "Lana": {"Varbergsgatan": 1}, "Varbergsgatan": {"Elisedal": 1}, "Elisedal": {"Almedal": 1}, "Almedal": {"Liseberg S\u00f6dra": 2}, "Liseberg S\u00f6dra": {"Korsv\u00e4gen": 2}, "Korsv\u00e4gen": {"Scandinavium": 1, "Berzeliigatan": 1, "Chalmers": 3}, "Scandinavium": {"Ullevi S\u00f6dra": 2}, "Ullevi S\u00f6dra": {"Centralstationen": 3}, "Domkyrkan": {"Gr\u00f6nsakstorget": 1}, "Gr\u00f6nsakstorget": {"Vasaplatsen": 2}, "Vasaplatsen": {"Vasa Viktoriagatan": 1, "Valand": 1, "Kapellplatsen": 2}, "Vasa Viktoriagatan": {"Handelsh\u00f6gskolan": 1}, "Handelsh\u00f6gskolan": {"Brunnsgatan": 2}, "Brunnsgatan": {"Seminariegatan": 1}, "Seminariegatan": {"Olivedalsgatan": 1}, "Bokekullsgatan": {"H\u00f6gsbogatan": 1}, "H\u00f6gsbogatan": {"Klintens V\u00e4g": 2}, "Klintens V\u00e4g": {"Godhemsgatan": 1}, "Godhemsgatan": {"Mariaplan": 2, "Ekedal": 1}, "Mariaplan": {"Ostindiegatan": 1, "Marklandsgatan": 4}, "Ostindiegatan": {"Vagnhallen Majorna": 2, "Sannaplan": 1}, "Vagnhallen Majorna": {"Jaegerdorffsplatsen": 1}, "Jaegerdorffsplatsen": {"Chapmans Torg": 1}, "Chapmans Torg": {"Kaptensgatan": 2}, "Kaptensgatan": {"Stigbergstorget": 2}, "Stigbergstorget": {"Masthuggstorget": 2}, "Masthuggstorget": {"J\u00e4rntorget": 2}, "Hagakyrkan": {"Vasa Viktoriagatan": 1, "Gr\u00f6nsakstorget": 2}, "Valand": {"Kungsportsplatsen": 2}, "Kungsportsplatsen": {"Brunnsparken": 1}, "Solrosgatan": {"Sanatoriegatan": 1}, "Sanatoriegatan": {"Virginsgatan": 0}, "Virginsgatan": {"Welandergatan": 2}, "Berzeliigatan": {"Valand": 2}, "Gamlestads Torg": {"Hj\u00e4llbo": 1, "Ejdergatan": 2}, "Hj\u00e4llbo": {"Hammarkullen": 3}, "Hammarkullen": {"Stor\u00e5s": 1}, "Stor\u00e5s": {"Angered Centrum": 3}, "Angered Centrum": {}, "Welandergatan": {"T\u00f6pelsgatan": 1}, "T\u00f6pelsgatan": {"B\u00f6gatan": 1}, "B\u00f6gatan": {"Ekmanska": 1}, "Ekmanska": {"B\u00e4ckeliden": 1}, "B\u00e4ckeliden": {"Sankt Sigfrids Plan": 1}, "Sankt Sigfrids Plan": {"Liseberg Station": 1}, "Liseberg Station": {"Korsv\u00e4gen": 2}, "Lilla Bommen": {"Frihamnen": 4}, "Frihamnen": {"Hjalmar Brantingsplatsen": 1}, "Hjalmar Brantingsplatsen": {"V\u00e5gm\u00e4stareplatsen": 1}, "V\u00e5gm\u00e4stareplatsen": {"Wieselgrensplatsen": 1}, "Wieselgrensplatsen": {"Rambergsvallen": 1}, "Rambergsvallen": {"Gropeg\u00e5rdsgatan": 2}, "Gropeg\u00e5rdsgatan": {"Eketr\u00e4gatan": 1}, "Eketr\u00e4gatan": {"S\u00e4l\u00f6fjordsgatan": 2}, "S\u00e4l\u00f6fjordsgatan": {"V\u00e5rv\u00e4derstorget": 1}, "V\u00e5rv\u00e4derstorget": {"Mildv\u00e4dersgatan": 1}, "Mildv\u00e4dersgatan": {"\u00d6nskev\u00e4dersgatan": 1}, "\u00d6nskev\u00e4dersgatan": {"Friskv\u00e4derstorget": 1}, "Friskv\u00e4derstorget": {"V\u00e4derilsgatan": 1}, "V\u00e4derilsgatan": {"Temperaturgatan": 2}, "Temperaturgatan": {"Varmfrontsgatan": 0}, "Varmfrontsgatan": {}, "Aprilgatan": {"Allhelgonakyrkan": 1}, "Allhelgonakyrkan": {"Kortedala Torg": 1}, "Kortedala Torg": {"Runstavsgatan": 2}, "Runstavsgatan": {"Nym\u00e5negatan": 1}, "Nym\u00e5negatan": {"Bev\u00e4ringsgatan": 1}, "Bev\u00e4ringsgatan": {"Kviberg": 1}, "Kviberg": {"Bellevue": 1}, "Bellevue": {"SKF": 2}, "SKF": {"Gamlestads Torg": 1}, "Ejdergatan": {"Redbergsplatsen": 2}, "Chalmers": {"Wavrinskys Plats": 1}, "Wavrinskys Plats": {"Medicinaregatan": 2}, "Medicinaregatan": {"Sahlgrenska Huvudentr\u00e9": 2}, "Sahlgrenska Huvudentr\u00e9": {"Linn\u00e9platsen": 1, "Botaniska Tr\u00e4dg\u00e5rden": 3}, "Nordstan": {"Frihamnen": 1}, "Komettorget": {"Rymdtorget Sp\u00e5rvagn": 2}, "Rymdtorget Sp\u00e5rvagn": {"Teleskopgatan": 1}, "Teleskopgatan": {"Galileis Gata": 1}, "Galileis Gata": {"Januarigatan": 1}, "Januarigatan": {"Allhelgonakyrkan": 1}, "Kapellplatsen": {"Chalmers": 1}, "Sannaplan": {"Sandarna": 1, "Mariaplan": 1}, "Sandarna": {"Kungssten": 2}, "Kungssten": {}, "Doktor Sydows Gata": {"Doktor Fries Torg": 1}, "Doktor Fries Torg": {"Wavrinskys Plats": 2}, "Saltholmen": {"Roddf\u00f6reningen": 1}, "Roddf\u00f6reningen": {"L\u00e5ngedrag": 1}, "L\u00e5ngedrag": {"Hinsholmen": 1}, "Hinsholmen": {"K\u00e4ringberget": 2}, "K\u00e4ringberget": {"Tranered": 1}, "Tranered": {"Hagen": 1}, "Hagen": {"Nya Varvsall\u00e9n": 2}, "Nya Varvsall\u00e9n": {"Kungssten": 1}, "Ekedal": {"Majvallen": 1}, "Majvallen": {"Fj\u00e4llgatan": 1}, "Fj\u00e4llgatan": {"Stigbergstorget": 2}}} \ No newline at end of file diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 3a427cb..b1b8c8a 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -1,6 +1,6 @@ import unittest from tramdata import * - +import haversine as hs TRAM_FILE = 'labs/data/tramnetwork.json' class TestTramData(unittest.TestCase): @@ -16,9 +16,46 @@ def test_stops_exist(self): for stop in stopset: self.assertIn(stop, self.stopdict, msg = stop + ' not in stopdict') - # add your own tests here - - + def test_all_stops_included(self): + with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: + tramtest = file.read().replace(":","").strip().split("\n\n") + tramtest = [line.split("\n") for line in tramtest] + #print(tramtest) + test1 = [] + newtestlist =[] + for line in tramtest: + test1.append(line[0]) + newtestlist += line; newtestlist.remove(line[0]) + + x = 0 + for i in range(len(test1)): + if test1[i] in self.linedict: + x+=1 + print(f'{x} ouf of {len(test1)} passed') + + test2 = [] + for i in newtestlist: + a = i.rsplit(' ', 1) + test2.append(a[0].rstrip(" ")) + k =0 + for t in range(len(test2)): + for e in self.linedict.values(): + if test2[t] in e: + k+=1 + break + print(f'{k} ouf of {len(test2)} passed') + + def test_stops_in_line(self): + pass + + def test_distance_feasible(self): + print(self.stopdict) + + pass + def test_times_beetween_stops(self): + pass + +TestTramData.test_all_stops_included if __name__ == '__main__': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index f928b9e..cc2dac5 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,6 +1,6 @@ import json from pprint import pprint - +import haversine as hs TRAM_STOP_FILE = "labs/data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as fromFile: @@ -40,6 +40,7 @@ def build_tram_lines(lines): timedict[next_name] = {} if name not in timedict[next_name]: timedict[name][next_name] = time_diff + values.append(next_name) linedict[key] = values return (linedict, timedict) @@ -52,7 +53,7 @@ def build_tram_network(stopfile, linefile): with open("labs/data/tramnetwork.json", "w") as file: json.dump(outdict, file) - +build_tram_network(data, lines) def lines_via_stop(linedict, stop): pass @@ -63,7 +64,14 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): pass def distance_between_stops(stopdict, stop1, stop2): + print(stopdict[stop1].values()) + + + pass +distance_between_stops(build_tram_stops(data), "Gamlestads Torg", "Hammarkullen") +#https://www.askpython.com/python/examples/find-distance-between-two-geo-locations + def dialogue(tramfile): pass \ No newline at end of file From 67382abca3c63e7ae5746b0036d9bbf3c41a1c34 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Tue, 19 Nov 2024 21:35:02 +0100 Subject: [PATCH 42/54] distance function --- labs/lab1/tramdata.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index cc2dac5..b4c4046 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,6 +1,7 @@ import json from pprint import pprint import haversine as hs +from haversine import Unit TRAM_STOP_FILE = "labs/data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as fromFile: @@ -64,11 +65,16 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): pass def distance_between_stops(stopdict, stop1, stop2): - print(stopdict[stop1].values()) + loc1, loc2 = [float(item)for item in list(stopdict[stop1].values())], [float(item)for item in list(stopdict[stop2].values())] + + result = hs.haversine(loc1,loc2,unit=Unit.KILOMETERS) + + print(f'Distance between stops {round(result, 1)} km') + + return result - pass distance_between_stops(build_tram_stops(data), "Gamlestads Torg", "Hammarkullen") #https://www.askpython.com/python/examples/find-distance-between-two-geo-locations From 455cde17cdf1911b0211da9726cdda3b6eaf8ae1 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 09:56:56 +0100 Subject: [PATCH 43/54] Hej --- labs/lab1/tramdata.py | 35 +++++++++++++++-------------------- testfile.py | 25 ------------------------- 2 files changed, 15 insertions(+), 45 deletions(-) delete mode 100644 testfile.py diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 7bf47f3..b84f48b 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -56,25 +56,14 @@ def build_tram_network(stopfile, linefile): def lines_via_stop(linedict, stop): - stoplist = [] - for key in linedict: - if stop in linedict[key]: - stoplist.append(key) + return [key for key in linedict if stop in linedict[key]] - return stoplist - -#print(lines_via_stop(build_tram_lines(lines)[0], "Valand")) +#print(lines_via_stop(build_tram_lines(lines)[0], "Chalmers")) def lines_between_stops(linedict, stop1, stop2): - stoplist = [] - - for key in linedict: - if stop1 in linedict[key] and stop2 in linedict[key]: - stoplist.append(key) - - return stoplist + return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] #print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): @@ -100,15 +89,21 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): -#time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 11, "Centralstationen", "Majvallen") +#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 8, "Ullevi Norra", "Chalmers")) def distance_between_stops(stopdict, stop1, stop2): - location_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) - location_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) + loc_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) + loc_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) - return haversine(location_1, location_2) + return haversine(loc_1, loc_2) -#print(distance_between_stops(build_tram_stops(data), "Centralstationen", "Ullevi Norra")) +print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) def dialogue(tramfile): - pass \ No newline at end of file + tramdict = json.load(tramfile) + print("Choose your function:\n via \n between and \n time with from \n to distance from to \n quit") + x = 1 + print(x) + + +dialogue("labs/data/tramnetwork") \ No newline at end of file diff --git a/testfile.py b/testfile.py deleted file mode 100644 index 44d0511..0000000 --- a/testfile.py +++ /dev/null @@ -1,25 +0,0 @@ -import json -from pprint import pprint - - - -with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: - lines = file.read().replace(":","").strip().split("\n\n") - lines = [line.split("\n") for line in lines] -print(lines) -test1 = [] -test2 =[] -for line in lines: - stoplist = [] - test2.append(line[0]) - for i in range(1, len(line)): - item1, item2= [item.strip() for item in line[i].split(" ") if item] - stoplist.append((item1)) - test1.append(stoplist) - - - - - -print(test1) -print(test2) \ No newline at end of file From 687f2a8aefa16083f9cbf5c1d7b6d856cdaa197e Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 10:32:32 +0100 Subject: [PATCH 44/54] Tillagda tester och funktioner --- labs/lab1/tramdata.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b84f48b..e73cf46 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -96,14 +96,32 @@ def distance_between_stops(stopdict, stop1, stop2): return haversine(loc_1, loc_2) -print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) +#print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) def dialogue(tramfile): - tramdict = json.load(tramfile) - print("Choose your function:\n via \n between and \n time with from \n to distance from to \n quit") - x = 1 - print(x) + with open(tramfile, "r") as file: + tramdict = json.load(file) + print("Choose option:\n via \n between and from to \n distance from to \n quit") + user_input = input("").split() + print(" ".join(user_input[:1])) + if user_input[0] == "via": + print(user_input[1:]) -dialogue("labs/data/tramnetwork") \ No newline at end of file + if user_input[0] == "between": + pass + + if user_input[0] == "time": + pass + + if user_input[0] == "distance": + pass + + if user_input[0] == "quit": + pass + + + + +dialogue("labs/data/tramnetwork.json") \ No newline at end of file From 8f6e67428f6825248030c4f0092405361fdcb709 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 10:34:10 +0100 Subject: [PATCH 45/54] Update test_tramdata.py --- labs/lab1/test_tramdata.py | 71 +++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index ea03367..085a5fc 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -1,65 +1,56 @@ import unittest from tramdata import * - -TRAM_FILE = 'labs/data/tramnetwork.json' +import haversine as hs +TRAMFILE = 'labs/data/tramnetwork.json' class TestTramData(unittest.TestCase): def setUp(self): - - with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: - lines = file.read().replace(":","").strip().split("\n\n") - lines = [line.split("\n") for line in lines] - test1 = [] - test2 =[] - for line in lines: - stoplist = [] - test2.append(line[0]) - for i in range(1, len(line)): - item1, item2= [item.strip() for item in line[i].split(" ") if item] - stoplist.append((item1)) - test1.append(stoplist) - self.stoplist = test1 - self.linelist = test2 - - with open(TRAM_FILE) as trams: + with open(TRAMFILE) as trams: tramdict = json.loads(trams.read()) self.stopdict = tramdict['stops'] self.linedict = tramdict['lines'] self.timedict = tramdict['times'] - - - - def test_stops_exist(self): + def teststopsexist(self): stopset = {stop for line in self.linedict for stop in self.linedict[line]} for stop in stopset: self.assertIn(stop, self.stopdict, msg = stop + ' not in stopdict') def test_all_stops_included(self): - "Testar ifall alla spårvagnslinjer finns med" - for i in range(len(self.linelist)): - if self.linelist[i] not in self.linedict: - print(f"{self.linelist[i]} not in tramdict") + test1 = ['1','2','3','4','5','6','7','8','9','10','11','13'] + x = 0 + for i in range(len(test1)): + if test1[i] in self.linedict: + x+=1 + + print(f'{x} passed test out of {len(test1)} passed') def test_stops_in_line(self): - "Testar ifall alla hållplatser finns i linjerna" - x = 0 - for i in range(len(self.stoplist)): - if self.stoplist[i] != self.linedict[self.linelist[i]]: - print(f"Stops in line {self.linelist[i]} not ok") - else: - x += 1 - print(f"{x} out of {len(self.stoplist)} tests passed") + test2 = ["Ullevi Norra", "Chalmers", "Angered Centrum", "Saltholmen", "Hagen", "Rambergsvallen"] + x =0 + for i in range(len(test2)): + for k in self.linedict.values(): + if test2[i] in k: + x+=1 + break + print(f'{x} passed test out of {len(test2)} passed') def test_distance_feasible(self): - pass + x = 0 + if distance_between_stops(self.stopdict, "Ullevi Norra", "Chalmers") < 20: + x+=1 + if distance_between_stops(self.stopdict, "Angered Centrum", "Saltholmen") < 20: + x+=1 + if distance_between_stops(self.stopdict, "Hagen", "Rambergsvallen") < 20: + x+=1 + print(f'{x} passed test ouf of {3}') + def test_times_beetween_stops(self): pass + test3 = {"Tingvallsvägen": {"Kaggeledstorget": 2}} + print(self.timedict) - - - -if __name__ == '__main__': +if __name__ == '__main': unittest.main() From c2800f4af2de0b62f69d8b88877a78368366286b Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Wed, 20 Nov 2024 10:41:30 +0100 Subject: [PATCH 46/54] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit 8f6e67428f6825248030c4f0092405361fdcb709 Author: filiplarsen231 Date: Wed Nov 20 10:34:10 2024 +0100 Update test_tramdata.py commit 687f2a8aefa16083f9cbf5c1d7b6d856cdaa197e Author: filiplarsen231 Date: Wed Nov 20 10:32:32 2024 +0100 Tillagda tester och funktioner commit 455cde17cdf1911b0211da9726cdda3b6eaf8ae1 Author: filiplarsen231 Date: Wed Nov 20 09:56:56 2024 +0100 Hej commit da01f4a5dc4d56b8e4851ff2df641fe038d96dd3 Author: filiplarsen231 Date: Tue Nov 19 17:11:36 2024 +0100 alla funktioner förutom dialogue fixade commit ad1958ed10a666319749aff451cadb1816945a82 Author: filiplarsen231 Date: Tue Nov 19 16:54:39 2024 +0100 time_beetween_stops tillagd commit db7201eca55b8b85f684b1bfc183f06dfff3057a Author: filiplarsen231 Date: Tue Nov 19 10:22:13 2024 +0100 Update test_tramdata.py --- labs/lab1/test_tramdata.py | 65 ++++++++++++++---------------- labs/lab1/tramdata.py | 81 +++++++++++++++++++++++++++++--------- 2 files changed, 92 insertions(+), 54 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index b1b8c8a..085a5fc 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -1,61 +1,56 @@ import unittest from tramdata import * import haversine as hs -TRAM_FILE = 'labs/data/tramnetwork.json' +TRAMFILE = 'labs/data/tramnetwork.json' class TestTramData(unittest.TestCase): def setUp(self): - with open(TRAM_FILE) as trams: + with open(TRAMFILE) as trams: tramdict = json.loads(trams.read()) self.stopdict = tramdict['stops'] self.linedict = tramdict['lines'] - - def test_stops_exist(self): + self.timedict = tramdict['times'] + def teststopsexist(self): stopset = {stop for line in self.linedict for stop in self.linedict[line]} for stop in stopset: self.assertIn(stop, self.stopdict, msg = stop + ' not in stopdict') def test_all_stops_included(self): - with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: - tramtest = file.read().replace(":","").strip().split("\n\n") - tramtest = [line.split("\n") for line in tramtest] - #print(tramtest) - test1 = [] - newtestlist =[] - for line in tramtest: - test1.append(line[0]) - newtestlist += line; newtestlist.remove(line[0]) - + test1 = ['1','2','3','4','5','6','7','8','9','10','11','13'] x = 0 - for i in range(len(test1)): + for i in range(len(test1)): if test1[i] in self.linedict: x+=1 - print(f'{x} ouf of {len(test1)} passed') - - test2 = [] - for i in newtestlist: - a = i.rsplit(' ', 1) - test2.append(a[0].rstrip(" ")) - k =0 - for t in range(len(test2)): - for e in self.linedict.values(): - if test2[t] in e: - k+=1 - break - print(f'{k} ouf of {len(test2)} passed') + + print(f'{x} passed test out of {len(test1)} passed') def test_stops_in_line(self): - pass - + test2 = ["Ullevi Norra", "Chalmers", "Angered Centrum", "Saltholmen", "Hagen", "Rambergsvallen"] + x =0 + for i in range(len(test2)): + for k in self.linedict.values(): + if test2[i] in k: + x+=1 + break + print(f'{x} passed test out of {len(test2)} passed') + def test_distance_feasible(self): - print(self.stopdict) - - pass + x = 0 + if distance_between_stops(self.stopdict, "Ullevi Norra", "Chalmers") < 20: + x+=1 + if distance_between_stops(self.stopdict, "Angered Centrum", "Saltholmen") < 20: + x+=1 + if distance_between_stops(self.stopdict, "Hagen", "Rambergsvallen") < 20: + x+=1 + print(f'{x} passed test ouf of {3}') + def test_times_beetween_stops(self): pass + test3 = {"Tingvallsvägen": {"Kaggeledstorget": 2}} + + print(self.timedict) -TestTramData.test_all_stops_included -if __name__ == '__main__': +if __name__ == '__main': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index b4c4046..17fb0aa 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,7 +1,6 @@ import json from pprint import pprint -import haversine as hs -from haversine import Unit +from haversine import haversine TRAM_STOP_FILE = "labs/data/tramstops.json" with open(TRAM_STOP_FILE, 'r') as fromFile: @@ -45,39 +44,83 @@ def build_tram_lines(lines): linedict[key] = values return (linedict, timedict) - - def build_tram_network(stopfile, linefile): outdict = {"stops": build_tram_stops(stopfile), "lines": build_tram_lines(linefile)[0], "times": build_tram_lines(linefile)[1]} + with open("labs/data/tramnetwork.json", "w") as file: json.dump(outdict, file) build_tram_network(data, lines) def lines_via_stop(linedict, stop): - pass + + + return [key for key in linedict if stop in linedict[key]] + +#print(lines_via_stop(build_tram_lines(lines)[0], "Chalmers")) def lines_between_stops(linedict, stop1, stop2): - pass + return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] +#print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): - pass - + + + if linedict[str(line)].index(stop1) < linedict[str(line)].index(stop2): + index_1 = linedict[str(line)].index(stop1) + index_2 = linedict[str(line)].index(stop2) + 1 + else: + index_1 = linedict[str(line)].index(stop2) + index_2 = linedict[str(line)].index(stop1) + 1 + + stoplist = linedict[str(line)][index_1:index_2] + + time = 0 + for i in range(len(stoplist) - 1): + if stoplist[i+1] in timedict[stoplist[i]]: + time += timedict[stoplist[i]][stoplist[i+1]] + + elif stoplist[i] in timedict[stoplist[i+1]]: + time += timedict[stoplist[i+1]][stoplist[i]] + + return str(time) + + + +#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 8, "Ullevi Norra", "Chalmers")) def distance_between_stops(stopdict, stop1, stop2): + loc_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) + loc_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) - - loc1, loc2 = [float(item)for item in list(stopdict[stop1].values())], [float(item)for item in list(stopdict[stop2].values())] - - result = hs.haversine(loc1,loc2,unit=Unit.KILOMETERS) + return haversine(loc_1, loc_2) - print(f'Distance between stops {round(result, 1)} km') - - return result - -distance_between_stops(build_tram_stops(data), "Gamlestads Torg", "Hammarkullen") -#https://www.askpython.com/python/examples/find-distance-between-two-geo-locations +#print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) def dialogue(tramfile): - pass \ No newline at end of file + with open(tramfile, "r") as file: + tramdict = json.load(file) + print("Choose option:\n via \n between and from to \n distance from to \n quit") + user_input = input("").split() + print(" ".join(user_input[:1])) + + if user_input[0] == "via": + print(user_input[1:]) + + if user_input[0] == "between": + pass + + if user_input[0] == "time": + pass + + if user_input[0] == "distance": + pass + + if user_input[0] == "quit": + pass + + + + +dialogue("labs/data/tramnetwork.json") \ No newline at end of file From ace36ea942d78ab5a71c7b76a47c4e47fde1591e Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Wed, 20 Nov 2024 10:59:41 +0100 Subject: [PATCH 47/54] sista test --- labs/lab1/test_tramdata.py | 10 ++++++---- labs/lab1/tramdata.py | 34 +++++++++++++++++----------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 085a5fc..d464333 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -46,11 +46,13 @@ def test_distance_feasible(self): print(f'{x} passed test ouf of {3}') def test_times_beetween_stops(self): - pass - test3 = {"Tingvallsvägen": {"Kaggeledstorget": 2}} - - print(self.timedict) + test3 = [1, 16, 28] + x = 0 + if time_between_stops(self.linedict,self.timedict, 8, "Ullevi Norra", "Chalmers") == time_between_stops(self.linedict,self.timedict, 8, "Chalmers", "Ullevi Norra"): + x+=1 + print(f'{x} passed test ouf of {3}') + if __name__ == '__main': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 17fb0aa..f8d77d2 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -98,29 +98,29 @@ def distance_between_stops(stopdict, stop1, stop2): #print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) -def dialogue(tramfile): - with open(tramfile, "r") as file: - tramdict = json.load(file) - print("Choose option:\n via \n between and from to \n distance from to \n quit") - user_input = input("").split() - print(" ".join(user_input[:1])) +# def dialogue(tramfile): +# with open(tramfile, "r") as file: +# tramdict = json.load(file) +# print("Choose option:\n via \n between and from to \n distance from to \n quit") +# user_input = input("").split() +# print(" ".join(user_input[:1])) - if user_input[0] == "via": - print(user_input[1:]) +# if user_input[0] == "via": +# print(user_input[1:]) - if user_input[0] == "between": - pass +# if user_input[0] == "between": +# pass - if user_input[0] == "time": - pass +# if user_input[0] == "time": +# pass - if user_input[0] == "distance": - pass +# if user_input[0] == "distance": +# pass - if user_input[0] == "quit": - pass +# if user_input[0] == "quit": +# pass -dialogue("labs/data/tramnetwork.json") \ No newline at end of file +#dialogue("labs/data/tramnetwork.json") \ No newline at end of file From fb4dbac8e8f15e88cb7045428a81f42d011de4f4 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 11:02:07 +0100 Subject: [PATCH 48/54] Tillagda tester och funktioner --- labs/lab1/tramdata.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index e73cf46..14d4dd2 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -98,19 +98,25 @@ def distance_between_stops(stopdict, stop1, stop2): #print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) - def dialogue(tramfile): with open(tramfile, "r") as file: tramdict = json.load(file) print("Choose option:\n via \n between and from to \n distance from to \n quit") user_input = input("").split() - print(" ".join(user_input[:1])) + print(" ".join(user_input[1:])) if user_input[0] == "via": - print(user_input[1:]) + print(lines_via_stop(tramdict["lines"], " ".join(user_input[1:]))) + elif user_input[0] == "via": + print(lines_via_stop(tramdict["lines"], user_input[1])) if user_input[0] == "between": - pass + if user_input[2] == "and" and len(user_input) == 5: + + print(lines_between_stops(tramdict["lines"], user_input[1], " ".join(user_input[3:]))) + elif len(user_input) == 5: + + print(lines_between_stops(tramdict["lines"], " ".join(user_input[1:3]), user_input[4])) if user_input[0] == "time": pass From 1cb4d44267f8dcff01a3d11ad700380ad8140241 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Wed, 20 Nov 2024 11:23:58 +0100 Subject: [PATCH 49/54] alla 4 tester klara --- labs/lab1/test_tramdata.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index d464333..499aae9 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -46,13 +46,13 @@ def test_distance_feasible(self): print(f'{x} passed test ouf of {3}') def test_times_beetween_stops(self): - test3 = [1, 16, 28] x = 0 if time_between_stops(self.linedict,self.timedict, 8, "Ullevi Norra", "Chalmers") == time_between_stops(self.linedict,self.timedict, 8, "Chalmers", "Ullevi Norra"): x+=1 - print(f'{x} passed test ouf of {3}') + if time_between_stops(self.linedict,self.timedict, 1, "Östra Sjukhuset", "Opaltorget") == time_between_stops(self.linedict,self.timedict, 1, "Opaltorget", "Östra Sjukhuset"): + x+=1 + print(f'{x} passed test ouf of {2}') - -if __name__ == '__main': +if __name__ == '__main__': unittest.main() From 641d57bc31b52d1048f727187adbbae7e3a39b63 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 18:26:04 +0100 Subject: [PATCH 50/54] dialogue tillagd --- labs/lab1/test_tramdata.py | 2 +- labs/lab1/tramdata.py | 87 +++++++++++++++++++++++++++----------- 2 files changed, 63 insertions(+), 26 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 085a5fc..76b9b45 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -51,6 +51,6 @@ def test_times_beetween_stops(self): print(self.timedict) -if __name__ == '__main': +if __name__ == '__main__': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 14d4dd2..543c3c0 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -56,7 +56,6 @@ def build_tram_network(stopfile, linefile): def lines_via_stop(linedict, stop): - return [key for key in linedict if stop in linedict[key]] #print(lines_via_stop(build_tram_lines(lines)[0], "Chalmers")) @@ -64,7 +63,7 @@ def lines_via_stop(linedict, stop): def lines_between_stops(linedict, stop1, stop2): return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] -#print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) +#print(lines_between_stops(build_tram_lines(lines)[0], "Korsvägen", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): @@ -85,11 +84,11 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): elif stoplist[i] in timedict[stoplist[i+1]]: time += timedict[stoplist[i+1]][stoplist[i]] - return str(time) + return time -#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 8, "Ullevi Norra", "Chalmers")) +#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 3, "Stockholmsgatan", "Järntorget")) def distance_between_stops(stopdict, stop1, stop2): loc_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) loc_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) @@ -98,36 +97,74 @@ def distance_between_stops(stopdict, stop1, stop2): #print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) + + +def answer_query(tramdict, query): + + if query[0] == "Via" and len(query) == 3: + return lines_via_stop(tramdict["lines"], " ".join(query[1:])) + elif query[0] == "Via": + return lines_via_stop(tramdict["lines"], query[1]) + + if query[0] == "Between": + if query[2] == "and" and len(query) == 5: + print(str(query[1]).title()) + return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) + elif len(query) == 5: + return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) + else: + return lines_between_stops(tramdict["lines"], query[1], query[3]) + + if query[0] == "Time": + if len(query) == 9: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), " ".join(query[7:])) + elif len(query) == 8 and query[5] == "To": + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], " ".join(query[6:])) + elif len(query) == 8: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), query[7]) + elif len(query) == 7: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], query[6]) + + if query[0] == "Distance": + if len(query) == 7: + return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), " ".join(query[5:])) + elif len(query) == 6 and query[3] == "To": + return distance_between_stops(tramdict["stops"], query[2], " ".join(query[4:])) + elif len(query) == 6: + return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), query[5]) + elif len(query) == 5: + return distance_between_stops(tramdict["stops"], query[2], query[4]) + + + + return "sorry, try again" + + def dialogue(tramfile): with open(tramfile, "r") as file: tramdict = json.load(file) - print("Choose option:\n via \n between and from to \n distance from to \n quit") - user_input = input("").split() - print(" ".join(user_input[1:])) - if user_input[0] == "via": - print(lines_via_stop(tramdict["lines"], " ".join(user_input[1:]))) - elif user_input[0] == "via": - print(lines_via_stop(tramdict["lines"], user_input[1])) - if user_input[0] == "between": - if user_input[2] == "and" and len(user_input) == 5: - - print(lines_between_stops(tramdict["lines"], user_input[1], " ".join(user_input[3:]))) - elif len(user_input) == 5: + while True: + print("Choose option:\n via \n between and from to \n distance from to \n quit") + query = input("").lower().title().split() + if query[0] == "Quit": + break + answer = print(answer_query(tramdict, query)) + + if answer == "sorry, try again": + print(answer) + + - print(lines_between_stops(tramdict["lines"], " ".join(user_input[1:3]), user_input[4])) - - if user_input[0] == "time": - pass + + - if user_input[0] == "distance": - pass +dialogue("labs/data/tramnetwork.json") - if user_input[0] == "quit": - pass + -dialogue("labs/data/tramnetwork.json") \ No newline at end of file +#dialogue("labs/data/tramnetwork.json") \ No newline at end of file From 1ff3ff3bb4909d1077501abc76beade51f98a244 Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Wed, 20 Nov 2024 18:27:49 +0100 Subject: [PATCH 51/54] updaterat --- labs/lab1/tramdata.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 543c3c0..8eeec1e 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -58,12 +58,11 @@ def lines_via_stop(linedict, stop): return [key for key in linedict if stop in linedict[key]] -#print(lines_via_stop(build_tram_lines(lines)[0], "Chalmers")) def lines_between_stops(linedict, stop1, stop2): return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] -#print(lines_between_stops(build_tram_lines(lines)[0], "Korsvägen", "Chalmers")) + def time_between_stops(linedict, timedict, line, stop1, stop2): @@ -87,17 +86,12 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): return time - -#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 3, "Stockholmsgatan", "Järntorget")) def distance_between_stops(stopdict, stop1, stop2): loc_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) loc_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) return haversine(loc_1, loc_2) -#print(distance_between_stops(build_tram_stops(data), "Angered Centrum", "Saltholmen")) - - def answer_query(tramdict, query): @@ -135,8 +129,6 @@ def answer_query(tramdict, query): elif len(query) == 5: return distance_between_stops(tramdict["stops"], query[2], query[4]) - - return "sorry, try again" @@ -165,6 +157,3 @@ def dialogue(tramfile): - - -#dialogue("labs/data/tramnetwork.json") \ No newline at end of file From cea1dfc399cc7ea0ede7ae2dadff55cbe47e3fae Mon Sep 17 00:00:00 2001 From: filiplarsen231 Date: Fri, 22 Nov 2024 10:49:54 +0100 Subject: [PATCH 52/54] dialogue tillagd --- labs/lab1/test_tramdata.py | 10 ++++---- labs/lab1/tramdata.py | 49 +++++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 76b9b45..499aae9 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -46,10 +46,12 @@ def test_distance_feasible(self): print(f'{x} passed test ouf of {3}') def test_times_beetween_stops(self): - pass - test3 = {"Tingvallsvägen": {"Kaggeledstorget": 2}} - - print(self.timedict) + x = 0 + if time_between_stops(self.linedict,self.timedict, 8, "Ullevi Norra", "Chalmers") == time_between_stops(self.linedict,self.timedict, 8, "Chalmers", "Ullevi Norra"): + x+=1 + if time_between_stops(self.linedict,self.timedict, 1, "Östra Sjukhuset", "Opaltorget") == time_between_stops(self.linedict,self.timedict, 1, "Opaltorget", "Östra Sjukhuset"): + x+=1 + print(f'{x} passed test ouf of {2}') if __name__ == '__main__': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 8eeec1e..86e9fcc 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -7,6 +7,8 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) +with open("labs/data/tramnetwork.json", "r") as jsonfile: + tramdict = json.load(jsonfile) with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: @@ -63,6 +65,8 @@ def lines_between_stops(linedict, stop1, stop2): return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] + + def time_between_stops(linedict, timedict, line, stop1, stop2): @@ -95,18 +99,19 @@ def distance_between_stops(stopdict, stop1, stop2): def answer_query(tramdict, query): - if query[0] == "Via" and len(query) == 3: - return lines_via_stop(tramdict["lines"], " ".join(query[1:])) - elif query[0] == "Via": - return lines_via_stop(tramdict["lines"], query[1]) + if query[0] == "Via": + if len(query) == 3: + return lines_via_stop(dict(tramdict["lines"]), " ".join(query[1:])) + elif query[0] == "Via": + return lines_via_stop(tramdict["lines"], query[1]) if query[0] == "Between": - if query[2] == "and" and len(query) == 5: - print(str(query[1]).title()) - return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) - elif len(query) == 5: - return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) - else: + if len(query) == 5: + if query[3] == "And": + return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) + elif query[2] == "And": + return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) + elif len(query) == 4: return lines_between_stops(tramdict["lines"], query[1], query[3]) if query[0] == "Time": @@ -138,14 +143,24 @@ def dialogue(tramfile): while True: - print("Choose option:\n via \n between and from to \n distance from to \n quit") - query = input("").lower().title().split() - if query[0] == "Quit": - break - answer = print(answer_query(tramdict, query)) + try: + print("Choose option:\n via \n between and from to \n distance from to \n quit") + query = input("").lower().title().split() + if query[0] == "Quit": + break + answer = answer_query(tramdict, query) + + if answer: + print(answer) + print(bool(answer)) + else: + print("unknown arguments") + print(bool(answer)) + except: + print("sorry, try that again") + + - if answer == "sorry, try again": - print(answer) From 37da60eb2b8bfa7b41c54962f1879c2b957bf2da Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Fri, 22 Nov 2024 13:51:14 +0100 Subject: [PATCH 53/54] 123 --- labs/lab1/test_tramdata.py | 44 ++++++------- labs/lab1/tramdata.py | 130 ++++++++++++++++--------------------- 2 files changed, 75 insertions(+), 99 deletions(-) diff --git a/labs/lab1/test_tramdata.py b/labs/lab1/test_tramdata.py index 499aae9..c2e8f3b 100644 --- a/labs/lab1/test_tramdata.py +++ b/labs/lab1/test_tramdata.py @@ -11,6 +11,7 @@ def setUp(self): self.stopdict = tramdict['stops'] self.linedict = tramdict['lines'] self.timedict = tramdict['times'] + self.tramdict = tramdict def teststopsexist(self): stopset = {stop for line in self.linedict for stop in self.linedict[line]} for stop in stopset: @@ -18,40 +19,35 @@ def teststopsexist(self): def test_all_stops_included(self): test1 = ['1','2','3','4','5','6','7','8','9','10','11','13'] - x = 0 for i in range(len(test1)): - if test1[i] in self.linedict: - x+=1 - - print(f'{x} passed test out of {len(test1)} passed') + self.assertIn( test1[i], self.linedict.keys(), msg = "didnt work") def test_stops_in_line(self): test2 = ["Ullevi Norra", "Chalmers", "Angered Centrum", "Saltholmen", "Hagen", "Rambergsvallen"] - x =0 for i in range(len(test2)): - for k in self.linedict.values(): - if test2[i] in k: - x+=1 - break - print(f'{x} passed test out of {len(test2)} passed') + self.assertIn(test2[i], [item for sublist in list(self.linedict.values()) for item in sublist], msg = "didnt work") def test_distance_feasible(self): - x = 0 - if distance_between_stops(self.stopdict, "Ullevi Norra", "Chalmers") < 20: - x+=1 - if distance_between_stops(self.stopdict, "Angered Centrum", "Saltholmen") < 20: - x+=1 - if distance_between_stops(self.stopdict, "Hagen", "Rambergsvallen") < 20: - x+=1 - print(f'{x} passed test ouf of {3}') + + for stop1 in self.stopdict: + for stop2 in self.stopdict: + self.assertLess(distance_between_stops(self.stopdict, stop1, stop2), 20, msg = "didnt work") + def test_times_beetween_stops(self): + + for line in self.linedict: + for stop1 in self.linedict[line]: + for stop2 in self.linedict[line]: + self.assertEqual(time_between_stops(self.linedict, self.timedict, line, stop1, stop2),time_between_stops(self.linedict, self.timedict, line, stop2, stop1) , msg = "didnt work") + + def test_query(self): + test3 = ["between norrköping and linköping", "via chalmers", "between chalmers and ullevi norra", "time with 8 from chalmers to ullevi", "distance from Hagen to Rambergsvallen", "quit", "hejehjehejehje"] x = 0 - if time_between_stops(self.linedict,self.timedict, 8, "Ullevi Norra", "Chalmers") == time_between_stops(self.linedict,self.timedict, 8, "Chalmers", "Ullevi Norra"): - x+=1 - if time_between_stops(self.linedict,self.timedict, 1, "Östra Sjukhuset", "Opaltorget") == time_between_stops(self.linedict,self.timedict, 1, "Opaltorget", "Östra Sjukhuset"): - x+=1 - print(f'{x} passed test ouf of {2}') + for i in test3: + if answer_query(self.tramdict, i) == str or int or list or float: + x+=1 + print(f'query {x} passed test ouf of {len(test3)}') if __name__ == '__main__': unittest.main() diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index c22924d..5a330f0 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -6,9 +6,6 @@ with open(TRAM_STOP_FILE, 'r') as fromFile: data = json.load(fromFile) -with open("labs/data/tramnetwork.json", "r") as jsonfile: - tramdict = json.load(jsonfile) - with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: lines = file.read().replace(":","").strip().split("\n\n") @@ -64,9 +61,6 @@ def lines_between_stops(linedict, stop1, stop2): return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] - - - return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] #print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): @@ -90,20 +84,6 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): return time - - stoplist = linedict[str(line)][index_1:index_2] - - time = 0 - for i in range(len(stoplist) - 1): - if stoplist[i+1] in timedict[stoplist[i]]: - time += timedict[stoplist[i]][stoplist[i+1]] - - elif stoplist[i] in timedict[stoplist[i+1]]: - time += timedict[stoplist[i+1]][stoplist[i]] - - return str(time) - - #print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 8, "Ullevi Norra", "Chalmers")) def distance_between_stops(stopdict, stop1, stop2): @@ -114,44 +94,49 @@ def distance_between_stops(stopdict, stop1, stop2): def answer_query(tramdict, query): - - if query[0] == "Via": - if len(query) == 3: - return lines_via_stop(dict(tramdict["lines"]), " ".join(query[1:])) - elif query[0] == "Via": - return lines_via_stop(tramdict["lines"], query[1]) - - if query[0] == "Between": - if len(query) == 5: - if query[3] == "And": - return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) - elif query[2] == "And": - return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) - elif len(query) == 4: - return lines_between_stops(tramdict["lines"], query[1], query[3]) - - if query[0] == "Time": - if len(query) == 9: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), " ".join(query[7:])) - elif len(query) == 8 and query[5] == "To": - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], " ".join(query[6:])) - elif len(query) == 8: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), query[7]) - elif len(query) == 7: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], query[6]) + try: + query = query.lower().title().split() + if query[0] == "Via": + if len(query) == 3: + return lines_via_stop(dict(tramdict["lines"]), " ".join(query[1:])) + elif query[0] == "Via": + return lines_via_stop(tramdict["lines"], query[1]) + + if query[0] == "Between": + if len(query) == 5: + if query[3] == "And": + return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) + elif query[2] == "And": + return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) + elif len(query) == 4: + return lines_between_stops(tramdict["lines"], query[1], query[3]) - if query[0] == "Distance": - if len(query) == 7: - return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), " ".join(query[5:])) - elif len(query) == 6 and query[3] == "To": - return distance_between_stops(tramdict["stops"], query[2], " ".join(query[4:])) - elif len(query) == 6: - return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), query[5]) - elif len(query) == 5: - return distance_between_stops(tramdict["stops"], query[2], query[4]) + if query[0] == "Time": + if len(query) == 9: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), " ".join(query[7:])) + elif len(query) == 8 and query[5] == "To": + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], " ".join(query[6:])) + elif len(query) == 8: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), query[7]) + elif len(query) == 7: + return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], query[6]) - return "sorry, try again" - + if query[0] == "Distance": + if len(query) == 7: + return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), " ".join(query[5:])) + elif len(query) == 6 and query[3] == "To": + return distance_between_stops(tramdict["stops"], query[2], " ".join(query[4:])) + elif len(query) == 6: + return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), query[5]) + elif len(query) == 5: + return distance_between_stops(tramdict["stops"], query[2], query[4]) + + if query[0] == "Quit": + return "quit" + + return "sorry, try again" + except: + return "sorry, try that again" def dialogue(tramfile): with open(tramfile, "r") as file: @@ -159,31 +144,26 @@ def dialogue(tramfile): while True: - try: - print("Choose option:\n via \n between and from to \n distance from to \n quit") - query = input("").lower().title().split() - if query[0] == "Quit": - break - answer = answer_query(tramdict, query) - - if answer: - print(answer) - print(bool(answer)) - else: - print("unknown arguments") - print(bool(answer)) - except: - print("sorry, try that again") + print("Choose option:\n via \n between and from to \n distance from to \n quit") + query = input("") + answer = answer_query(tramdict, query) + if answer == "quit": + break + if answer: + print(answer) + else: + print("unknown arguments") + - - + +#dialogue("labs/data/tramnetwork.json") - -dialogue("labs/data/tramnetwork.json") + + From 5fe054d05fb79ad86b8d4140545eac0d150e8ff6 Mon Sep 17 00:00:00 2001 From: viktorwaller Date: Fri, 22 Nov 2024 14:48:00 +0100 Subject: [PATCH 54/54] Update tramdata.py --- labs/lab1/tramdata.py | 149 ++++++++++++++++++------------------------ 1 file changed, 64 insertions(+), 85 deletions(-) diff --git a/labs/lab1/tramdata.py b/labs/lab1/tramdata.py index 5a330f0..e91ae59 100644 --- a/labs/lab1/tramdata.py +++ b/labs/lab1/tramdata.py @@ -1,26 +1,30 @@ +import sys import json -from pprint import pprint from haversine import haversine +from pprint import pprint -TRAM_STOP_FILE = "labs/data/tramstops.json" -with open(TRAM_STOP_FILE, 'r') as fromFile: - data = json.load(fromFile) -with open ("labs/data/tramlines.txt", "r", encoding= "UTF-8") as file: - lines = file.read().replace(":","").strip().split("\n\n") - lines = [line.split("\n") for line in lines] - +STOP_FILE = './data/tramstops.json' + +LINE_FILE = './data/tramlines.txt' + +TRAM_FILE = './tramnetwork.json' def build_tram_stops(jsonobject): + with open(STOP_FILE, 'r') as fromFile: + jsonobject = json.load(fromFile) + stopdict = {x: {"lat":jsonobject[x]['position'][0], "lon":jsonobject[x]['position'][1]} for x in jsonobject} return stopdict - def build_tram_lines(lines): + with open (LINE_FILE, "r", encoding= "UTF-8") as file: + lines = file.read().replace(":","").strip().split("\n\n") + lines = [line.split("\n") for line in lines] linedict = {} timedict = {} @@ -41,30 +45,27 @@ def build_tram_lines(lines): timedict[name][next_name] = time_diff values.append(next_name) linedict[key] = values - return (linedict, timedict) + def build_tram_network(stopfile, linefile): + outdict = {"stops": build_tram_stops(stopfile), "lines": build_tram_lines(linefile)[0], "times": build_tram_lines(linefile)[1]} - - with open("labs/data/tramnetwork.json", "w") as file: + with open("./tramnetwork.json", "w") as file: json.dump(outdict, file) -build_tram_network(data, lines) + def lines_via_stop(linedict, stop): return [key for key in linedict if stop in linedict[key]] - def lines_between_stops(linedict, stop1, stop2): - + return [key for key in linedict if stop1 in linedict[key] and stop2 in linedict[key]] -#print(lines_between_stops(build_tram_lines(lines)[0], "Ullevi Norra", "Chalmers")) def time_between_stops(linedict, timedict, line, stop1, stop2): - - + if linedict[str(line)].index(stop1) < linedict[str(line)].index(stop2): index_1 = linedict[str(line)].index(stop1) index_2 = linedict[str(line)].index(stop2) + 1 @@ -83,88 +84,66 @@ def time_between_stops(linedict, timedict, line, stop1, stop2): time += timedict[stoplist[i+1]][stoplist[i]] return time - - -#print(time_between_stops(build_tram_lines(lines)[0],build_tram_lines(lines)[1], 8, "Ullevi Norra", "Chalmers")) + def distance_between_stops(stopdict, stop1, stop2): + loc_1 = (float(stopdict[stop1]["lat"]),float(stopdict[stop1]["lon"])) loc_2 = (float(stopdict[stop2]["lat"]),float(stopdict[stop2]["lon"])) return haversine(loc_1, loc_2) - def answer_query(tramdict, query): - try: - query = query.lower().title().split() - if query[0] == "Via": - if len(query) == 3: - return lines_via_stop(dict(tramdict["lines"]), " ".join(query[1:])) - elif query[0] == "Via": - return lines_via_stop(tramdict["lines"], query[1]) - - if query[0] == "Between": - if len(query) == 5: - if query[3] == "And": - return lines_between_stops(tramdict["lines"], " ".join(query[1:3]), query[4]) - elif query[2] == "And": - return lines_between_stops(tramdict["lines"], query[1], " ".join(query[3:])) - elif len(query) == 4: - return lines_between_stops(tramdict["lines"], query[1], query[3]) - - if query[0] == "Time": - if len(query) == 9: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), " ".join(query[7:])) - elif len(query) == 8 and query[5] == "To": - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], " ".join(query[6:])) - elif len(query) == 8: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), " ".join(query[4:6]), query[7]) - elif len(query) == 7: - return time_between_stops(tramdict["lines"], tramdict["times"], int(query[2]), query[4], query[6]) - - if query[0] == "Distance": - if len(query) == 7: - return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), " ".join(query[5:])) - elif len(query) == 6 and query[3] == "To": - return distance_between_stops(tramdict["stops"], query[2], " ".join(query[4:])) - elif len(query) == 6: - return distance_between_stops(tramdict["stops"], " ".join(query[2:4]), query[5]) - elif len(query) == 5: - return distance_between_stops(tramdict["stops"], query[2], query[4]) + + query = query.lower().title().split() + + if query[0] == "Via": + stop = " ".join(query[query.index("Via") + 1:]) + return lines_via_stop(tramdict["lines"], stop) - if query[0] == "Quit": - return "quit" + if query[0] == "Between": + stop1 = " ".join(query[query.index("Between") + 1: query.index("And")]) + stop2 = " ".join(query[query.index("And") + 1:]) + + return lines_between_stops(tramdict["lines"], stop1, stop2) + + if query[0] == "Time": + line = query[2] + stop1 = stop1 = " ".join(query[query.index("From") + 1: query.index("To")]) + stop2 = " ".join(query[query.index("To") + 1:]) + return time_between_stops(tramdict["lines"], tramdict["times"], int(line), stop1, stop2) - return "sorry, try again" - except: - return "sorry, try that again" + if query[0] == "Distance": + + stop1 = " ".join(query[query.index("From") + 1: query.index("To")]) + stop2 = " ".join(query[query.index("To") + 1:]) + return distance_between_stops(tramdict["stops"], stop1, stop2) + + return query -def dialogue(tramfile): +def dialogue(tramfile=TRAM_FILE): + with open(tramfile, "r") as file: tramdict = json.load(file) - while True: - print("Choose option:\n via \n between and from to \n distance from to \n quit") - query = input("") - answer = answer_query(tramdict, query) - if answer == "quit": - break - if answer: - print(answer) - else: - print("unknown arguments") - - - - -#dialogue("labs/data/tramnetwork.json") - + try: + print("Choose option:\n via \n between and from to \n distance from to \n quit") + query = input("") - - + answer = answer_query(tramdict, query) + if answer[0] == "Quit": + break + if answer: + print(answer) + else: + print("unknown arguments") + except: + print("sorry, try that again") - - - +if __name__ == '__main__': + if sys.argv[1:] == ['init']: + build_tram_network(STOP_FILE,LINE_FILE) + else: + dialogue()