8. API#
import pandas as pd
import os
import urllib.request, json, csv
import numpy as np
from tqdm import tqdm_notebook as tqdm
# For sending GET requests from the API
import requests
# For saving access tokens and for file management when creating and adding to the dataset
import os
# For dealing with json responses we receive from the API
import json
# For displaying the data after
import pandas as pd
# For saving the response data in CSV format
import csv
# For parsing the dates received from twitter in readable formats
import datetime
import dateutil.parser
import unicodedata
#To add wait time between requests
import time
import requests
8.1. What is an API?#
API is the acronym for Application Programming Interface, which is a software intermediary that allows two applications to talk to each other. Each time you use an app like Facebook, send an instant message, or check the weather on your phone, you’re using an API.
8.2. What is geocoding?#
This material is based on the Google Maps API LINK documentation.
1.Geocoding is the process of converting addresses such as “Avenida Alfonso Ugarte 1227, Cercado de Lima 15001” Site, in geographic coordinates (such as latitude -12.0552362536 and longitude -77.0412042), which you can use to place markers on a map or position the map.
2.Inverse Geocoding is the process of converting geographic coordinates to a human-readable address.
The Geocoding API provides a direct way to access these services via an HTTP request. The following example uses the encoding service via the Maps JavaScript API to demonstrate basic functionality. video to understand what HTTP encrytion refers to.
8.3. Geocoding API request format#
https://maps.googleapis.com/maps/api/geocode/outputFormat?parameters
Where outputFormat can take the following values:
json (recommended) indicates output in JavaScript Object Notation (JSON); or
xml indicates output in XML
Geocoding (latitude / longitude lookup). Parameters required to make the request:#
address
key: You have to register, $ 200 free entry
language
region: for countries using ISO 3166-1
8.3.1. Example#
Google: _The geocoder makes every effort to provide a postal address that is readable by both the user and the locals. To achieve that goal, returns street addresses in the local language, transcribed to a readable script by the user if necessary, observing the preferred language. All other directions they are returned in the preferred language. All components of the address are returned in the same language, which is chosen from the first component.
requests.get( "https://maps.googleapis.com/maps/api/geocode/outputFormat?parameters" )
<Response [404]>
re1 = requests.get(
"https://maps.googleapis.com/maps/api/geocode/json?address=universidad+catolica+pucp&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM&language=es®ion=pe")
re1
<Response [200]>
re1
<Response [200]>
re1.json()
Show code cell output
{'error_message': 'The provided API key is expired. ',
'results': [],
'status': 'REQUEST_DENIED'}
data_json = re1.json()
data_json
Show code cell output
{'error_message': 'The provided API key is expired. ',
'results': [],
'status': 'REQUEST_DENIED'}
type(data_json)
dict
data_json["results"][0]["geometry"]["location"]["lat"]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Cell In[8], line 1
----> 1 data_json["results"][0]["geometry"]["location"]["lat"]
IndexError: list index out of range
data_json["results"][0]["geometry"]["location"]["lat"]
-12.0689502
data_json["results"][0]["geometry"]["location"]["lng"]
-77.0780608
data_json["results"][0]["geometry"]["location"]["lat"]
data_json["results"][0]["geometry"]["location"]["lng"]
-122.0841877
lat = data_json[ 'results' ][ 0 ][ 'geometry' ][ 'location' ][ 'lat' ]
lng = data_json[ 'results' ][ 0 ][ 'geometry' ][ 'location' ][ 'lng' ]
print(lat)
print(lng)
37.4223878
-122.0841877
8.3.2. Example using Swiss Data#
Path 1 - Using Geocode & Numpy#
# with open( r'../_data/Base_assignment5.csv' , encoding="utf8", errors='ignore') as csvfile:
# readCSV = csv.reader(csvfile, delimiter=',')
# town = []
# for row in readCSV:
# print(', '.join(row))
with open( r'../_data/ID_Routes_firms.csv' , encoding="utf8", errors='ignore') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
town = []
for row in readCSV:
gem = row[6]
town.append(gem)
print(', '.join(row))
Show code cell output
1401, 261, 699, 1, Alpnach, Obwalden, Zürich, Zürich, Alpnach,Obwalden, Zürich,Zürich, 46.9380412,8.2701754, 47.3768866,8.541694, 1
1507, 261, 712, 1, Hergiswil (NW), Nidwalden, Zürich, Zürich, Hergiswil (NW),Nidwalden, Zürich,Zürich, 46.9905821,8.3083735, 47.3768866,8.541694, 2
3943, 261, 1347, 1, Mastrils, Graubünden, Zürich, Zürich, Mastrils,Graubünden, Zürich,Zürich, 46.96628,9.54229, 47.3768866,8.541694, 3
5236, 261, 1802, 1, Collina d'Oro, Tessin, Zürich, Zürich, Collina d'Oro,Tessin, Zürich,Zürich, 45.9821607,8.917103, 47.3768866,8.541694, 4
5192, 261, 1837, 1, Lugano, Tessin, Zürich, Zürich, Lugano,Tessin, Zürich,Zürich, 46.0036778,8.951052, 47.3768866,8.541694, 5
5606, 261, 2119, 1, Lutry, Waadt, Zürich, Zürich, Lutry,Waadt, Zürich,Zürich, 46.5088803,6.6827638, 47.3768866,8.541694, 6
5611, 261, 2228, 1, Savigny, Waadt, Zürich, Zürich, Savigny,Waadt, Zürich,Zürich, 46.5383864,6.7321079, 47.3768866,8.541694, 7
5890, 261, 2258, 1, Vevey, Waadt, Zürich, Zürich, Vevey,Waadt, Zürich,Zürich, 46.4628333,6.8419192, 47.3768866,8.541694, 8
6645, 261, 2529, 1, Veyrier, Genf, Zürich, Zürich, Veyrier,Genf, Zürich,Zürich, 46.1660489,6.178397, 47.3768866,8.541694, 9
2, 112, 6, 21, Affoltern am Albis, Zürich, Bubikon, Zürich, Affoltern am Albis,Zürich, Bubikon,Zürich, 47.2795081,8.4540083, 47.2682174,8.8191356, 10
9, 25, 91, 25, Mettmenstetten, Zürich, Dachsen, Zürich, Mettmenstetten,Zürich, Dachsen,Zürich, 47.2437032,8.4628831, 47.6660626,8.6160024, 11
2903, 25, 1142, 25, Löhningen, Schaffhausen, Dachsen, Zürich, Löhningen,Schaffhausen, Dachsen,Zürich, 47.7003,8.55296, 47.6660626,8.6160024, 12
2937, 25, 1144, 25, Neuhausen am Rheinfall, Schaffhausen, Dachsen, Zürich, Neuhausen am Rheinfall,Schaffhausen, Dachsen,Zürich, 47.6837423,8.6126098, 47.6660626,8.6160024, 13
261, 85, 1, 28, Zürich, Zürich, Dänikon, Zürich, Zürich,Zürich, Dänikon,Zürich, 47.3768866,8.541694, 47.4458065,8.4051088, 14
261, 243, 1, 31, Zürich, Zürich, Dietikon, Zürich, Zürich,Zürich, Dietikon,Zürich, 47.3768866,8.541694, 47.4053885,8.39977, 15
5586, 54, 1914, 32, Lausanne, Waadt, Dietlikon, Zürich, Lausanne,Waadt, Dietlikon,Zürich, 46.5196535,6.6322734, 47.4251986,8.6162283, 16
261, 217, 1, 39, Zürich, Zürich, Elgg, Zürich, Zürich,Zürich, Elgg,Zürich, 47.3768866,8.541694, 47.4910721,8.8665461, 17
217, 217, 39, 39, Elgg, Zürich, Elgg, Zürich, Elgg,Zürich, Elgg,Zürich, 47.4910721,8.8665461, 47.4910721,8.8665461, 18
261, 27, 1, 46, Zürich, Zürich, Feuerthalen, Zürich, Zürich,Zürich, Feuerthalen,Zürich, 47.3768866,8.541694, 47.6885343,8.6497285, 19
221, 27, 61, 46, Hettlingen, Zürich, Feuerthalen, Zürich, Hettlingen,Zürich, Feuerthalen,Zürich, 47.5470158,8.7087902, 47.6885343,8.6497285, 20
9, 27, 91, 46, Mettmenstetten, Zürich, Feuerthalen, Zürich, Mettmenstetten,Zürich, Feuerthalen,Zürich, 47.2437032,8.4628831, 47.6885343,8.6497285, 21
261, 29, 1, 49, Zürich, Zürich, Flurlingen, Zürich, Zürich,Zürich, Flurlingen,Zürich, 47.3768866,8.541694, 47.685357,8.6294367, 22
221, 29, 61, 49, Hettlingen, Zürich, Flurlingen, Zürich, Hettlingen,Zürich, Flurlingen,Zürich, 47.5470158,8.7087902, 47.685357,8.6294367, 23
9, 29, 91, 49, Mettmenstetten, Zürich, Flurlingen, Zürich, Mettmenstetten,Zürich, Flurlingen,Zürich, 47.2437032,8.4628831, 47.685357,8.6294367, 24
2903, 29, 1142, 49, Löhningen, Schaffhausen, Flurlingen, Zürich, Löhningen,Schaffhausen, Flurlingen,Zürich, 47.7003,8.55296, 47.685357,8.6294367, 25
2937, 29, 1144, 49, Neuhausen am Rheinfall, Schaffhausen, Flurlingen, Zürich, Neuhausen am Rheinfall,Schaffhausen, Flurlingen,Zürich, 47.6837423,8.6126098, 47.685357,8.6294367, 26
57, 57, 50, 50, Freienstein-Teufen, Zürich, Freienstein-Teufen, Zürich, Freienstein-Teufen,Zürich, Freienstein-Teufen,Zürich, 47.5313791,8.5851744, 47.5313791,8.5851744, 27
230, 57, 168, 50, Winterthur, Zürich, Freienstein-Teufen, Zürich, Winterthur,Zürich, Freienstein-Teufen,Zürich, 47.4988196,8.7236889, 47.5313791,8.5851744, 28
216, 220, 33, 56, Dinhard, Zürich, Hagenbuch, Zürich, Dinhard,Zürich, Hagenbuch,Zürich, 47.5551167,8.7695628, 47.5213595,8.8890608, 29
230, 220, 168, 56, Winterthur, Zürich, Hagenbuch, Zürich, Winterthur,Zürich, Hagenbuch,Zürich, 47.4988196,8.7236889, 47.5213595,8.8890608, 30
261, 134, 1, 72, Zürich, Zürich, Hütten, Zürich, Zürich,Zürich, Hütten,Zürich, 47.3768866,8.541694, 47.1755749,8.664826, 31
1322, 134, 674, 72, Freienbach, Schwyz, Hütten, Zürich, Freienbach,Schwyz, Hütten,Zürich, 47.2064107,8.7565933, 47.1755749,8.664826, 32
1323, 134, 697, 72, Wollerau, Schwyz, Hütten, Zürich, Wollerau,Schwyz, Hütten,Zürich, 47.19717,8.71338, 47.1755749,8.664826, 33
1704, 134, 743, 72, Menzingen, Zug, Hütten, Zürich, Menzingen,Zug, Hütten,Zürich, 47.1778831,8.5912483, 47.1755749,8.664826, 34
6297, 134, 2424, 72, Visp, Wallis, Hütten, Zürich, Visp,Wallis, Hütten,Zürich, 46.2947277,7.8821204, 47.1755749,8.664826, 35
261, 87, 1, 73, Zürich, Zürich, Hüttikon, Zürich, Zürich,Zürich, Hüttikon,Zürich, 47.3768866,8.541694, 47.4445367,8.3868213, 36
371, 174, 201, 74, Biel (BE), Bern, Illnau-Effretikon, Zürich, Biel (BE),Bern, Illnau-Effretikon,Zürich, 47.1367785,7.2467909, 47.4272742,8.6903376, 37
5757, 174, 2160, 74, Orbe, Waadt, Illnau-Effretikon, Zürich, Orbe,Waadt, Illnau-Effretikon,Zürich, 46.7293301,6.5323588, 47.4272742,8.6903376, 38
261, 6, 1, 75, Zürich, Zürich, Kappel am Albis, Zürich, Zürich,Zürich, Kappel am Albis,Zürich, 47.3768866,8.541694, 47.2273614,8.5268129, 39
55, 6, 38, 75, Eglisau, Zürich, Kappel am Albis, Zürich, Eglisau,Zürich, Kappel am Albis,Zürich, 47.5762223,8.5219809, 47.2273614,8.5268129, 40
67, 6, 114, 75, Rafz, Zürich, Kappel am Albis, Zürich, Rafz,Zürich, Kappel am Albis,Zürich, 47.6114723,8.5402379, 47.2273614,8.5268129, 41
2703, 6, 1042, 75, Riehen, Basel, Kappel am Albis, Zürich, Riehen,Basel, Kappel am Albis,Zürich, 47.5848274,7.6499111, 47.2273614,8.5268129, 42
5890, 6, 2258, 75, Vevey, Waadt, Kappel am Albis, Zürich, Vevey,Waadt, Kappel am Albis,Zürich, 46.4628333,6.8419192, 47.2273614,8.5268129, 43
5586, 62, 1914, 78, Lausanne, Waadt, Kloten, Zürich, Lausanne,Waadt, Kloten,Zürich, 46.5196535,6.6322734, 47.4495116,8.5821648, 44
1067, 7, 638, 79, Udligenswil, Luzern, Knonau, Zürich, Udligenswil,Luzern, Knonau,Zürich, 47.0905768,8.4016959, 47.22365,8.46278, 45
1708, 7, 747, 79, Steinhausen, Zug, Knonau, Zürich, Steinhausen,Zug, Knonau,Zürich, 47.197193,8.4850173, 47.22365,8.46278, 46
3901, 7, 1267, 79, Chur, Graubünden, Knonau, Zürich, Chur,Graubünden, Knonau,Zürich, 46.8507835,9.5319859, 47.22365,8.46278, 47
4236, 7, 1568, 79, Muri (AG), Aargau, Knonau, Zürich, Muri (AG),Aargau, Knonau,Zürich, 47.2735792,8.3415566, 47.22365,8.46278, 48
9, 34, 91, 83, Mettmenstetten, Zürich, Laufen-Uhwiesen, Zürich, Mettmenstetten,Zürich, Laufen-Uhwiesen,Zürich, 47.2437032,8.4628831, 47.6700922,8.6362791, 49
2903, 34, 1142, 83, Löhningen, Schaffhausen, Laufen-Uhwiesen, Zürich, Löhningen,Schaffhausen, Laufen-Uhwiesen,Zürich, 47.7003,8.55296, 47.6700922,8.6362791, 50
2937, 34, 1144, 83, Neuhausen am Rheinfall, Schaffhausen, Laufen-Uhwiesen, Zürich, Neuhausen am Rheinfall,Schaffhausen, Laufen-Uhwiesen,Zürich, 47.6837423,8.6126098, 47.6700922,8.6362791, 51
3276, 155, 1259, 86, Wartau, Sankt Gallen, Männedorf, Zürich, Wartau,Sankt Gallen, Männedorf,Zürich, 47.09181,9.47739, 47.2574625,8.6946733, 52
3722, 155, 1303, 86, Domat/Ems, Graubünden, Männedorf, Zürich, Domat/Ems,Graubünden, Männedorf,Zürich, 46.8336355,9.4473545, 47.2574625,8.6946733, 53
1067, 8, 638, 88, Udligenswil, Luzern, Maschwanden, Zürich, Udligenswil,Luzern, Maschwanden,Zürich, 47.0905768,8.4016959, 47.2348501,8.425838, 54
1703, 8, 742, 88, Hünenberg, Zug, Maschwanden, Zürich, Hünenberg,Zug, Maschwanden,Zürich, 47.1771936,8.4271865, 47.2348501,8.425838, 55
1708, 8, 747, 88, Steinhausen, Zug, Maschwanden, Zürich, Steinhausen,Zug, Maschwanden,Zürich, 47.197193,8.4850173, 47.2348501,8.425838, 56
3901, 8, 1267, 88, Chur, Graubünden, Maschwanden, Zürich, Chur,Graubünden, Maschwanden,Zürich, 46.8507835,9.5319859, 47.2348501,8.425838, 57
4021, 8, 1455, 88, Baden, Aargau, Maschwanden, Zürich, Baden,Aargau, Maschwanden,Zürich, 47.47288,8.30809, 47.2348501,8.425838, 58
4236, 8, 1568, 88, Muri (AG), Aargau, Maschwanden, Zürich, Muri (AG),Aargau, Maschwanden,Zürich, 47.2735792,8.3415566, 47.2348501,8.425838, 59
5855, 195, 2036, 89, Dully, Waadt, Maur, Zürich, Dully,Waadt, Maur,Zürich, 46.4322894,6.2971136, 47.3404954,8.6696688, 60
4026, 91, 1497, 97, Ennetbaden, Aargau, Niederweningen, Zürich, Ennetbaden,Aargau, Niederweningen,Zürich, 47.4795038,8.3143249, 47.5077974,8.3788864, 61
261, 246, 1, 107, Zürich, Zürich, Oetwil an der Limmat, Zürich, Zürich,Zürich, Oetwil an der Limmat,Zürich, 47.3768866,8.541694, 47.4274949,8.394824, 62
1102, 66, 635, 108, Sempach, Luzern, Opfikon, Zürich, Sempach,Luzern, Opfikon,Zürich, 47.1341481,8.1933634, 47.4346801,8.5671098, 63
3231, 66, 1186, 108, Au (SG), Sankt Gallen, Opfikon, Zürich, Au (SG),Sankt Gallen, Opfikon,Zürich, 47.431055,9.6343097, 47.4346801,8.5671098, 64
261, 67, 1, 114, Zürich, Zürich, Rafz, Zürich, Zürich,Zürich, Rafz,Zürich, 47.3768866,8.541694, 47.6114723,8.5402379, 65
217, 67, 39, 114, Elgg, Zürich, Rafz, Zürich, Elgg,Zürich, Rafz,Zürich, 47.4910721,8.8665461, 47.6114723,8.5402379, 66
261, 138, 1, 118, Zürich, Zürich, Richterswil, Zürich, Zürich,Zürich, Richterswil,Zürich, 47.3768866,8.541694, 47.2053892,8.7070691, 67
6297, 138, 2424, 118, Visp, Wallis, Richterswil, Zürich, Visp,Wallis, Richterswil,Zürich, 46.2947277,7.8821204, 47.2053892,8.7070691, 68
6153, 247, 2364, 128, Monthey, Wallis, Schlieren, Zürich, Monthey,Wallis, Schlieren,Zürich, 46.2521873,6.9469598, 47.3982611,8.448795, 69
261, 140, 1, 130, Zürich, Zürich, Schönenberg (ZH), Zürich, Zürich,Zürich, Schönenberg (ZH),Zürich, 47.3768866,8.541694, 47.1932312,8.644027, 70
1322, 140, 674, 130, Freienbach, Schwyz, Schönenberg (ZH), Zürich, Freienbach,Schwyz, Schönenberg (ZH),Zürich, 47.2064107,8.7565933, 47.1932312,8.644027, 71
1323, 140, 697, 130, Wollerau, Schwyz, Schönenberg (ZH), Zürich, Wollerau,Schwyz, Schönenberg (ZH),Zürich, 47.19717,8.71338, 47.1932312,8.644027, 72
1704, 140, 743, 130, Menzingen, Zug, Schönenberg (ZH), Zürich, Menzingen,Zug, Schönenberg (ZH),Zürich, 47.1778831,8.5912483, 47.1932312,8.644027, 73
197, 197, 131, 131, Schwerzenbach, Zürich, Schwerzenbach, Zürich, Schwerzenbach,Zürich, Schwerzenbach,Zürich, 47.3825634,8.6577503, 47.3825634,8.6577503, 74
230, 158, 168, 135, Winterthur, Zürich, Stäfa, Zürich, Winterthur,Zürich, Stäfa,Zürich, 47.4988196,8.7236889, 47.2392343,8.7351356, 75
2888, 250, 1083, 148, Langenbruck, Basel Land, Urdorf, Zürich, Langenbruck,Basel Land, Urdorf,Zürich, 47.3483495,7.7686817, 47.3867071,8.420693, 76
158, 198, 135, 149, Stäfa, Zürich, Uster, Zürich, Stäfa,Zürich, Uster,Zürich, 47.2392343,8.7351356, 47.3482747,8.7178739, 77
5635, 198, 2043, 149, Ecublens (VD), Waadt, Uster, Zürich, Ecublens (VD),Waadt, Uster,Zürich, 46.5296363,6.5615252, 47.3482747,8.7178739, 78
9, 199, 91, 151, Mettmenstetten, Zürich, Volketswil, Zürich, Mettmenstetten,Zürich, Volketswil,Zürich, 47.2437032,8.4628831, 47.3895115,8.6874496, 79
198, 120, 149, 153, Uster, Zürich, Wald (ZH), Zürich, Uster,Zürich, Wald (ZH),Zürich, 47.3482747,8.7178739, 47.2771375,8.9155608, 80
120, 120, 153, 153, Wald (ZH), Zürich, Wald (ZH), Zürich, Wald (ZH),Zürich, Wald (ZH),Zürich, 47.2771375,8.9155608, 47.2771375,8.9155608, 81
261, 251, 1, 159, Zürich, Zürich, Weiningen (ZH), Zürich, Zürich,Zürich, Weiningen (ZH),Zürich, 47.3768866,8.541694, 47.4197021,8.4344485, 82
1407, 121, 698, 162, Sarnen, Obwalden, Wetzikon (ZH), Zürich, Sarnen,Obwalden, Wetzikon (ZH),Zürich, 46.8959313,8.2456758, 47.3270602,8.801356, 83
115, 230, 53, 168, Gossau (ZH), Zürich, Winterthur, Zürich, Gossau (ZH),Zürich, Winterthur,Zürich, 47.3064531,8.7586121, 47.4988196,8.7236889, 84
261, 231, 1, 169, Zürich, Zürich, Zell (ZH), Zürich, Zürich,Zürich, Zell (ZH),Zürich, 47.3768866,8.541694, 47.4442589,8.7984569, 85
247, 231, 128, 169, Schlieren, Zürich, Zell (ZH), Zürich, Schlieren,Zürich, Zell (ZH),Zürich, 47.3982611,8.448795, 47.4442589,8.7984569, 86
194, 351, 54, 172, Greifensee, Zürich, Bern, Bern, Greifensee,Zürich, Bern,Bern, 47.3665785,8.6794982, 46.9479739,7.4474468, 87
2701, 351, 1040, 172, Basel, Basel, Bern, Bern, Basel,Basel, Bern,Bern, 47.5595986,7.5885761, 46.9479739,7.4474468, 88
4255, 351, 1565, 172, Mumpf, Aargau, Bern, Bern, Mumpf,Aargau, Bern,Bern, 47.5461315,7.9196279, 46.9479739,7.4474468, 89
1702, 404, 741, 222, Cham, Zug, Burgdorf, Bern, Cham,Zug, Burgdorf,Bern, 47.181225,8.4592089, 47.0559357,7.6272243, 90
2895, 690, 1121, 233, Waldenburg, Basel Land, Court, Bern, Waldenburg,Basel Land, Court,Bern, 47.3815278,7.7469396, 47.2395861,7.3368922, 91
6453, 494, 2449, 266, Enges, Neuchâtel, Gals, Bern, Enges,Neuchâtel, Gals,Bern, 47.0566208,7.012101, 47.0281883,7.050374, 92
6453, 495, 2449, 267, Enges, Neuchâtel, Gampelen, Bern, Enges,Neuchâtel, Gampelen,Bern, 47.0566208,7.012101, 47.014664,7.0578947, 93
351, 929, 172, 299, Bern, Bern, Hilterfingen, Bern, Bern,Bern, Hilterfingen,Bern, 46.9479739,7.4474468, 46.7439605,7.6472306, 94
929, 929, 299, 299, Hilterfingen, Bern, Hilterfingen, Bern, Hilterfingen,Bern, Hilterfingen,Bern, 46.7439605,7.6472306, 46.7439605,7.6472306, 95
351, 739, 172, 312, Bern, Bern, Ipsach, Bern, Bern,Bern, Ipsach,Bern, 46.9479739,7.4474468, 47.1143109,7.232491, 96
354, 739, 330, 312, Kirchlindach, Bern, Ipsach, Bern, Kirchlindach,Bern, Ipsach,Bern, 46.9997652,7.4140521, 47.1143109,7.232491, 97
6741, 435, 2565, 338, Le Bémont, Jura, La Ferrière, Bern, Le Bémont,Jura, La Ferrière,Bern, 47.2641535,7.0135675, 47.1418557,6.8931182, 98
6742, 435, 2567, 338, Les Bois, Jura, La Ferrière, Bern, Les Bois,Jura, La Ferrière,Bern, 47.1774878,6.9052937, 47.1418557,6.8931182, 99
2895, 387, 1121, 351, Waldenburg, Basel Land, Lengnau (BE), Bern, Waldenburg,Basel Land, Lengnau (BE),Bern, 47.3815278,7.7469396, 47.18076,7.3692807, 100
785, 785, 372, 372, Meiringen, Bern, Meiringen, Bern, Meiringen,Bern, Meiringen,Bern, 46.7251614,8.1909081, 46.7251614,8.1909081, 101
5269, 785, 1770, 372, Breggia, Tessin, Meiringen, Bern, Breggia,Tessin, Meiringen,Bern, 45.866667,9.033333, 46.7251614,8.1909081, 102
306, 356, 363, 391, Lyss, Bern, Muri bei Bern, Bern, Lyss,Bern, Muri bei Bern,Bern, 47.0746504,7.3077022, 46.9350521,7.4984728, 103
2895, 442, 1121, 446, Waldenburg, Basel Land, Romont (BE), Bern, Waldenburg,Basel Land, Romont (BE),Bern, 47.3815278,7.7469396, 47.1889747,7.3392264, 104
939, 939, 493, 493, Steffisburg, Bern, Steffisburg, Bern, Steffisburg,Bern, Steffisburg,Bern, 46.7788438,7.6347832, 46.7788438,7.6347832, 105
5890, 939, 2258, 493, Vevey, Waadt, Steffisburg, Bern, Vevey,Waadt, Steffisburg,Bern, 46.4628333,6.8419192, 46.7788438,7.6347832, 106
942, 942, 504, 504, Thun, Bern, Thun, Bern, Thun,Bern, Thun,Bern, 46.7579868,7.6279881, 46.7579868,7.6279881, 107
2196, 942, 750, 504, Fribourg, Fribourg, Thun, Bern, Fribourg,Fribourg, Thun,Bern, 46.8064773,7.1619719, 46.7579868,7.6279881, 108
6453, 501, 2449, 513, Enges, Neuchâtel, Tschugg, Bern, Enges,Neuchâtel, Tschugg,Bern, 47.0566208,7.012101, 47.0259262,7.0782281, 109
3953, 359, 1342, 524, Maienfeld, Graubünden, Vechigen, Bern, Maienfeld,Graubünden, Vechigen,Bern, 47.00571,9.530813, 46.9470299,7.5614952, 110
3943, 359, 1347, 524, Mastrils, Graubünden, Vechigen, Bern, Mastrils,Graubünden, Vechigen,Bern, 46.96628,9.54229, 46.9470299,7.5614952, 111
1051, 1061, 562, 561, Adligenswil, Luzern, Luzern, Luzern, Adligenswil,Luzern, Luzern,Luzern, 47.071186,8.3647405, 47.0501682,8.3093072, 112
2601, 1061, 918, 561, Solothurn, Solothurn, Luzern, Luzern, Solothurn,Solothurn, Luzern,Luzern, 47.2088348,7.532291, 47.0501682,8.3093072, 113
6608, 1061, 2493, 561, Carouge (GE), Genf, Luzern, Luzern, Carouge (GE),Genf, Luzern,Luzern, 46.1829674,6.1378539, 47.0501682,8.3093072, 114
6630, 1061, 2514, 561, Meyrin, Genf, Luzern, Luzern, Meyrin,Genf, Luzern,Luzern, 46.2283204,6.070988, 47.0501682,8.3093072, 115
261, 1123, 1, 566, Zürich, Zürich, Altishofen, Luzern, Zürich,Zürich, Altishofen,Luzern, 47.3768866,8.541694, 47.2022847,7.9669609, 116
5046, 1123, 1894, 566, Semione, Tessin, Altishofen, Luzern, Semione,Tessin, Altishofen,Luzern, 46.4075638,8.9702528, 47.2022847,7.9669609, 117
1331, 1055, 680, 590, Küssnacht am Rigi, Schwyz, Gisikon, Luzern, Küssnacht am Rigi,Schwyz, Gisikon,Luzern, 47.0843237,8.4431621, 47.1276261,8.4012374, 118
1703, 1055, 742, 590, Hünenberg, Zug, Gisikon, Luzern, Hünenberg,Zug, Gisikon,Luzern, 47.1771936,8.4271865, 47.1276261,8.4012374, 119
1331, 1057, 680, 600, Küssnacht am Rigi, Schwyz, Honau, Luzern, Küssnacht am Rigi,Schwyz, Honau,Luzern, 47.0843237,8.4431621, 47.1306454,8.4063308, 120
1703, 1057, 742, 600, Hünenberg, Zug, Honau, Luzern, Hünenberg,Zug, Honau,Luzern, 47.1771936,8.4271865, 47.1306454,8.4063308, 121
261, 1058, 1, 601, Zürich, Zürich, Horw, Luzern, Zürich,Zürich, Horw,Luzern, 47.3768866,8.541694, 47.0184461,8.3079399, 122
246, 1058, 107, 601, Oetwil an der Limmat, Zürich, Horw, Luzern, Oetwil an der Limmat,Zürich, Horw,Luzern, 47.4274949,8.394824, 47.0184461,8.3079399, 123
5586, 1058, 1914, 601, Lausanne, Waadt, Horw, Luzern, Lausanne,Waadt, Horw,Luzern, 46.5196535,6.6322734, 47.0184461,8.3079399, 124
261, 1059, 1, 604, Zürich, Zürich, Kriens, Luzern, Zürich,Zürich, Kriens,Luzern, 47.3768866,8.541694, 47.0341978,8.2772552, 125
246, 1059, 107, 604, Oetwil an der Limmat, Zürich, Kriens, Luzern, Oetwil an der Limmat,Zürich, Kriens,Luzern, 47.4274949,8.394824, 47.0341978,8.2772552, 126
5586, 1059, 1914, 604, Lausanne, Waadt, Kriens, Luzern, Lausanne,Waadt, Kriens,Luzern, 46.5196535,6.6322734, 47.0341978,8.2772552, 127
4323, 1063, 1454, 609, Bad Zurzach, Aargau, Meggen, Luzern, Bad Zurzach,Aargau, Meggen,Luzern, 47.5877895,8.2933248, 47.0458287,8.3724158, 128
1331, 1064, 680, 610, Küssnacht am Rigi, Schwyz, Meierskappel, Luzern, Küssnacht am Rigi,Schwyz, Meierskappel,Luzern, 47.0843237,8.4431621, 47.1244436,8.4432688, 129
1703, 1064, 742, 610, Hünenberg, Zug, Meierskappel, Luzern, Hünenberg,Zug, Meierskappel,Luzern, 47.1771936,8.4271865, 47.1244436,8.4432688, 130
2701, 1065, 1040, 626, Basel, Basel, Root, Luzern, Basel,Basel, Root,Luzern, 47.5595986,7.5885761, 47.1149422,8.3900853, 131
6297, 1065, 2424, 626, Visp, Wallis, Root, Luzern, Visp,Wallis, Root,Luzern, 46.2947277,7.8821204, 47.1149422,8.3900853, 132
4227, 1041, 1464, 631, Bettwil, Aargau, Schongau, Luzern, Bettwil,Aargau, Schongau,Luzern, 47.2903281,8.2693321, 47.26784,8.26384, 133
1063, 1069, 609, 642, Meggen, Luzern, Weggis, Luzern, Meggen,Luzern, Weggis,Luzern, 47.0458287,8.3724158, 47.0338792,8.425278, 134
1213, 1201, 660, 648, Schattdorf, Uri, Altdorf (UR), Uri, Schattdorf,Uri, Altdorf (UR),Uri, 46.8642346,8.6481594, 46.8821272,8.6428436, 135
2701, 1201, 1040, 648, Basel, Basel, Altdorf (UR), Uri, Basel,Basel, Altdorf (UR),Uri, 47.5595986,7.5885761, 46.8821272,8.6428436, 136
4095, 1341, 1478, 670, Brugg, Aargau, Altendorf, Schwyz, Brugg,Aargau, Altendorf,Schwyz, 47.4867355,8.2109103, 47.1914822,8.8299043, 137
4121, 1341, 1641, 670, Villigen, Aargau, Altendorf, Schwyz, Villigen,Aargau, Altendorf,Schwyz, 47.5262164,8.2147881, 47.1914822,8.8299043, 138
1301, 1301, 672, 672, Einsiedeln, Schwyz, Einsiedeln, Schwyz, Einsiedeln,Schwyz, Einsiedeln,Schwyz, 47.127353,8.7451537, 47.127353,8.7451537, 139
2701, 1321, 1040, 673, Basel, Basel, Feusisberg, Schwyz, Basel,Basel, Feusisberg,Schwyz, 47.5595986,7.5885761, 47.1869781,8.7469796, 140
6297, 1321, 2424, 673, Visp, Wallis, Feusisberg, Schwyz, Visp,Wallis, Feusisberg,Schwyz, 46.2947277,7.8821204, 47.1869781,8.7469796, 141
161, 1322, 170, 674, Zollikon, Zürich, Freienbach, Schwyz, Zollikon,Zürich, Freienbach,Schwyz, 47.3412096,8.5772146, 47.2064107,8.7565933, 142
4021, 1322, 1455, 674, Baden, Aargau, Freienbach, Schwyz, Baden,Aargau, Freienbach,Schwyz, 47.47288,8.30809, 47.2064107,8.7565933, 143
4082, 1322, 1654, 674, Wohlen (AG), Aargau, Freienbach, Schwyz, Wohlen (AG),Aargau, Freienbach,Schwyz, 47.3493653,8.2768762, 47.2064107,8.7565933, 144
5586, 1375, 1914, 694, Lausanne, Waadt, Unteriberg, Schwyz, Lausanne,Waadt, Unteriberg,Schwyz, 46.5196535,6.6322734, 47.0593246,8.8019535, 145
261, 1323, 1, 697, Zürich, Zürich, Wollerau, Schwyz, Zürich,Zürich, Wollerau,Schwyz, 47.3768866,8.541694, 47.19717,8.71338, 146
1710, 1407, 749, 698, Walchwil, Zug, Sarnen, Obwalden, Walchwil,Zug, Sarnen,Obwalden, 47.100183,8.5162335, 46.8959313,8.2456758, 147
4021, 1407, 1455, 698, Baden, Aargau, Sarnen, Obwalden, Baden,Aargau, Sarnen,Obwalden, 47.47288,8.30809, 46.8959313,8.2456758, 148
5586, 1407, 1914, 698, Lausanne, Waadt, Sarnen, Obwalden, Lausanne,Waadt, Sarnen,Obwalden, 46.5196535,6.6322734, 46.8959313,8.2456758, 149
5646, 1407, 2221, 698, Saint-Prex, Waadt, Sarnen, Obwalden, Saint-Prex,Waadt, Sarnen,Obwalden, 46.4829113,6.4583435, 46.8959313,8.2456758, 150
5648, 1407, 2224, 698, Saint-Sulpice (VD), Waadt, Sarnen, Obwalden, Saint-Sulpice (VD),Waadt, Sarnen,Obwalden, 46.510114,6.5581951, 46.8959313,8.2456758, 151
5586, 1402, 1914, 700, Lausanne, Waadt, Engelberg, Obwalden, Lausanne,Waadt, Engelberg,Obwalden, 46.5196535,6.6322734, 46.8200266,8.4069918, 152
1404, 1404, 702, 702, Kerns, Obwalden, Kerns, Obwalden, Kerns,Obwalden, Kerns,Obwalden, 46.9022606,8.2763586, 46.9022606,8.2763586, 153
261, 1509, 1, 705, Zürich, Zürich, Stans, Nidwalden, Zürich,Zürich, Stans,Nidwalden, 47.3768866,8.541694, 46.9571926,8.3659672, 154
191, 1509, 35, 705, Dübendorf, Zürich, Stans, Nidwalden, Dübendorf,Zürich, Stans,Nidwalden, 47.3971476,8.6180128, 46.9571926,8.3659672, 155
1509, 1505, 705, 710, Stans, Nidwalden, Ennetbürgen, Nidwalden, Stans,Nidwalden, Ennetbürgen,Nidwalden, 46.9571926,8.3659672, 46.9851573,8.413513, 156
246, 1507, 107, 712, Oetwil an der Limmat, Zürich, Hergiswil (NW), Nidwalden, Oetwil an der Limmat,Zürich, Hergiswil (NW),Nidwalden, 47.4274949,8.394824, 46.9905821,8.3083735, 157
5586, 1507, 1914, 712, Lausanne, Waadt, Hergiswil (NW), Nidwalden, Lausanne,Waadt, Hergiswil (NW),Nidwalden, 46.5196535,6.6322734, 46.9905821,8.3083735, 158
5635, 1507, 2043, 712, Ecublens (VD), Waadt, Hergiswil (NW), Nidwalden, Ecublens (VD),Waadt, Hergiswil (NW),Nidwalden, 46.5296363,6.5615252, 46.9905821,8.3083735, 159
1703, 1510, 742, 714, Hünenberg, Zug, Stansstad, Nidwalden, Hünenberg,Zug, Stansstad,Nidwalden, 47.1771936,8.4271865, 46.977594,8.3374207, 160
2765, 1510, 1053, 714, Binningen, Basel Land, Stansstad, Nidwalden, Binningen,Basel Land, Stansstad,Nidwalden, 47.5378697,7.5709878, 46.977594,8.3374207, 161
4166, 1510, 1521, 714, Herznach, Aargau, Stansstad, Nidwalden, Herznach,Aargau, Stansstad,Nidwalden, 47.4742674,8.0507173, 46.977594,8.3374207, 162
4253, 1613, 1549, 725, Magden, Aargau, Linthal, Glarus, Magden,Aargau, Linthal,Glarus, 47.5266505,7.814835, 46.9218287,8.9996438, 163
351, 1711, 172, 739, Bern, Bern, Zug, Zug, Bern,Bern, Zug,Zug, 46.9479739,7.4474468, 47.1661672,8.5154946, 164
2254, 1711, 790, 739, Courtepin, Fribourg, Zug, Zug, Courtepin,Fribourg, Zug,Zug, 46.8653104,7.1238213, 47.1661672,8.5154946, 165
2782, 1711, 1059, 739, Brislach, Basel Land, Zug, Zug, Brislach,Basel Land, Zug,Zug, 47.41885,7.5427693, 47.1661672,8.5154946, 166
3231, 1711, 1186, 739, Au (SG), Sankt Gallen, Zug, Zug, Au (SG),Sankt Gallen, Zug,Zug, 47.431055,9.6343097, 47.1661672,8.5154946, 167
3276, 1711, 1259, 739, Wartau, Sankt Gallen, Zug, Zug, Wartau,Sankt Gallen, Zug,Zug, 47.09181,9.47739, 47.1661672,8.5154946, 168
3238, 1711, 1262, 739, Widnau, Sankt Gallen, Zug, Zug, Widnau,Sankt Gallen, Zug,Zug, 47.4055145,9.6375563, 47.1661672,8.5154946, 169
2701, 1701, 1040, 740, Basel, Basel, Baar, Zug, Basel,Basel, Baar,Zug, 47.5595986,7.5885761, 47.1953729,8.526087, 170
2703, 1701, 1042, 740, Riehen, Basel, Baar, Zug, Riehen,Basel, Baar,Zug, 47.5848274,7.6499111, 47.1953729,8.526087, 171
3954, 1701, 1344, 740, Malans, Graubünden, Baar, Zug, Malans,Graubünden, Baar,Zug, 46.9816699,9.5758945, 47.1953729,8.526087, 172
5890, 1701, 2258, 740, Vevey, Waadt, Baar, Zug, Vevey,Waadt, Baar,Zug, 46.4628333,6.8419192, 47.1953729,8.526087, 173
6153, 1701, 2364, 740, Monthey, Wallis, Baar, Zug, Monthey,Wallis, Baar,Zug, 46.2521873,6.9469598, 47.1953729,8.526087, 174
2701, 1702, 1040, 741, Basel, Basel, Cham, Zug, Basel,Basel, Cham,Zug, 47.5595986,7.5885761, 47.181225,8.4592089, 175
3901, 1702, 1267, 741, Chur, Graubünden, Cham, Zug, Chur,Graubünden, Cham,Zug, 46.8507835,9.5319859, 47.181225,8.4592089, 176
3722, 1702, 1303, 741, Domat/Ems, Graubünden, Cham, Zug, Domat/Ems,Graubünden, Cham,Zug, 46.8336355,9.4473545, 47.181225,8.4592089, 177
4021, 1703, 1455, 742, Baden, Aargau, Hünenberg, Zug, Baden,Aargau, Hünenberg,Zug, 47.47288,8.30809, 47.1771936,8.4271865, 178
141, 1710, 140, 749, Thalwil, Zürich, Walchwil, Zug, Thalwil,Zürich, Walchwil,Zug, 47.2949282,8.5644799, 47.100183,8.5162335, 179
2321, 2321, 753, 753, Attalens, Fribourg, Attalens, Fribourg, Attalens,Fribourg, Attalens,Fribourg, 46.5103309,6.8485685, 46.5103309,6.8485685, 180
5886, 2321, 2142, 753, Montreux, Waadt, Attalens, Fribourg, Montreux,Waadt, Attalens,Fribourg, 46.4312213,6.9106799, 46.5103309,6.8485685, 181
2701, 2061, 1040, 754, Basel, Basel, Auboranges, Fribourg, Basel,Basel, Auboranges,Fribourg, 47.5595986,7.5885761, 46.5822239,6.8052223, 182
2701, 2066, 1040, 773, Basel, Basel, Chapelle, Fribourg, Basel,Basel, Chapelle,Fribourg, 47.5595986,7.5885761, 46.5857175,6.8392134, 183
2223, 2096, 836, 874, Le Glèbe, Fribourg, Romont, Fribourg, Le Glèbe,Fribourg, Romont,Fribourg, 46.7163849,7.0330044, 46.691887,6.9118086, 184
2765, 2471, 1053, 926, Binningen, Basel Land, Bättwil, Solothurn, Binningen,Basel Land, Bättwil,Solothurn, 47.5378697,7.5709878, 47.4901324,7.5105407, 185
4253, 2471, 1549, 926, Magden, Aargau, Bättwil, Solothurn, Magden,Aargau, Bättwil,Solothurn, 47.5266505,7.814835, 47.4901324,7.5105407, 186
5611, 2471, 2228, 926, Savigny, Waadt, Bättwil, Solothurn, Savigny,Waadt, Bättwil,Solothurn, 46.5383864,6.7321079, 47.4901324,7.5105407, 187
5890, 2471, 2258, 926, Vevey, Waadt, Bättwil, Solothurn, Vevey,Waadt, Bättwil,Solothurn, 46.4628333,6.8419192, 47.4901324,7.5105407, 188
261, 2473, 1, 942, Zürich, Zürich, Dornach, Solothurn, Zürich,Zürich, Dornach,Solothurn, 47.3768866,8.541694, 47.4790491,7.6170412, 189
158, 2473, 135, 942, Stäfa, Zürich, Dornach, Solothurn, Stäfa,Zürich, Dornach,Solothurn, 47.2392343,8.7351356, 47.4790491,7.6170412, 190
4172, 2473, 1566, 942, Münchwilen (AG), Aargau, Dornach, Solothurn, Münchwilen (AG),Aargau, Dornach,Solothurn, 47.5399234,7.9667513, 47.4790491,7.6170412, 191
4021, 2401, 1455, 944, Baden, Aargau, Egerkingen, Solothurn, Baden,Aargau, Egerkingen,Solothurn, 47.47288,8.30809, 47.3214014,7.7936947, 192
5586, 2401, 1914, 944, Lausanne, Waadt, Egerkingen, Solothurn, Lausanne,Waadt, Egerkingen,Solothurn, 46.5196535,6.6322734, 47.3214014,7.7936947, 193
2581, 2574, 1013, 945, Olten, Solothurn, Eppenberg-Wöschnau, Solothurn, Olten,Solothurn, Eppenberg-Wöschnau,Solothurn, 47.3499624,7.9037034, 47.3758233,8.02418, 194
4005, 2574, 1499, 945, Erlinsbach, Aargau, Eppenberg-Wöschnau, Solothurn, Erlinsbach,Aargau, Eppenberg-Wöschnau,Solothurn, 47.4067819,8.0111999, 47.3758233,8.02418, 195
2701, 2546, 1040, 957, Basel, Basel, Grenchen, Solothurn, Basel,Basel, Grenchen,Solothurn, 47.5595986,7.5885761, 47.1922876,7.3958907, 196
261, 2402, 1, 964, Zürich, Zürich, Härkingen, Solothurn, Zürich,Zürich, Härkingen,Solothurn, 47.3768866,8.541694, 47.3073359,7.8189943, 197
141, 2402, 140, 964, Thalwil, Zürich, Härkingen, Solothurn, Thalwil,Zürich, Härkingen,Solothurn, 47.2949282,8.5644799, 47.3073359,7.8189943, 198
2772, 2618, 1101, 970, Pfeffingen, Basel Land, Himmelried, Solothurn, Pfeffingen,Basel Land, Himmelried,Solothurn, 47.4586328,7.5900291, 47.42219,7.59808, 199
4172, 2618, 1566, 970, Münchwilen (AG), Aargau, Himmelried, Solothurn, Münchwilen (AG),Aargau, Himmelried,Solothurn, 47.5399234,7.9667513, 47.42219,7.59808, 200
4172, 2475, 1566, 971, Münchwilen (AG), Aargau, Hochwald, Solothurn, Münchwilen (AG),Aargau, Hochwald,Solothurn, 47.5399234,7.9667513, 47.4574646,7.6431883, 201
4253, 2476, 1549, 972, Magden, Aargau, Hofstetten-Flüh, Solothurn, Magden,Aargau, Hofstetten-Flüh,Solothurn, 47.5266505,7.814835, 47.4769723,7.5117799, 202
4253, 2477, 1549, 997, Magden, Aargau, Metzerlen-Mariastein, Solothurn, Magden,Aargau, Metzerlen-Mariastein,Solothurn, 47.5266505,7.814835, 47.46586,7.46494, 203
2701, 2478, 1040, 1005, Basel, Basel, Nuglar-St.Pantaleon, Solothurn, Basel,Basel, Nuglar-St.Pantaleon,Solothurn, 47.5595986,7.5885761, 47.4713115,7.6928374, 204
2829, 2478, 1043, 1005, Liestal, Basel Land, Nuglar-St.Pantaleon, Solothurn, Liestal,Basel Land, Nuglar-St.Pantaleon,Solothurn, 47.4866143,7.7334272, 47.4713115,7.6928374, 205
5130, 2581, 1902, 1013, Tegna, Tessin, Olten, Solothurn, Tegna,Tessin, Olten,Solothurn, 46.186706,8.7443382, 47.3499624,7.9037034, 206
2581, 2583, 1013, 1021, Olten, Solothurn, Schönenwerd, Solothurn, Olten,Solothurn, Schönenwerd,Solothurn, 47.3499624,7.9037034, 47.3736954,8.0023269, 207
4005, 2583, 1499, 1021, Erlinsbach, Aargau, Schönenwerd, Solothurn, Erlinsbach,Aargau, Schönenwerd,Solothurn, 47.4067819,8.0111999, 47.3736954,8.0023269, 208
230, 2701, 168, 1040, Winterthur, Zürich, Basel, Basel, Winterthur,Zürich, Basel,Basel, 47.4988196,8.7236889, 47.5595986,7.5885761, 209
5422, 2703, 1924, 1042, Aubonne, Waadt, Riehen, Basel, Aubonne,Waadt, Riehen,Basel, 46.4953291,6.3918325, 47.5848274,7.6499111, 210
261, 2761, 1, 1044, Zürich, Zürich, Aesch (BL), Basel Land, Zürich,Zürich, Aesch (BL),Basel Land, 47.3768866,8.541694, 47.4672734,7.5979344, 211
261, 2763, 1, 1049, Zürich, Zürich, Arlesheim, Basel Land, Zürich,Zürich, Arlesheim,Basel Land, 47.3768866,8.541694, 47.499576,7.6192212, 212
5611, 2764, 2228, 1052, Savigny, Waadt, Biel-Benken (BL), Basel Land, Savigny,Waadt, Biel-Benken (BL),Basel Land, 46.5383864,6.7321079, 47.506272,7.5255321, 213
2765, 2765, 1053, 1053, Binningen, Basel Land, Binningen, Basel Land, Binningen,Basel Land, Binningen,Basel Land, 47.5378697,7.5709878, 47.5378697,7.5709878, 214
3251, 2765, 1183, 1053, Altstätten, Sankt Gallen, Binningen, Basel Land, Altstätten,Sankt Gallen, Binningen,Basel Land, 47.3774633,9.5469133, 47.5378697,7.5709878, 215
4021, 2765, 1455, 1053, Baden, Aargau, Binningen, Basel Land, Baden,Aargau, Binningen,Basel Land, 47.47288,8.30809, 47.5378697,7.5709878, 216
5586, 2765, 1914, 1053, Lausanne, Waadt, Binningen, Basel Land, Lausanne,Waadt, Binningen,Basel Land, 46.5196535,6.6322734, 47.5378697,7.5709878, 217
4253, 2781, 1549, 1055, Magden, Aargau, Blauen, Basel Land, Magden,Aargau, Blauen,Basel Land, 47.5266505,7.814835, 47.4501556,7.5187797, 218
5611, 2781, 2228, 1055, Savigny, Waadt, Blauen, Basel Land, Savigny,Waadt, Blauen,Basel Land, 46.5383864,6.7321079, 47.4501556,7.5187797, 219
2782, 2782, 1059, 1059, Brislach, Basel Land, Brislach, Basel Land, Brislach,Basel Land, Brislach,Basel Land, 47.41885,7.5427693, 47.41885,7.5427693, 220
261, 2785, 1, 1067, Zürich, Zürich, Duggingen, Basel Land, Zürich,Zürich, Duggingen,Basel Land, 47.3768866,8.541694, 47.4527468,7.6050304, 221
5611, 2768, 2228, 1069, Savigny, Waadt, Ettingen, Basel Land, Savigny,Waadt, Ettingen,Basel Land, 46.5383864,6.7321079, 47.4819119,7.5448507, 222
2782, 2786, 1059, 1074, Brislach, Basel Land, Grellingen, Basel Land, Brislach,Basel Land, Grellingen,Basel Land, 47.41885,7.5427693, 47.4409994,7.5905459, 223
4021, 2888, 1455, 1083, Baden, Aargau, Langenbruck, Basel Land, Baden,Aargau, Langenbruck,Basel Land, 47.47288,8.30809, 47.3483495,7.7686817, 224
2782, 2787, 1059, 1085, Brislach, Basel Land, Laufen, Basel Land, Brislach,Basel Land, Laufen,Basel Land, 47.41885,7.5427693, 47.4204213,7.5004874, 225
1058, 2853, 601, 1091, Horw, Luzern, Maisprach, Basel Land, Horw,Luzern, Maisprach,Basel Land, 47.0184461,8.3079399, 47.5238529,7.8468307, 226
261, 2769, 1, 1092, Zürich, Zürich, Münchenstein, Basel Land, Zürich,Zürich, Münchenstein,Basel Land, 47.3768866,8.541694, 47.5226485,7.6150661, 227
2782, 2789, 1059, 1094, Brislach, Basel Land, Nenzlingen, Basel Land, Brislach,Basel Land, Nenzlingen,Basel Land, 47.41885,7.5427693, 47.447616,7.5619487, 228
5611, 2771, 2228, 1098, Savigny, Waadt, Oberwil (BL), Basel Land, Savigny,Waadt, Oberwil (BL),Basel Land, 46.5383864,6.7321079, 47.5159745,7.5582003, 229
261, 2772, 1, 1101, Zürich, Zürich, Pfeffingen, Basel Land, Zürich,Zürich, Pfeffingen,Basel Land, 47.3768866,8.541694, 47.4586328,7.5900291, 230
2701, 2772, 1040, 1101, Basel, Basel, Pfeffingen, Basel Land, Basel,Basel, Pfeffingen,Basel Land, 47.5595986,7.5885761, 47.4586328,7.5900291, 231
2772, 2772, 1101, 1101, Pfeffingen, Basel Land, Pfeffingen, Basel Land, Pfeffingen,Basel Land, Pfeffingen,Basel Land, 47.4586328,7.5900291, 47.4586328,7.5900291, 232
4172, 2772, 1566, 1101, Münchwilen (AG), Aargau, Pfeffingen, Basel Land, Münchwilen (AG),Aargau, Pfeffingen,Basel Land, 47.5399234,7.9667513, 47.4586328,7.5900291, 233
5611, 2774, 2228, 1112, Savigny, Waadt, Schönenbuch, Basel Land, Savigny,Waadt, Schönenbuch,Basel Land, 46.5383864,6.7321079, 47.5372246,7.5020252, 234
5611, 2775, 2228, 1117, Savigny, Waadt, Therwil, Basel Land, Savigny,Waadt, Therwil,Basel Land, 46.5383864,6.7321079, 47.4990611,7.5532808, 235
2782, 2792, 1059, 1120, Brislach, Basel Land, Wahlen, Basel Land, Brislach,Basel Land, Wahlen,Basel Land, 47.41885,7.5427693, 47.4012701,7.5156451, 236
2782, 2793, 1059, 1128, Brislach, Basel Land, Zwingen, Basel Land, Brislach,Basel Land, Zwingen,Basel Land, 47.41885,7.5427693, 47.4371566,7.5308866, 237
121, 2939, 162, 1129, Wetzikon (ZH), Zürich, Schaffhausen, Schaffhausen, Wetzikon (ZH),Zürich, Schaffhausen,Schaffhausen, 47.3270602,8.801356, 47.6958897,8.6380489, 238
55, 2933, 38, 1134, Eglisau, Zürich, Buchberg, Schaffhausen, Eglisau,Zürich, Buchberg,Schaffhausen, 47.5762223,8.5219809, 47.5732503,8.5627138, 239
217, 2933, 39, 1134, Elgg, Zürich, Buchberg, Schaffhausen, Elgg,Zürich, Buchberg,Schaffhausen, 47.4910721,8.8665461, 47.5732503,8.5627138, 240
57, 2933, 50, 1134, Freienstein-Teufen, Zürich, Buchberg, Schaffhausen, Freienstein-Teufen,Zürich, Buchberg,Schaffhausen, 47.5313791,8.5851744, 47.5732503,8.5627138, 241
55, 2938, 38, 1148, Eglisau, Zürich, Rüdlingen, Schaffhausen, Eglisau,Zürich, Rüdlingen,Schaffhausen, 47.5762223,8.5219809, 47.5788217,8.5719689, 242
217, 2938, 39, 1148, Elgg, Zürich, Rüdlingen, Schaffhausen, Elgg,Zürich, Rüdlingen,Schaffhausen, 47.4910721,8.8665461, 47.5788217,8.5719689, 243
3236, 3033, 1248, 1162, St. Margrethen, Sankt Gallen, Lutzenberg, Appenzell Ausserhoden, St. Margrethen,Sankt Gallen, Lutzenberg,Appenzell Ausserhoden, 47.4496088,9.6376089, 47.4591355,9.5798361, 244
1341, 3035, 670, 1164, Altendorf, Schwyz, Reute, Appenzell Ausserhoden, Altendorf,Schwyz, Reute,Appenzell Ausserhoden, 47.1914822,8.8299043, 47.419751,9.5760652, 245
261, 3024, 1, 1169, Zürich, Zürich, Teufen, Appenzell Ausserhoden, Zürich,Zürich, Teufen,Appenzell Ausserhoden, 47.3768866,8.541694, 47.390742,9.3892463, 246
2601, 3024, 918, 1169, Solothurn, Solothurn, Teufen, Appenzell Ausserhoden, Solothurn,Solothurn, Teufen,Appenzell Ausserhoden, 47.2088348,7.532291, 47.390742,9.3892463, 247
4501, 3024, 1705, 1169, Kradolf-Schönenberg, Thurgau, Teufen, Appenzell Ausserhoden, Kradolf-Schönenberg,Thurgau, Teufen,Appenzell Ausserhoden, 47.5213353,9.1987635, 47.390742,9.3892463, 248
4671, 3024, 1706, 1169, Kreuzlingen, Thurgau, Teufen, Appenzell Ausserhoden, Kreuzlingen,Thurgau, Teufen,Appenzell Ausserhoden, 47.6447397,9.1707858, 47.390742,9.3892463, 249
1341, 3037, 670, 1174, Altendorf, Schwyz, Walzenhausen, Appenzell Ausserhoden, Altendorf,Schwyz, Walzenhausen,Appenzell Ausserhoden, 47.1914822,8.8299043, 47.4513643,9.6023288, 250
3231, 3037, 1186, 1174, Au (SG), Sankt Gallen, Walzenhausen, Appenzell Ausserhoden, Au (SG),Sankt Gallen, Walzenhausen,Appenzell Ausserhoden, 47.431055,9.6343097, 47.4513643,9.6023288, 251
3236, 3037, 1248, 1174, St. Margrethen, Sankt Gallen, Walzenhausen, Appenzell Ausserhoden, St. Margrethen,Sankt Gallen, Walzenhausen,Appenzell Ausserhoden, 47.4496088,9.6376089, 47.4513643,9.6023288, 252
1341, 3038, 670, 1175, Altendorf, Schwyz, Wolfhalden, Appenzell Ausserhoden, Altendorf,Schwyz, Wolfhalden,Appenzell Ausserhoden, 47.1914822,8.8299043, 47.45371,9.55054, 253
1341, 3111, 670, 1178, Altendorf, Schwyz, Oberegg, Appenzell Innerrhoden, Altendorf,Schwyz, Oberegg,Appenzell Innerrhoden, 47.1914822,8.8299043, 47.4228209,9.5498523, 254
191, 3203, 35, 1182, Dübendorf, Zürich, St. Gallen, Sankt Gallen, Dübendorf,Zürich, St. Gallen,Sankt Gallen, 47.3971476,8.6180128, 47.4244818,9.3767173, 255
1702, 3203, 741, 1182, Cham, Zug, St. Gallen, Sankt Gallen, Cham,Zug, St. Gallen,Sankt Gallen, 47.181225,8.4592089, 47.4244818,9.3767173, 256
2601, 3203, 918, 1182, Solothurn, Solothurn, St. Gallen, Sankt Gallen, Solothurn,Solothurn, St. Gallen,Sankt Gallen, 47.2088348,7.532291, 47.4244818,9.3767173, 257
4671, 3203, 1706, 1182, Kreuzlingen, Thurgau, St. Gallen, Sankt Gallen, Kreuzlingen,Thurgau, St. Gallen,Sankt Gallen, 47.6447397,9.1707858, 47.4244818,9.3767173, 258
2196, 3251, 750, 1183, Fribourg, Fribourg, Altstätten, Sankt Gallen, Fribourg,Fribourg, Altstätten,Sankt Gallen, 46.8064773,7.1619719, 47.3774633,9.5469133, 259
1341, 3233, 670, 1191, Altendorf, Schwyz, Berneck, Sankt Gallen, Altendorf,Schwyz, Berneck,Sankt Gallen, 47.1914822,8.8299043, 47.4255058,9.6135168, 260
1322, 3233, 674, 1191, Freienbach, Schwyz, Berneck, Sankt Gallen, Freienbach,Schwyz, Berneck,Sankt Gallen, 47.2064107,8.7565933, 47.4255058,9.6135168, 261
141, 3271, 140, 1193, Thalwil, Zürich, Buchs (SG), Sankt Gallen, Thalwil,Zürich, Buchs (SG),Sankt Gallen, 47.2949282,8.5644799, 47.1655403,9.4708594, 262
1711, 3271, 739, 1193, Zug, Zug, Buchs (SG), Sankt Gallen, Zug,Zug, Buchs (SG),Sankt Gallen, 47.1661672,8.5154946, 47.1655403,9.4708594, 263
120, 3332, 153, 1201, Wald (ZH), Zürich, Eschenbach (SG), Sankt Gallen, Wald (ZH),Zürich, Eschenbach (SG),Sankt Gallen, 47.2771375,8.9155608, 47.2406093,8.9220805, 264
3275, 3272, 1246, 1205, Sevelen, Sankt Gallen, Gams, Sankt Gallen, Sevelen,Sankt Gallen, Gams,Sankt Gallen, 47.1218764,9.486948, 47.2039131,9.4413218, 265
3276, 3272, 1259, 1205, Wartau, Sankt Gallen, Gams, Sankt Gallen, Wartau,Sankt Gallen, Gams,Sankt Gallen, 47.09181,9.47739, 47.2039131,9.4413218, 266
120, 3333, 153, 1208, Wald (ZH), Zürich, Goldingen, Sankt Gallen, Wald (ZH),Zürich, Goldingen,Sankt Gallen, 47.2771375,8.9155608, 47.2629383,8.9663634, 267
3212, 3392, 1198, 1216, Eggersriet, Sankt Gallen, Kirchberg (SG), Sankt Gallen, Eggersriet,Sankt Gallen, Kirchberg (SG),Sankt Gallen, 47.4426685,9.4719247, 47.4113533,9.0401819, 268
3392, 3392, 1216, 1216, Kirchberg (SG), Sankt Gallen, Kirchberg (SG), Sankt Gallen, Kirchberg (SG),Sankt Gallen, Kirchberg (SG),Sankt Gallen, 47.4113533,9.0401819, 47.4113533,9.0401819, 269
261, 3256, 1, 1241, Zürich, Zürich, Rüthi (SG), Sankt Gallen, Zürich,Zürich, Rüthi (SG),Sankt Gallen, 47.3768866,8.541694, 47.2936044,9.5376332, 270
9, 3256, 91, 1241, Mettmenstetten, Zürich, Rüthi (SG), Sankt Gallen, Mettmenstetten,Zürich, Rüthi (SG),Sankt Gallen, 47.2437032,8.4628831, 47.2936044,9.5376332, 271
3203, 3236, 1182, 1248, St. Gallen, Sankt Gallen, St. Margrethen, Sankt Gallen, St. Gallen,Sankt Gallen, St. Margrethen,Sankt Gallen, 47.4244818,9.3767173, 47.4496088,9.6376089, 272
2196, 3298, 750, 1258, Fribourg, Fribourg, Walenstadt, Sankt Gallen, Fribourg,Fribourg, Walenstadt,Sankt Gallen, 46.8064773,7.1619719, 47.12398,9.31603, 273
5724, 3298, 2154, 1258, Nyon, Waadt, Walenstadt, Sankt Gallen, Nyon,Waadt, Walenstadt,Sankt Gallen, 46.3832683,6.2347852, 47.12398,9.31603, 274
261, 3238, 1, 1262, Zürich, Zürich, Widnau, Sankt Gallen, Zürich,Zürich, Widnau,Sankt Gallen, 47.3768866,8.541694, 47.4055145,9.6375563, 275
3251, 3238, 1183, 1262, Altstätten, Sankt Gallen, Widnau, Sankt Gallen, Altstätten,Sankt Gallen, Widnau,Sankt Gallen, 47.3774633,9.5469133, 47.4055145,9.6375563, 276
3238, 3238, 1262, 1262, Widnau, Sankt Gallen, Widnau, Sankt Gallen, Widnau,Sankt Gallen, Widnau,Sankt Gallen, 47.4055145,9.6375563, 47.4055145,9.6375563, 277
3212, 3901, 1198, 1267, Eggersriet, Sankt Gallen, Chur, Graubünden, Eggersriet,Sankt Gallen, Chur,Graubünden, 47.4426685,9.4719247, 46.8507835,9.5319859, 278
3392, 3901, 1216, 1267, Kirchberg (SG), Sankt Gallen, Chur, Graubünden, Kirchberg (SG),Sankt Gallen, Chur,Graubünden, 47.4113533,9.0401819, 46.8507835,9.5319859, 279
3901, 3901, 1267, 1267, Chur, Graubünden, Chur, Graubünden, Chur,Graubünden, Chur,Graubünden, 46.8507835,9.5319859, 46.8507835,9.5319859, 280
230, 3921, 168, 1274, Winterthur, Zürich, Arosa, Graubünden, Winterthur,Zürich, Arosa,Graubünden, 47.4988196,8.7236889, 46.7823704,9.6799111, 281
2939, 3921, 1129, 1274, Schaffhausen, Schaffhausen, Arosa, Graubünden, Schaffhausen,Schaffhausen, Arosa,Graubünden, 47.6958897,8.6380489, 46.7823704,9.6799111, 282
2257, 3851, 791, 1300, Cressier, Fribourg, Davos, Graubünden, Cressier,Fribourg, Davos,Graubünden, 46.8988241,7.1400445, 46.8027453,9.8359701, 283
3276, 3953, 1259, 1342, Wartau, Sankt Gallen, Maienfeld, Graubünden, Wartau,Sankt Gallen, Maienfeld,Graubünden, 47.09181,9.47739, 47.00571,9.530813, 284
3953, 3953, 1342, 1342, Maienfeld, Graubünden, Maienfeld, Graubünden, Maienfeld,Graubünden, Maienfeld,Graubünden, 47.00571,9.530813, 47.00571,9.530813, 285
3943, 3953, 1347, 1342, Mastrils, Graubünden, Maienfeld, Graubünden, Mastrils,Graubünden, Maienfeld,Graubünden, 46.96628,9.54229, 47.00571,9.530813, 286
154, 3787, 80, 1405, Küsnacht (ZH), Zürich, St. Moritz, Graubünden, Küsnacht (ZH),Zürich, St. Moritz,Graubünden, 47.3189227,8.5844705, 46.4907973,9.8355079, 287
1063, 3787, 609, 1405, Meggen, Luzern, St. Moritz, Graubünden, Meggen,Luzern, St. Moritz,Graubünden, 47.0458287,8.3724158, 46.4907973,9.8355079, 288
1707, 4001, 746, 1445, Risch, Zug, Aarau, Aargau, Risch,Zug, Aarau,Aargau, 47.1410511,8.4298274, 47.390434,8.0457015, 289
5130, 4271, 1902, 1446, Tegna, Tessin, Aarburg, Aargau, Tegna,Tessin, Aarburg,Aargau, 46.186706,8.7443382, 47.3205914,7.9066923, 290
4021, 4323, 1455, 1454, Baden, Aargau, Bad Zurzach, Aargau, Baden,Aargau, Bad Zurzach,Aargau, 47.47288,8.30809, 47.5877895,8.2933248, 291
4315, 4323, 1590, 1454, Rekingen (AG), Aargau, Bad Zurzach, Aargau, Rekingen (AG),Aargau, Bad Zurzach,Aargau, 47.56982,8.32183, 47.5877895,8.2933248, 292
243, 4022, 31, 1459, Dietikon, Zürich, Bellikon, Aargau, Dietikon,Zürich, Bellikon,Aargau, 47.4053885,8.39977, 47.3891984,8.3440277, 293
243, 4023, 31, 1461, Dietikon, Zürich, Bergdietikon, Aargau, Dietikon,Zürich, Bergdietikon,Aargau, 47.4053885,8.39977, 47.3934257,8.390457, 294
2888, 4023, 1083, 1461, Langenbruck, Basel Land, Bergdietikon, Aargau, Langenbruck,Basel Land, Bergdietikon,Aargau, 47.3483495,7.7686817, 47.3934257,8.390457, 295
2888, 4062, 1083, 1462, Langenbruck, Basel Land, Berikon, Aargau, Langenbruck,Basel Land, Berikon,Aargau, 47.3483495,7.7686817, 47.352,8.37021, 296
1021, 4227, 563, 1464, Aesch (LU), Luzern, Bettwil, Aargau, Aesch (LU),Luzern, Bettwil,Aargau, 47.2559244,8.2411615, 47.2903281,8.2693321, 297
4227, 4227, 1464, 1464, Bettwil, Aargau, Bettwil, Aargau, Bettwil,Aargau, Bettwil,Aargau, 47.2903281,8.2693321, 47.2903281,8.2693321, 298
1331, 4231, 680, 1486, Küssnacht am Rigi, Schwyz, Dietwil, Aargau, Küssnacht am Rigi,Schwyz, Dietwil,Aargau, 47.0843237,8.4431621, 47.1488021,8.3920498, 299
1703, 4231, 742, 1486, Hünenberg, Zug, Dietwil, Aargau, Hünenberg,Zug, Dietwil,Aargau, 47.1771936,8.4271865, 47.1488021,8.3920498, 300
6297, 4231, 2424, 1486, Visp, Wallis, Dietwil, Aargau, Visp,Wallis, Dietwil,Aargau, 46.2947277,7.8821204, 47.1488021,8.3920498, 301
1701, 4097, 740, 1495, Baar, Zug, Elfingen, Aargau, Baar,Zug, Elfingen,Aargau, 47.1953729,8.526087, 47.5084111,8.0994405, 302
4083, 4097, 1663, 1495, Zufikon, Aargau, Elfingen, Aargau, Zufikon,Aargau, Elfingen,Aargau, 47.3455892,8.3577623, 47.5084111,8.0994405, 303
4021, 4026, 1455, 1497, Baden, Aargau, Ennetbaden, Aargau, Baden,Aargau, Ennetbaden,Aargau, 47.47288,8.30809, 47.4795038,8.3143249, 304
4026, 4026, 1497, 1497, Ennetbaden, Aargau, Ennetbaden, Aargau, Ennetbaden,Aargau, Ennetbaden,Aargau, 47.4795038,8.3143249, 47.4795038,8.3143249, 305
2831, 4252, 1102, 1529, Pratteln, Basel Land, Kaiseraugst, Aargau, Pratteln,Basel Land, Kaiseraugst,Aargau, 47.5183198,7.6919889, 47.5380277,7.7289624, 306
243, 4030, 31, 1533, Dietikon, Zürich, Killwangen, Aargau, Dietikon,Zürich, Killwangen,Aargau, 47.4053885,8.39977, 47.4326177,8.3484353, 307
1702, 4310, 741, 1536, Cham, Zug, Koblenz, Aargau, Cham,Zug, Koblenz,Aargau, 47.181225,8.4592089, 47.60954,8.23842, 308
4312, 4310, 1543, 1536, Lengnau (AG), Aargau, Koblenz, Aargau, Lengnau (AG),Aargau, Koblenz,Aargau, 47.5204237,8.3296194, 47.60954,8.23842, 309
2546, 4204, 957, 1570, Grenchen, Solothurn, Niederlenz, Aargau, Grenchen,Solothurn, Niederlenz,Aargau, 47.1922876,7.3958907, 47.4015698,8.1761165, 310
4671, 4204, 1706, 1570, Kreuzlingen, Thurgau, Niederlenz, Aargau, Kreuzlingen,Thurgau, Niederlenz,Aargau, 47.6447397,9.1707858, 47.4015698,8.1761165, 311
1331, 4237, 680, 1581, Küssnacht am Rigi, Schwyz, Oberrüti, Aargau, Küssnacht am Rigi,Schwyz, Oberrüti,Aargau, 47.0843237,8.4431621, 47.1659772,8.3944487, 312
1703, 4237, 742, 1581, Hünenberg, Zug, Oberrüti, Aargau, Hünenberg,Zug, Oberrüti,Aargau, 47.1771936,8.4271865, 47.1659772,8.3944487, 313
4021, 4237, 1455, 1581, Baden, Aargau, Oberrüti, Aargau, Baden,Aargau, Oberrüti,Aargau, 47.47288,8.30809, 47.1659772,8.3944487, 314
261, 4038, 1, 1582, Zürich, Zürich, Obersiggenthal, Aargau, Zürich,Zürich, Obersiggenthal,Aargau, 47.3768866,8.541694, 47.4869944,8.2918057, 315
2701, 4038, 1040, 1582, Basel, Basel, Obersiggenthal, Aargau, Basel,Basel, Obersiggenthal,Aargau, 47.5595986,7.5885761, 47.4869944,8.2918057, 316
2702, 4038, 1041, 1582, Bettingen, Basel, Obersiggenthal, Aargau, Bettingen,Basel, Obersiggenthal,Aargau, 47.5709866,7.6651414, 47.4869944,8.2918057, 317
2765, 4038, 1053, 1582, Binningen, Basel Land, Obersiggenthal, Aargau, Binningen,Basel Land, Obersiggenthal,Aargau, 47.5378697,7.5709878, 47.4869944,8.2918057, 318
4021, 4038, 1455, 1582, Baden, Aargau, Obersiggenthal, Aargau, Baden,Aargau, Obersiggenthal,Aargau, 47.47288,8.30809, 47.4869944,8.2918057, 319
4095, 4038, 1478, 1582, Brugg, Aargau, Obersiggenthal, Aargau, Brugg,Aargau, Obersiggenthal,Aargau, 47.4867355,8.2109103, 47.4869944,8.2918057, 320
4038, 4038, 1582, 1582, Obersiggenthal, Aargau, Obersiggenthal, Aargau, Obersiggenthal,Aargau, Obersiggenthal,Aargau, 47.4869944,8.2918057, 47.4869944,8.2918057, 321
5130, 4280, 1902, 1585, Tegna, Tessin, Oftringen, Aargau, Tegna,Tessin, Oftringen,Aargau, 46.186706,8.7443382, 47.3129528,7.9198655, 322
243, 4039, 31, 1591, Dietikon, Zürich, Remetschwil, Aargau, Dietikon,Zürich, Remetschwil,Aargau, 47.4053885,8.39977, 47.4083745,8.3266242, 323
1058, 4258, 601, 1593, Horw, Luzern, Rheinfelden, Aargau, Horw,Luzern, Rheinfelden,Aargau, 47.0184461,8.3079399, 47.55219,7.7922914, 324
5586, 4258, 1914, 1593, Lausanne, Waadt, Rheinfelden, Aargau, Lausanne,Waadt, Rheinfelden,Aargau, 46.5196535,6.6322734, 47.55219,7.7922914, 325
141, 4282, 140, 1596, Thalwil, Zürich, Rothrist, Aargau, Thalwil,Zürich, Rothrist,Aargau, 47.2949282,8.5644799, 47.302214,7.8774496, 326
243, 4075, 31, 1598, Dietikon, Zürich, Rudolfstetten-Friedlisberg, Aargau, Dietikon,Zürich, Rudolfstetten-Friedlisberg,Aargau, 47.4053885,8.39977, 47.3690655,8.3807414, 327
2888, 4075, 1083, 1598, Langenbruck, Basel Land, Rudolfstetten-Friedlisberg, Aargau, Langenbruck,Basel Land, Rudolfstetten-Friedlisberg,Aargau, 47.3483495,7.7686817, 47.3690655,8.3807414, 328
1703, 4239, 742, 1617, Hünenberg, Zug, Sins, Aargau, Hünenberg,Zug, Sins,Aargau, 47.1771936,8.4271865, 47.1914437,8.3956737, 329
4021, 4239, 1455, 1617, Baden, Aargau, Sins, Aargau, Baden,Aargau, Sins,Aargau, 47.47288,8.30809, 47.1914437,8.3956737, 330
261, 4040, 1, 1619, Zürich, Zürich, Spreitenbach, Aargau, Zürich,Zürich, Spreitenbach,Aargau, 47.3768866,8.541694, 47.4221702,8.3638854, 331
243, 4040, 31, 1619, Dietikon, Zürich, Spreitenbach, Aargau, Dietikon,Zürich, Spreitenbach,Aargau, 47.4053885,8.39977, 47.4221702,8.3638854, 332
158, 4040, 135, 1619, Stäfa, Zürich, Spreitenbach, Aargau, Stäfa,Zürich, Spreitenbach,Aargau, 47.2392343,8.7351356, 47.4221702,8.3638854, 333
243, 4081, 31, 1649, Dietikon, Zürich, Widen, Aargau, Dietikon,Zürich, Widen,Aargau, 47.4053885,8.39977, 47.3680474,8.3630648, 334
1702, 4566, 741, 1665, Cham, Zug, Frauenfeld, Thurgau, Cham,Zug, Frauenfeld,Thurgau, 47.181225,8.4592089, 47.5535997,8.8987541, 335
217, 4551, 39, 1666, Elgg, Zürich, Aadorf, Thurgau, Elgg,Zürich, Aadorf,Thurgau, 47.4910721,8.8665461, 47.4884348,8.9035411, 336
5586, 4641, 1914, 1668, Lausanne, Waadt, Altnau, Thurgau, Lausanne,Waadt, Altnau,Thurgau, 46.5196535,6.6322734, 47.6106454,9.2573197, 337
371, 4643, 201, 1679, Biel (BE), Bern, Bottighofen, Thurgau, Biel (BE),Bern, Bottighofen,Thurgau, 47.1367785,7.2467909, 47.6356004,9.2095187, 338
4643, 4643, 1679, 1679, Bottighofen, Thurgau, Bottighofen, Thurgau, Bottighofen,Thurgau, Bottighofen,Thurgau, 47.6356004,9.2095187, 47.6356004,9.2095187, 339
4683, 4671, 1708, 1706, Lengwil, Thurgau, Kreuzlingen, Thurgau, Lengwil,Thurgau, Kreuzlingen,Thurgau, 47.6185527,9.1931347, 47.6447397,9.1707858, 340
4851, 4671, 1722, 1706, Salenstein, Thurgau, Kreuzlingen, Thurgau, Salenstein,Thurgau, Kreuzlingen,Thurgau, 47.6689605,9.058747, 47.6447397,9.1707858, 341
3212, 4831, 1198, 1713, Eggersriet, Sankt Gallen, Müllheim, Thurgau, Eggersriet,Sankt Gallen, Müllheim,Thurgau, 47.4426685,9.4719247, 47.6020263,9.0019686, 342
4831, 4831, 1713, 1713, Müllheim, Thurgau, Müllheim, Thurgau, Müllheim,Thurgau, Müllheim,Thurgau, 47.6020263,9.0019686, 47.6020263,9.0019686, 343
3392, 4751, 1216, 1719, Kirchberg (SG), Sankt Gallen, Rickenbach (TG), Thurgau, Kirchberg (SG),Sankt Gallen, Rickenbach (TG),Thurgau, 47.4113533,9.0401819, 47.4493246,9.0498296, 344
4651, 4696, 1693, 1731, Gottlieben, Thurgau, Tägerwilen, Thurgau, Gottlieben,Thurgau, Tägerwilen,Thurgau, 47.6635399,9.1348964, 47.655571,9.1312081, 345
3392, 4786, 1216, 1742, Kirchberg (SG), Sankt Gallen, Wilen (TG), Thurgau, Kirchberg (SG),Sankt Gallen, Wilen (TG),Thurgau, 47.4113533,9.0401819, 47.4515396,9.0343854, 346
5130, 5130, 1902, 1902, Tegna, Tessin, Tegna, Tessin, Tegna,Tessin, Tegna,Tessin, 46.186706,8.7443382, 46.186706,8.7443382, 347
371, 5586, 201, 1914, Biel (BE), Bern, Lausanne, Waadt, Biel (BE),Bern, Lausanne,Waadt, 47.1367785,7.2467909, 46.5196535,6.6322734, 348
2703, 5586, 1042, 1914, Riehen, Basel, Lausanne, Waadt, Riehen,Basel, Lausanne,Waadt, 47.5848274,7.6499111, 46.5196535,6.6322734, 349
5632, 5586, 2030, 1914, Denges, Waadt, Lausanne, Waadt, Denges,Waadt, Lausanne,Waadt, 46.5248345,6.5414283, 46.5196535,6.6322734, 350
5643, 5586, 2189, 1914, Préverenges, Waadt, Lausanne, Waadt, Préverenges,Waadt, Lausanne,Waadt, 46.5175835,6.5252682, 46.5196535,6.6322734, 351
5648, 5586, 2224, 1914, Saint-Sulpice (VD), Waadt, Lausanne, Waadt, Saint-Sulpice (VD),Waadt, Lausanne,Waadt, 46.510114,6.5581951, 46.5196535,6.6322734, 352
5586, 5581, 1914, 1933, Lausanne, Waadt, Belmont-sur-Lausanne, Waadt, Lausanne,Waadt, Belmont-sur-Lausanne,Waadt, 46.5196535,6.6322734, 46.5191267,6.6789123, 353
5581, 5581, 1933, 1933, Belmont-sur-Lausanne, Waadt, Belmont-sur-Lausanne, Waadt, Belmont-sur-Lausanne,Waadt, Belmont-sur-Lausanne,Waadt, 46.5191267,6.6789123, 46.5191267,6.6789123, 354
6136, 5581, 2355, 1933, Martigny, Wallis, Belmont-sur-Lausanne, Waadt, Martigny,Wallis, Belmont-sur-Lausanne,Waadt, 46.1049798,7.0755334, 46.5191267,6.6789123, 355
5586, 5881, 1914, 1942, Lausanne, Waadt, Blonay, Waadt, Lausanne,Waadt, Blonay,Waadt, 46.5196535,6.6322734, 46.4647104,6.8946536, 356
5646, 5881, 2221, 1942, Saint-Prex, Waadt, Blonay, Waadt, Saint-Prex,Waadt, Blonay,Waadt, 46.4829113,6.4583435, 46.4647104,6.8946536, 357
2223, 5811, 836, 1966, Le Glèbe, Fribourg, Cerniaz (VD), Waadt, Le Glèbe,Fribourg, Cerniaz (VD),Waadt, 46.7163849,7.0330044, 46.7265588,6.8955942, 358
2321, 5884, 753, 2011, Attalens, Fribourg, Corsier-sur-Vevey, Waadt, Attalens,Fribourg, Corsier-sur-Vevey,Waadt, 46.5103309,6.8485685, 46.4725243,6.8482854, 359
2223, 5671, 836, 2033, Le Glèbe, Fribourg, Dompierre (VD), Waadt, Le Glèbe,Fribourg, Dompierre (VD),Waadt, 46.7163849,7.0330044, 46.7082946,6.8831226, 360
5890, 5518, 2258, 2037, Vevey, Waadt, Echallens, Waadt, Vevey,Waadt, Echallens,Waadt, 46.4628333,6.8419192, 46.6410996,6.6344508, 361
5633, 5633, 2038, 2038, Echandens, Waadt, Echandens, Waadt, Echandens,Waadt, Echandens,Waadt, 46.5352022,6.5418995, 46.5352022,6.5418995, 362
2321, 5787, 753, 2042, Attalens, Fribourg, Ecoteaux, Waadt, Attalens,Fribourg, Ecoteaux,Waadt, 46.5103309,6.8485685, 46.5457329,6.86271, 363
5641, 5635, 2134, 2043, Monnaz, Waadt, Ecublens (VD), Waadt, Monnaz,Waadt, Ecublens (VD),Waadt, 46.528668,6.4790064, 46.5296363,6.5615252, 364
5648, 5635, 2224, 2043, Saint-Sulpice (VD), Waadt, Ecublens (VD), Waadt, Saint-Sulpice (VD),Waadt, Ecublens (VD),Waadt, 46.510114,6.5581951, 46.5296363,6.5615252, 365
5503, 5635, 2278, 2043, Vufflens-la-Ville, Waadt, Ecublens (VD), Waadt, Vufflens-la-Ville,Waadt, Ecublens (VD),Waadt, 46.5787989,6.539418, 46.5296363,6.5615252, 366
5586, 5721, 1914, 2073, Lausanne, Waadt, Gland, Waadt, Lausanne,Waadt, Gland,Waadt, 46.5196535,6.6322734, 46.4203001,6.2698809, 367
5635, 5721, 2043, 2073, Ecublens (VD), Waadt, Gland, Waadt, Ecublens (VD),Waadt, Gland,Waadt, 46.5296363,6.5615252, 46.4203001,6.2698809, 368
2321, 5885, 753, 2088, Attalens, Fribourg, Jongny, Waadt, Attalens,Fribourg, Jongny,Waadt, 46.5103309,6.8485685, 46.4826453,6.8470796, 369
2321, 5801, 753, 2107, Attalens, Fribourg, Les Thioleyres, Waadt, Attalens,Fribourg, Les Thioleyres,Waadt, 46.5103309,6.8485685, 46.5396202,6.8118613, 370
2223, 5674, 836, 2113, Le Glèbe, Fribourg, Lovatens, Waadt, Le Glèbe,Fribourg, Lovatens,Waadt, 46.7163849,7.0330044, 46.6917509,6.8639494, 371
5582, 5606, 1988, 2119, Cheseaux-sur-Lausanne, Waadt, Lutry, Waadt, Cheseaux-sur-Lausanne,Waadt, Lutry,Waadt, 46.585452,6.6047712, 46.5088803,6.6827638, 372
5890, 5606, 2258, 2119, Vevey, Waadt, Lutry, Waadt, Vevey,Waadt, Lutry,Waadt, 46.4628333,6.8419192, 46.5088803,6.6827638, 373
5484, 5886, 2074, 2142, Gollion, Waadt, Montreux, Waadt, Gollion,Waadt, Montreux,Waadt, 46.5852808,6.5067932, 46.4312213,6.9106799, 374
5409, 5886, 2157, 2142, Ollon, Waadt, Montreux, Waadt, Ollon,Waadt, Montreux,Waadt, 46.2957462,6.9916269, 46.4312213,6.9106799, 375
5410, 5886, 2162, 2142, Ormont-Dessous, Waadt, Montreux, Waadt, Ormont-Dessous,Waadt, Montreux,Waadt, 46.3616617,7.0515386, 46.4312213,6.9106799, 376
6458, 5886, 2432, 2142, Neuchâtel, Neuchâtel, Montreux, Waadt, Neuchâtel,Neuchâtel, Montreux,Waadt, 46.9899874,6.9292732, 46.4312213,6.9106799, 377
3788, 5642, 1385, 2145, S-chanf, Graubünden, Morges, Waadt, S-chanf,Graubünden, Morges,Waadt, 46.6114275,9.9829535, 46.5088127,6.4961301, 378
5642, 5642, 2145, 2145, Morges, Waadt, Morges, Waadt, Morges,Waadt, Morges,Waadt, 46.5088127,6.4961301, 46.5088127,6.4961301, 379
5886, 5724, 2142, 2154, Montreux, Waadt, Nyon, Waadt, Montreux,Waadt, Nyon,Waadt, 46.4312213,6.9106799, 46.3832683,6.2347852, 380
6266, 5724, 2289, 2154, Sion, Wallis, Nyon, Waadt, Sion,Wallis, Nyon,Waadt, 46.2331221,7.360626, 46.3832683,6.2347852, 381
2321, 5795, 753, 2171, Attalens, Fribourg, Palézieux, Waadt, Attalens,Fribourg, Palézieux,Waadt, 46.5103309,6.8485685, 46.5547204,6.8297563, 382
5586, 5643, 1914, 2189, Lausanne, Waadt, Préverenges, Waadt, Lausanne,Waadt, Préverenges,Waadt, 46.5196535,6.6322734, 46.5175835,6.5252682, 383
5643, 5643, 2189, 2189, Préverenges, Waadt, Préverenges, Waadt, Préverenges,Waadt, Préverenges,Waadt, 46.5175835,6.5252682, 46.5175835,6.5252682, 384
2223, 5683, 836, 2190, Le Glèbe, Fribourg, Prévonloup, Waadt, Le Glèbe,Fribourg, Prévonloup,Waadt, 46.7163849,7.0330044, 46.6997998,6.8814659, 385
5582, 5590, 1988, 2194, Cheseaux-sur-Lausanne, Waadt, Pully, Waadt, Cheseaux-sur-Lausanne,Waadt, Pully,Waadt, 46.585452,6.6047712, 46.5092681,6.6654949, 386
5606, 5590, 2119, 2194, Lutry, Waadt, Pully, Waadt, Lutry,Waadt, Pully,Waadt, 46.5088803,6.6827638, 46.5092681,6.6654949, 387
5627, 5591, 1981, 2196, Chavannes-près-Renens, Waadt, Renens (VD), Waadt, Chavannes-près-Renens,Waadt, Renens (VD),Waadt, 46.5316376,6.5749696, 46.53381,6.59137, 388
2321, 5888, 753, 2218, Attalens, Fribourg, Saint-Légier-La Chiésaz, Waadt, Attalens,Fribourg, Saint-Légier-La Chiésaz,Waadt, 46.5103309,6.8485685, 46.4717185,6.8767709, 389
2223, 5826, 836, 2229, Le Glèbe, Fribourg, Seigneux, Waadt, Le Glèbe,Fribourg, Seigneux,Waadt, 46.7163849,7.0330044, 46.728,6.87861, 390
2701, 5799, 1040, 2232, Basel, Basel, Servion, Waadt, Basel,Basel, Servion,Waadt, 47.5595986,7.5885761, 46.57147,6.77879, 391
5422, 5729, 1924, 2241, Aubonne, Waadt, Tannay, Waadt, Aubonne,Waadt, Tannay,Waadt, 46.4953291,6.3918325, 46.310046,6.1735347, 392
5729, 5729, 2241, 2241, Tannay, Waadt, Tannay, Waadt, Tannay,Waadt, Tannay,Waadt, 46.310046,6.1735347, 46.310046,6.1735347, 393
6621, 5729, 2485, 2241, Genève, Genf, Tannay, Waadt, Genève,Genf, Tannay,Waadt, 46.2043907,6.1431577, 46.310046,6.1735347, 394
5484, 5890, 2074, 2258, Gollion, Waadt, Vevey, Waadt, Gollion,Waadt, Vevey,Waadt, 46.5852808,6.5067932, 46.4628333,6.8419192, 395
2223, 5829, 836, 2261, Le Glèbe, Fribourg, Villars-Bramard, Waadt, Le Glèbe,Fribourg, Villars-Bramard,Waadt, 46.7163849,7.0330044, 46.71921,6.89887, 396
2223, 5830, 836, 2272, Le Glèbe, Fribourg, Villarzel, Waadt, Le Glèbe,Fribourg, Villarzel,Waadt, 46.7163849,7.0330044, 46.7484013,6.9129687, 397
5648, 5938, 2224, 2286, Saint-Sulpice (VD), Waadt, Yverdon-les-Bains, Waadt, Saint-Sulpice (VD),Waadt, Yverdon-les-Bains,Waadt, 46.510114,6.5581951, 46.7784736,6.641183, 398
6436, 5938, 2465, 2286, Le Locle, Neuchâtel, Yverdon-les-Bains, Waadt, Le Locle,Neuchâtel, Yverdon-les-Bains,Waadt, 47.0577195,6.7487354, 46.7784736,6.641183, 399
5586, 6152, 1914, 2317, Lausanne, Waadt, Collombey-Muraz, Wallis, Lausanne,Waadt, Collombey-Muraz,Wallis, 46.5196535,6.6322734, 46.2710282,6.9459483, 400
2701, 6023, 1040, 2319, Basel, Basel, Conthey, Wallis, Basel,Basel, Conthey,Wallis, 47.5595986,7.5885761, 46.2244777,7.303512, 401
6191, 6023, 2295, 2319, Ausserberg, Wallis, Conthey, Wallis, Ausserberg,Wallis, Conthey,Wallis, 46.31444,7.8507, 46.2244777,7.303512, 402
2701, 6458, 1040, 2432, Basel, Basel, Neuchâtel, Neuchâtel, Basel,Basel, Neuchâtel,Neuchâtel, 47.5595986,7.5885761, 46.9899874,6.9292732, 403
5583, 6458, 2017, 2432, Crissier, Waadt, Neuchâtel, Neuchâtel, Crissier,Waadt, Neuchâtel,Neuchâtel, 46.5518687,6.5743458, 46.9899874,6.9292732, 404
5914, 6458, 2045, 2432, Ependes (VD), Waadt, Neuchâtel, Neuchâtel, Ependes (VD),Waadt, Neuchâtel,Neuchâtel, 46.7428093,6.6081451, 46.9899874,6.9292732, 405
739, 6407, 312, 2444, Ipsach, Bern, Corcelles-Cormondrèche, Neuchâtel, Ipsach,Bern, Corcelles-Cormondrèche,Neuchâtel, 47.1143109,7.232491, 46.98504,6.8723478, 406
6458, 6407, 2432, 2444, Neuchâtel, Neuchâtel, Corcelles-Cormondrèche, Neuchâtel, Neuchâtel,Neuchâtel, Corcelles-Cormondrèche,Neuchâtel, 46.9899874,6.9292732, 46.98504,6.8723478, 407
261, 6421, 1, 2458, Zürich, Zürich, La Chaux-de-Fonds, Neuchâtel, Zürich,Zürich, La Chaux-de-Fonds,Neuchâtel, 47.3768866,8.541694, 47.1034892,6.8327838, 408
191, 6421, 35, 2458, Dübendorf, Zürich, La Chaux-de-Fonds, Neuchâtel, Dübendorf,Zürich, La Chaux-de-Fonds,Neuchâtel, 47.3971476,8.6180128, 47.1034892,6.8327838, 409
5254, 6512, 1850, 2482, Mendrisio, Tessin, Val-de-Travers, Neuchâtel, Mendrisio,Tessin, Val-de-Travers,Neuchâtel, 45.8713339,8.9841329, 46.90449,6.5841256, 410
5203, 6512, 1860, 2482, Morcote, Tessin, Val-de-Travers, Neuchâtel, Morcote,Tessin, Val-de-Travers,Neuchâtel, 45.9278156,8.9078997, 46.90449,6.5841256, 411
6608, 6512, 2493, 2482, Carouge (GE), Genf, Val-de-Travers, Neuchâtel, Carouge (GE),Genf, Val-de-Travers,Neuchâtel, 46.1829674,6.1378539, 46.90449,6.5841256, 412
6741, 6512, 2565, 2482, Le Bémont, Jura, Val-de-Travers, Neuchâtel, Le Bémont,Jura, Val-de-Travers,Neuchâtel, 47.2641535,7.0135675, 46.90449,6.5841256, 413
351, 6621, 172, 2485, Bern, Bern, Genève, Genf, Bern,Bern, Genève,Genf, 46.9479739,7.4474468, 46.2043907,6.1431577, 414
4021, 6621, 1455, 2485, Baden, Aargau, Genève, Genf, Baden,Aargau, Genève,Genf, 47.47288,8.30809, 46.2043907,6.1431577, 415
4095, 6621, 1478, 2485, Brugg, Aargau, Genève, Genf, Brugg,Aargau, Genève,Genf, 47.4867355,8.2109103, 46.2043907,6.1431577, 416
5635, 6621, 2043, 2485, Ecublens (VD), Waadt, Genève, Genf, Ecublens (VD),Waadt, Genève,Genf, 46.5296363,6.5615252, 46.2043907,6.1431577, 417
5606, 6621, 2119, 2485, Lutry, Waadt, Genève, Genf, Lutry,Waadt, Genève,Genf, 46.5088803,6.6827638, 46.2043907,6.1431577, 418
5888, 6621, 2218, 2485, Saint-Légier-La Chiésaz, Waadt, Genève, Genf, Saint-Légier-La Chiésaz,Waadt, Genève,Genf, 46.4717185,6.8767709, 46.2043907,6.1431577, 419
5647, 6621, 2223, 2485, Saint-Saphorin-sur-Morges, Waadt, Genève, Genf, Saint-Saphorin-sur-Morges,Waadt, Genève,Genf, 46.5460528,6.4883645, 46.2043907,6.1431577, 420
6800, 6621, 2579, 2485, Porrentruy, Jura, Genève, Genf, Porrentruy,Jura, Genève,Genf, 47.416647,7.0765657, 46.2043907,6.1431577, 421
6621, 6608, 2485, 2493, Genève, Genf, Carouge (GE), Genf, Genève,Genf, Carouge (GE),Genf, 46.2043907,6.1431577, 46.1829674,6.1378539, 422
6628, 6608, 2511, 2493, Lancy, Genf, Carouge (GE), Genf, Lancy,Genf, Carouge (GE),Genf, 46.1885168,6.1144546, 46.1829674,6.1378539, 423
5886, 6610, 2142, 2495, Montreux, Waadt, Céligny, Genf, Montreux,Waadt, Céligny,Genf, 46.4312213,6.9106799, 46.3504128,6.1952524, 424
5725, 6610, 2187, 2495, Prangins, Waadt, Céligny, Genf, Prangins,Waadt, Céligny,Genf, 46.3943352,6.2492927, 46.3504128,6.1952524, 425
6621, 6615, 2485, 2500, Genève, Genf, Collex-Bossy, Genf, Genève,Genf, Collex-Bossy,Genf, 46.2043907,6.1431577, 46.2715983,6.125981, 426
6633, 6617, 2517, 2502, Plan-les-Ouates, Genf, Cologny, Genf, Plan-les-Ouates,Genf, Cologny,Genf, 46.1668075,6.1145793, 46.224552,6.1827372, 427
5586, 6625, 1914, 2508, Lausanne, Waadt, Hermance, Genf, Lausanne,Waadt, Hermance,Genf, 46.5196535,6.6322734, 46.3006983,6.2449688, 428
5503, 6625, 2278, 2508, Vufflens-la-Ville, Waadt, Hermance, Genf, Vufflens-la-Ville,Waadt, Hermance,Genf, 46.5787989,6.539418, 46.3006983,6.2449688, 429
2762, 6626, 1045, 2509, Allschwil, Basel Land, Jussy, Genf, Allschwil,Basel Land, Jussy,Genf, 47.5528925,7.5433615, 46.2347656,6.2652187, 430
6621, 6626, 2485, 2509, Genève, Genf, Jussy, Genf, Genève,Genf, Jussy,Genf, 46.2043907,6.1431577, 46.2347656,6.2652187, 431
6621, 6628, 2485, 2511, Genève, Genf, Lancy, Genf, Genève,Genf, Lancy,Genf, 46.2043907,6.1431577, 46.1885168,6.1144546, 432
6628, 6628, 2511, 2511, Lancy, Genf, Lancy, Genf, Lancy,Genf, Lancy,Genf, 46.1885168,6.1144546, 46.1885168,6.1144546, 433
5635, 6630, 2043, 2514, Ecublens (VD), Waadt, Meyrin, Genf, Ecublens (VD),Waadt, Meyrin,Genf, 46.5296363,6.5615252, 46.2283204,6.070988, 434
6621, 6632, 2485, 2516, Genève, Genf, Perly-Certoux, Genf, Genève,Genf, Perly-Certoux,Genf, 46.2043907,6.1431577, 46.1553483,6.0945809, 435
6615, 6643, 2500, 2527, Collex-Bossy, Genf, Vernier, Genf, Collex-Bossy,Genf, Vernier,Genf, 46.2715983,6.125981, 46.2122638,6.1052686, 436
6608, 6742, 2493, 2567, Carouge (GE), Genf, Les Bois, Jura, Carouge (GE),Genf, Les Bois,Jura, 46.1829674,6.1378539, 47.1774878,6.9052937, 437
6741, 6742, 2565, 2567, Le Bémont, Jura, Les Bois, Jura, Le Bémont,Jura, Les Bois,Jura, 47.2641535,7.0135675, 47.1774878,6.9052937, 438
print(town)
['Zürich', 'Zürich', 'Zürich', 'Zürich', 'Zürich', 'Zürich', 'Zürich', 'Zürich', 'Zürich', 'Bubikon', 'Dachsen', 'Dachsen', 'Dachsen', 'Dänikon', 'Dietikon', 'Dietlikon', 'Elgg', 'Elgg', 'Feuerthalen', 'Feuerthalen', 'Feuerthalen', 'Flurlingen', 'Flurlingen', 'Flurlingen', 'Flurlingen', 'Flurlingen', 'Freienstein-Teufen', 'Freienstein-Teufen', 'Hagenbuch', 'Hagenbuch', 'Hütten', 'Hütten', 'Hütten', 'Hütten', 'Hütten', 'Hüttikon', 'Illnau-Effretikon', 'Illnau-Effretikon', 'Kappel am Albis', 'Kappel am Albis', 'Kappel am Albis', 'Kappel am Albis', 'Kappel am Albis', 'Kloten', 'Knonau', 'Knonau', 'Knonau', 'Knonau', 'Laufen-Uhwiesen', 'Laufen-Uhwiesen', 'Laufen-Uhwiesen', 'Männedorf', 'Männedorf', 'Maschwanden', 'Maschwanden', 'Maschwanden', 'Maschwanden', 'Maschwanden', 'Maschwanden', 'Maur', 'Niederweningen', 'Oetwil an der Limmat', 'Opfikon', 'Opfikon', 'Rafz', 'Rafz', 'Richterswil', 'Richterswil', 'Schlieren', 'Schönenberg (ZH)', 'Schönenberg (ZH)', 'Schönenberg (ZH)', 'Schönenberg (ZH)', 'Schwerzenbach', 'Stäfa', 'Urdorf', 'Uster', 'Uster', 'Volketswil', 'Wald (ZH)', 'Wald (ZH)', 'Weiningen (ZH)', 'Wetzikon (ZH)', 'Winterthur', 'Zell (ZH)', 'Zell (ZH)', 'Bern', 'Bern', 'Bern', 'Burgdorf', 'Court', 'Gals', 'Gampelen', 'Hilterfingen', 'Hilterfingen', 'Ipsach', 'Ipsach', 'La Ferrière', 'La Ferrière', 'Lengnau (BE)', 'Meiringen', 'Meiringen', 'Muri bei Bern', 'Romont (BE)', 'Steffisburg', 'Steffisburg', 'Thun', 'Thun', 'Tschugg', 'Vechigen', 'Vechigen', 'Luzern', 'Luzern', 'Luzern', 'Luzern', 'Altishofen', 'Altishofen', 'Gisikon', 'Gisikon', 'Honau', 'Honau', 'Horw', 'Horw', 'Horw', 'Kriens', 'Kriens', 'Kriens', 'Meggen', 'Meierskappel', 'Meierskappel', 'Root', 'Root', 'Schongau', 'Weggis', 'Altdorf (UR)', 'Altdorf (UR)', 'Altendorf', 'Altendorf', 'Einsiedeln', 'Feusisberg', 'Feusisberg', 'Freienbach', 'Freienbach', 'Freienbach', 'Unteriberg', 'Wollerau', 'Sarnen', 'Sarnen', 'Sarnen', 'Sarnen', 'Sarnen', 'Engelberg', 'Kerns', 'Stans', 'Stans', 'Ennetbürgen', 'Hergiswil (NW)', 'Hergiswil (NW)', 'Hergiswil (NW)', 'Stansstad', 'Stansstad', 'Stansstad', 'Linthal', 'Zug', 'Zug', 'Zug', 'Zug', 'Zug', 'Zug', 'Baar', 'Baar', 'Baar', 'Baar', 'Baar', 'Cham', 'Cham', 'Cham', 'Hünenberg', 'Walchwil', 'Attalens', 'Attalens', 'Auboranges', 'Chapelle', 'Romont', 'Bättwil', 'Bättwil', 'Bättwil', 'Bättwil', 'Dornach', 'Dornach', 'Dornach', 'Egerkingen', 'Egerkingen', 'Eppenberg-Wöschnau', 'Eppenberg-Wöschnau', 'Grenchen', 'Härkingen', 'Härkingen', 'Himmelried', 'Himmelried', 'Hochwald', 'Hofstetten-Flüh', 'Metzerlen-Mariastein', 'Nuglar-St.Pantaleon', 'Nuglar-St.Pantaleon', 'Olten', 'Schönenwerd', 'Schönenwerd', 'Basel', 'Riehen', 'Aesch (BL)', 'Arlesheim', 'Biel-Benken (BL)', 'Binningen', 'Binningen', 'Binningen', 'Binningen', 'Blauen', 'Blauen', 'Brislach', 'Duggingen', 'Ettingen', 'Grellingen', 'Langenbruck', 'Laufen', 'Maisprach', 'Münchenstein', 'Nenzlingen', 'Oberwil (BL)', 'Pfeffingen', 'Pfeffingen', 'Pfeffingen', 'Pfeffingen', 'Schönenbuch', 'Therwil', 'Wahlen', 'Zwingen', 'Schaffhausen', 'Buchberg', 'Buchberg', 'Buchberg', 'Rüdlingen', 'Rüdlingen', 'Lutzenberg', 'Reute', 'Teufen', 'Teufen', 'Teufen', 'Teufen', 'Walzenhausen', 'Walzenhausen', 'Walzenhausen', 'Wolfhalden', 'Oberegg', 'St. Gallen', 'St. Gallen', 'St. Gallen', 'St. Gallen', 'Altstätten', 'Berneck', 'Berneck', 'Buchs (SG)', 'Buchs (SG)', 'Eschenbach (SG)', 'Gams', 'Gams', 'Goldingen', 'Kirchberg (SG)', 'Kirchberg (SG)', 'Rüthi (SG)', 'Rüthi (SG)', 'St. Margrethen', 'Walenstadt', 'Walenstadt', 'Widnau', 'Widnau', 'Widnau', 'Chur', 'Chur', 'Chur', 'Arosa', 'Arosa', 'Davos', 'Maienfeld', 'Maienfeld', 'Maienfeld', 'St. Moritz', 'St. Moritz', 'Aarau', 'Aarburg', 'Bad Zurzach', 'Bad Zurzach', 'Bellikon', 'Bergdietikon', 'Bergdietikon', 'Berikon', 'Bettwil', 'Bettwil', 'Dietwil', 'Dietwil', 'Dietwil', 'Elfingen', 'Elfingen', 'Ennetbaden', 'Ennetbaden', 'Kaiseraugst', 'Killwangen', 'Koblenz', 'Koblenz', 'Niederlenz', 'Niederlenz', 'Oberrüti', 'Oberrüti', 'Oberrüti', 'Obersiggenthal', 'Obersiggenthal', 'Obersiggenthal', 'Obersiggenthal', 'Obersiggenthal', 'Obersiggenthal', 'Obersiggenthal', 'Oftringen', 'Remetschwil', 'Rheinfelden', 'Rheinfelden', 'Rothrist', 'Rudolfstetten-Friedlisberg', 'Rudolfstetten-Friedlisberg', 'Sins', 'Sins', 'Spreitenbach', 'Spreitenbach', 'Spreitenbach', 'Widen', 'Frauenfeld', 'Aadorf', 'Altnau', 'Bottighofen', 'Bottighofen', 'Kreuzlingen', 'Kreuzlingen', 'Müllheim', 'Müllheim', 'Rickenbach (TG)', 'Tägerwilen', 'Wilen (TG)', 'Tegna', 'Lausanne', 'Lausanne', 'Lausanne', 'Lausanne', 'Lausanne', 'Belmont-sur-Lausanne', 'Belmont-sur-Lausanne', 'Belmont-sur-Lausanne', 'Blonay', 'Blonay', 'Cerniaz (VD)', 'Corsier-sur-Vevey', 'Dompierre (VD)', 'Echallens', 'Echandens', 'Ecoteaux', 'Ecublens (VD)', 'Ecublens (VD)', 'Ecublens (VD)', 'Gland', 'Gland', 'Jongny', 'Les Thioleyres', 'Lovatens', 'Lutry', 'Lutry', 'Montreux', 'Montreux', 'Montreux', 'Montreux', 'Morges', 'Morges', 'Nyon', 'Nyon', 'Palézieux', 'Préverenges', 'Préverenges', 'Prévonloup', 'Pully', 'Pully', 'Renens (VD)', 'Saint-Légier-La Chiésaz', 'Seigneux', 'Servion', 'Tannay', 'Tannay', 'Tannay', 'Vevey', 'Villars-Bramard', 'Villarzel', 'Yverdon-les-Bains', 'Yverdon-les-Bains', 'Collombey-Muraz', 'Conthey', 'Conthey', 'Neuchâtel', 'Neuchâtel', 'Neuchâtel', 'Corcelles-Cormondrèche', 'Corcelles-Cormondrèche', 'La Chaux-de-Fonds', 'La Chaux-de-Fonds', 'Val-de-Travers', 'Val-de-Travers', 'Val-de-Travers', 'Val-de-Travers', 'Genève', 'Genève', 'Genève', 'Genève', 'Genève', 'Genève', 'Genève', 'Genève', 'Carouge (GE)', 'Carouge (GE)', 'Céligny', 'Céligny', 'Collex-Bossy', 'Cologny', 'Hermance', 'Hermance', 'Jussy', 'Jussy', 'Lancy', 'Lancy', 'Meyrin', 'Perly-Certoux', 'Vernier', 'Les Bois', 'Les Bois']
Example 1#
import googlemaps
from datetime import datetime
gmaps = googlemaps.Client(key='AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM')
gmaps.geocode( "Bretania, Loreto", region="pe")[0]["geometry"]["location"]
{'lat': -5.2553911, 'lng': -74.3453577}
geocode_result = gmaps.geocode( "colegio guadalupe, Peru" , region='pe')
geocode_result
geocode_result = gmaps.geocode( "" , region='pe')
geocode_result
geocode_result
geocode_result[0]['geometry']['location']['lat']
geocode_result[0]['geometry']['location']['lng']
town
type(town)
list
len(town)
438
from random import sample
town1 = sample(town, 10)
town1
['Linthal',
'Männedorf',
'Bern',
'Obersiggenthal',
'Basel',
'Kriens',
'Dompierre (VD)',
'Kreuzlingen',
'Altdorf (UR)',
'Feusisberg']
# town1 = town[0:10]
# town1
town1
['Linthal',
'Männedorf',
'Bern',
'Obersiggenthal',
'Basel',
'Kriens',
'Dompierre (VD)',
'Kreuzlingen',
'Altdorf (UR)',
'Feusisberg']
for gem in tqdm(town1):
print(gem)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/1585252799.py:1: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for gem in tqdm(town1):
Linthal
Männedorf
Bern
Obersiggenthal
Basel
Kriens
Dompierre (VD)
Kreuzlingen
Altdorf (UR)
Feusisberg
# Generate a Matrix
coord = np.zeros(shape=( len(town1), 2), dtype =float)
i=0
gmaps = googlemaps.Client(key='AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE')
# Loop over lists
for gem in tqdm(town1):
# Geocoding an address
geocode_result = gmaps.geocode( gem , region = 'ch')
# Check the len of result
if len(geocode_result)==0 :
coord[i][0] = np.nan
coord[i][1] = np.nan
# Get info
else :
coord[i][0] = geocode_result[0]['geometry']['location']['lat']
coord[i][1] = geocode_result[0]['geometry']['location']['lng']
i=i+1
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/4139154875.py:8: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for gem in tqdm(town1):
coord
array([[46.9218287, 8.9996438],
[47.2574625, 8.6946733],
[46.9479739, 7.4474468],
[47.4869944, 8.2918057],
[47.5595986, 7.5885761],
[47.0341978, 8.2772552],
[46.7082946, 6.8831226],
[47.6447397, 9.1707858],
[46.8821272, 8.6428436],
[47.1869781, 8.7469796]])
geodata = pd.DataFrame( coord.tolist() , columns = ["Lat", "Lon"] )
geodata
Lat | Lon | |
---|---|---|
0 | 47.578822 | 8.571969 |
1 | 47.537870 | 7.570988 |
2 | 47.522649 | 7.615066 |
3 | 46.509268 | 6.665495 |
4 | 47.191482 | 8.829904 |
5 | 46.977594 | 8.337421 |
6 | 47.223650 | 8.462780 |
7 | 46.977594 | 8.337421 |
8 | 47.376887 | 8.541694 |
9 | 47.034198 | 8.277255 |
geodata['gem'] = town1
geodata
Lat | Lon | gem | |
---|---|---|---|
0 | 47.578822 | 8.571969 | Rüdlingen |
1 | 47.537870 | 7.570988 | Binningen |
2 | 47.522649 | 7.615066 | Münchenstein |
3 | 46.509268 | 6.665495 | Pully |
4 | 47.191482 | 8.829904 | Altendorf |
5 | 46.977594 | 8.337421 | Stansstad |
6 | 47.223650 | 8.462780 | Knonau |
7 | 46.977594 | 8.337421 | Stansstad |
8 | 47.376887 | 8.541694 | Zürich |
9 | 47.034198 | 8.277255 | Kriens |
data_final = np.concatenate( ( coord , np.array(town1).reshape(-1, 1)), axis = 1 )
data_final
array([['47.5788217', '8.5719688', 'Rüdlingen'],
['47.53786969999999', '7.570987799999998', 'Binningen'],
['47.5226485', '7.6150661', 'Münchenstein'],
['46.5092681', '6.6654949', 'Pully'],
['47.1914822', '8.829904299999999', 'Altendorf'],
['46.977594', '8.3374207', 'Stansstad'],
['47.22365', '8.46278', 'Knonau'],
['46.977594', '8.3374207', 'Stansstad'],
['47.3768866', '8.541694', 'Zürich'],
['47.0341978', '8.277255199999999', 'Kriens']], dtype='<U32')
np.savetxt( r"coordinates_1.csv", \
coord, delimiter="," , fmt='%1.7f')
Path 2 - Iterrows#
#Gettting the character format
import chardet
rawdata = open( r'../_data/ID_Routes_firms.csv', 'rb').read()
result = chardet.detect(rawdata)
result
{'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}
charenc = result['encoding']
print(charenc)
UTF-8-SIG
geodata = pd.read_csv( r'../_data/ID_Routes_firms.csv' , delimiter = ',' , header = None , encoding = charenc )
geodata = geodata.rename( columns = { geodata.columns[ 6 ] : 'town' } )
geodata
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | 10 | 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1401 | 261 | 699 | 1 | Alpnach | Obwalden | Zürich | Zürich | Alpnach,Obwalden | Zürich,Zürich | 46.9380412,8.2701754 | 47.3768866,8.541694 | 1 |
1 | 1507 | 261 | 712 | 1 | Hergiswil (NW) | Nidwalden | Zürich | Zürich | Hergiswil (NW),Nidwalden | Zürich,Zürich | 46.9905821,8.3083735 | 47.3768866,8.541694 | 2 |
2 | 3943 | 261 | 1347 | 1 | Mastrils | Graubünden | Zürich | Zürich | Mastrils,Graubünden | Zürich,Zürich | 46.96628,9.54229 | 47.3768866,8.541694 | 3 |
3 | 5236 | 261 | 1802 | 1 | Collina d'Oro | Tessin | Zürich | Zürich | Collina d'Oro,Tessin | Zürich,Zürich | 45.9821607,8.917103 | 47.3768866,8.541694 | 4 |
4 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | Lugano,Tessin | Zürich,Zürich | 46.0036778,8.951052 | 47.3768866,8.541694 | 5 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
433 | 5635 | 6630 | 2043 | 2514 | Ecublens (VD) | Waadt | Meyrin | Genf | Ecublens (VD),Waadt | Meyrin,Genf | 46.5296363,6.5615252 | 46.2283204,6.070988 | 434 |
434 | 6621 | 6632 | 2485 | 2516 | Genève | Genf | Perly-Certoux | Genf | Genève,Genf | Perly-Certoux,Genf | 46.2043907,6.1431577 | 46.1553483,6.0945809 | 435 |
435 | 6615 | 6643 | 2500 | 2527 | Collex-Bossy | Genf | Vernier | Genf | Collex-Bossy,Genf | Vernier,Genf | 46.2715983,6.125981 | 46.2122638,6.1052686 | 436 |
436 | 6608 | 6742 | 2493 | 2567 | Carouge (GE) | Genf | Les Bois | Jura | Carouge (GE),Genf | Les Bois,Jura | 46.1829674,6.1378539 | 47.1774878,6.9052937 | 437 |
437 | 6741 | 6742 | 2565 | 2567 | Le Bémont | Jura | Les Bois | Jura | Le Bémont,Jura | Les Bois,Jura | 47.2641535,7.0135675 | 47.1774878,6.9052937 | 438 |
438 rows × 13 columns
geodata_2 = geodata.sample(n=10, random_state=1)
geodata_2
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | 10 | 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
369 | 2321 | 5801 | 753 | 2107 | Attalens | Fribourg | Les Thioleyres | Waadt | Attalens,Fribourg | Les Thioleyres,Waadt | 46.5103309,6.8485685 | 46.5396202,6.8118613 | 370 |
201 | 4253 | 2476 | 1549 | 972 | Magden | Aargau | Hofstetten-Flüh | Solothurn | Magden,Aargau | Hofstetten-Flüh,Solothurn | 47.5266505,7.814835 | 47.4769723,7.5117799 | 202 |
122 | 246 | 1058 | 107 | 601 | Oetwil an der Limmat | Zürich | Horw | Luzern | Oetwil an der Limmat,Zürich | Horw,Luzern | 47.4274949,8.394824 | 47.0184461,8.3079399 | 123 |
242 | 217 | 2938 | 39 | 1148 | Elgg | Zürich | Rüdlingen | Schaffhausen | Elgg,Zürich | Rüdlingen,Schaffhausen | 47.4910721,8.8665461 | 47.5788217,8.5719689 | 243 |
420 | 6800 | 6621 | 2579 | 2485 | Porrentruy | Jura | Genève | Genf | Porrentruy,Jura | Genève,Genf | 47.416647,7.0765657 | 46.2043907,6.1431577 | 421 |
257 | 4671 | 3203 | 1706 | 1182 | Kreuzlingen | Thurgau | St. Gallen | Sankt Gallen | Kreuzlingen,Thurgau | St. Gallen,Sankt Gallen | 47.6447397,9.1707858 | 47.4244818,9.3767173 | 258 |
286 | 154 | 3787 | 80 | 1405 | Küsnacht (ZH) | Zürich | St. Moritz | Graubünden | Küsnacht (ZH),Zürich | St. Moritz,Graubünden | 47.3189227,8.5844705 | 46.4907973,9.8355079 | 287 |
164 | 2254 | 1711 | 790 | 739 | Courtepin | Fribourg | Zug | Zug | Courtepin,Fribourg | Zug,Zug | 46.8653104,7.1238213 | 47.1661672,8.5154946 | 165 |
284 | 3953 | 3953 | 1342 | 1342 | Maienfeld | Graubünden | Maienfeld | Graubünden | Maienfeld,Graubünden | Maienfeld,Graubünden | 47.00571,9.530813 | 47.00571,9.530813 | 285 |
4 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | Lugano,Tessin | Zürich,Zürich | 46.0036778,8.951052 | 47.3768866,8.541694 | 5 |
geodata_2['town'].shape[0]
10
for index,row in tqdm(geodata_2.iterrows()):
print(row[4])
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/1188249757.py:1: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for index,row in tqdm(geodata_2.iterrows()):
Attalens
Magden
Oetwil an der Limmat
Elgg
Porrentruy
Kreuzlingen
Küsnacht (ZH)
Courtepin
Maienfeld
Lugano
# coord = np.zeros(shape=(geodata_2['town'].shape[0],2), dtype =float)
# coord
# We work with only 10% of data
geodata_10p = geodata.sample(frac=0.1, replace=False, random_state=1)
geodata_10p.shape
(44, 13)
geodata_2['town'].shape[0]
10
import googlemaps
from datetime import datetime
coord = np.zeros(shape=( geodata_2['town'].shape[0] , 2), dtype = float )
i=0
gmaps = googlemaps.Client( key='AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE' )
for index, row in tqdm(geodata_2.iterrows()):
# Geocoding an address
geocode_result = gmaps.geocode( row['town'] , region='ch')
if len(geocode_result)==0 :
coord[i][0] = "nan"
coord[i][1] = "nan"
i=i+1
print(row['town'])
print("el codigo encontro error")
else :
coord[i][0]=geocode_result[0]['geometry']['location']['lat']
coord[i][1]=geocode_result[0]['geometry']['location']['lng']
i=i+1
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/1368181151.py:10: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for index, row in tqdm(geodata_2.iterrows()):
coord
array([[46.5396202, 6.8118613],
[47.4769723, 7.5117799],
[47.0184461, 8.3079399],
[47.5788217, 8.5719688],
[46.2043907, 6.1431577],
[47.4244818, 9.3767173],
[46.4907973, 9.8355079],
[47.1661672, 8.5154946],
[47.00571 , 9.530813 ],
[47.3768866, 8.541694 ]])
geodata_2[ [ 'latitude' , 'longitud' ] ] = pd.DataFrame( coord.tolist(), index = geodata_2.index )
geodata_2
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | 10 | 11 | 12 | latitude | longitud | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
369 | 2321 | 5801 | 753 | 2107 | Attalens | Fribourg | Les Thioleyres | Waadt | Attalens,Fribourg | Les Thioleyres,Waadt | 46.5103309,6.8485685 | 46.5396202,6.8118613 | 370 | 46.539620 | 6.811861 |
201 | 4253 | 2476 | 1549 | 972 | Magden | Aargau | Hofstetten-Flüh | Solothurn | Magden,Aargau | Hofstetten-Flüh,Solothurn | 47.5266505,7.814835 | 47.4769723,7.5117799 | 202 | 47.476972 | 7.511780 |
122 | 246 | 1058 | 107 | 601 | Oetwil an der Limmat | Zürich | Horw | Luzern | Oetwil an der Limmat,Zürich | Horw,Luzern | 47.4274949,8.394824 | 47.0184461,8.3079399 | 123 | 47.018446 | 8.307940 |
242 | 217 | 2938 | 39 | 1148 | Elgg | Zürich | Rüdlingen | Schaffhausen | Elgg,Zürich | Rüdlingen,Schaffhausen | 47.4910721,8.8665461 | 47.5788217,8.5719689 | 243 | 47.578822 | 8.571969 |
420 | 6800 | 6621 | 2579 | 2485 | Porrentruy | Jura | Genève | Genf | Porrentruy,Jura | Genève,Genf | 47.416647,7.0765657 | 46.2043907,6.1431577 | 421 | 46.204391 | 6.143158 |
257 | 4671 | 3203 | 1706 | 1182 | Kreuzlingen | Thurgau | St. Gallen | Sankt Gallen | Kreuzlingen,Thurgau | St. Gallen,Sankt Gallen | 47.6447397,9.1707858 | 47.4244818,9.3767173 | 258 | 47.424482 | 9.376717 |
286 | 154 | 3787 | 80 | 1405 | Küsnacht (ZH) | Zürich | St. Moritz | Graubünden | Küsnacht (ZH),Zürich | St. Moritz,Graubünden | 47.3189227,8.5844705 | 46.4907973,9.8355079 | 287 | 46.490797 | 9.835508 |
164 | 2254 | 1711 | 790 | 739 | Courtepin | Fribourg | Zug | Zug | Courtepin,Fribourg | Zug,Zug | 46.8653104,7.1238213 | 47.1661672,8.5154946 | 165 | 47.166167 | 8.515495 |
284 | 3953 | 3953 | 1342 | 1342 | Maienfeld | Graubünden | Maienfeld | Graubünden | Maienfeld,Graubünden | Maienfeld,Graubünden | 47.00571,9.530813 | 47.00571,9.530813 | 285 | 47.005710 | 9.530813 |
4 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | Lugano,Tessin | Zürich,Zürich | 46.0036778,8.951052 | 47.3768866,8.541694 | 5 | 47.376887 | 8.541694 |
np.savetxt(r"coordinates_2.csv", coord \
, delimiter="," , fmt='%1.7f')
Path 3 - Functions#
def get_results( result_api ):
try:
lat = result_api[0]['geometry']['location']['lat']
lon = result_api[0]['geometry']['location']['lng']
except:
lat = np.nan
lon = np.nan
return ( lat, lon )
geodata = pd.read_csv( r'../_data/ID_Routes_firms.csv' , delimiter = ',' , header = None , encoding = charenc )
# df1 = geodata.iloc[ 0:10 , :].copy()
geodata
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1401 | 261 | 699 | 1 | Alpnach | Obwalden | Zürich | Zürich | Alpnach,Obwalden | Zürich,Zürich | 46.9380412,8.2701754 | 47.3768866,8.541694 | 1 |
1 | 1507 | 261 | 712 | 1 | Hergiswil (NW) | Nidwalden | Zürich | Zürich | Hergiswil (NW),Nidwalden | Zürich,Zürich | 46.9905821,8.3083735 | 47.3768866,8.541694 | 2 |
2 | 3943 | 261 | 1347 | 1 | Mastrils | Graubünden | Zürich | Zürich | Mastrils,Graubünden | Zürich,Zürich | 46.96628,9.54229 | 47.3768866,8.541694 | 3 |
3 | 5236 | 261 | 1802 | 1 | Collina d'Oro | Tessin | Zürich | Zürich | Collina d'Oro,Tessin | Zürich,Zürich | 45.9821607,8.917103 | 47.3768866,8.541694 | 4 |
4 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | Lugano,Tessin | Zürich,Zürich | 46.0036778,8.951052 | 47.3768866,8.541694 | 5 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
433 | 5635 | 6630 | 2043 | 2514 | Ecublens (VD) | Waadt | Meyrin | Genf | Ecublens (VD),Waadt | Meyrin,Genf | 46.5296363,6.5615252 | 46.2283204,6.070988 | 434 |
434 | 6621 | 6632 | 2485 | 2516 | Genève | Genf | Perly-Certoux | Genf | Genève,Genf | Perly-Certoux,Genf | 46.2043907,6.1431577 | 46.1553483,6.0945809 | 435 |
435 | 6615 | 6643 | 2500 | 2527 | Collex-Bossy | Genf | Vernier | Genf | Collex-Bossy,Genf | Vernier,Genf | 46.2715983,6.125981 | 46.2122638,6.1052686 | 436 |
436 | 6608 | 6742 | 2493 | 2567 | Carouge (GE) | Genf | Les Bois | Jura | Carouge (GE),Genf | Les Bois,Jura | 46.1829674,6.1378539 | 47.1774878,6.9052937 | 437 |
437 | 6741 | 6742 | 2565 | 2567 | Le Bémont | Jura | Les Bois | Jura | Le Bémont,Jura | Les Bois,Jura | 47.2641535,7.0135675 | 47.1774878,6.9052937 | 438 |
438 rows × 13 columns
data = geodata.sample( frac = 0.1 )
data = data.rename( columns = { geodata.columns[ 6 ] : 'town', geodata.columns[ 10 ] : 'coordinates' } )
Apply and Lambda usage in pandas#
data.iloc[0, 10].split(",")
['47.3825634', '8.6577503']
len(data.iloc[0, 10].split(","))
2
def num_elements(element):
return len(element.split(","))
num_elements("alex, anzony, raul, carlos")
4
data.head()
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | coordinates | 11 | 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
73 | 197 | 197 | 131 | 131 | Schwerzenbach | Zürich | Schwerzenbach | Zürich | Schwerzenbach,Zürich | Schwerzenbach,Zürich | 47.3825634,8.6577503 | 47.3825634,8.6577503 | 74 |
182 | 2701 | 2066 | 1040 | 773 | Basel | Basel | Chapelle | Fribourg | Basel,Basel | Chapelle,Fribourg | 47.5595986,7.5885761 | 46.5857175,6.8392134 | 183 |
5 | 5606 | 261 | 2119 | 1 | Lutry | Waadt | Zürich | Zürich | Lutry,Waadt | Zürich,Zürich | 46.5088803,6.6827638 | 47.3768866,8.541694 | 6 |
273 | 5724 | 3298 | 2154 | 1258 | Nyon | Waadt | Walenstadt | Sankt Gallen | Nyon,Waadt | Walenstadt,Sankt Gallen | 46.3832683,6.2347852 | 47.12398,9.31603 | 274 |
129 | 1703 | 1064 | 742 | 610 | Hünenberg | Zug | Meierskappel | Luzern | Hünenberg,Zug | Meierskappel,Luzern | 47.1771936,8.4271865 | 47.1244436,8.4432688 | 130 |
data["num_words_title_2"] = data.apply( lambda x: num_elements( x["coordinates"] ), axis=1)
data
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | coordinates | 11 | 12 | num_words_title_2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
278 | 3392 | 3901 | 1216 | 1267 | Kirchberg (SG) | Sankt Gallen | Chur | Graubünden | Kirchberg (SG),Sankt Gallen | Chur,Graubünden | 47.4113533,9.0401819 | 46.8507835,9.5319859 | 279 | 2 |
116 | 5046 | 1123 | 1894 | 566 | Semione | Tessin | Altishofen | Luzern | Semione,Tessin | Altishofen,Luzern | 46.4075638,8.9702528 | 47.2022847,7.9669609 | 117 | 2 |
122 | 246 | 1058 | 107 | 601 | Oetwil an der Limmat | Zürich | Horw | Luzern | Oetwil an der Limmat,Zürich | Horw,Luzern | 47.4274949,8.394824 | 47.0184461,8.3079399 | 123 | 2 |
140 | 6297 | 1321 | 2424 | 673 | Visp | Wallis | Feusisberg | Schwyz | Visp,Wallis | Feusisberg,Schwyz | 46.2947277,7.8821204 | 47.1869781,8.7469796 | 141 | 2 |
85 | 247 | 231 | 128 | 169 | Schlieren | Zürich | Zell (ZH) | Zürich | Schlieren,Zürich | Zell (ZH),Zürich | 47.3982611,8.448795 | 47.4442589,8.7984569 | 86 | 2 |
162 | 4253 | 1613 | 1549 | 725 | Magden | Aargau | Linthal | Glarus | Magden,Aargau | Linthal,Glarus | 47.5266505,7.814835 | 46.9218287,8.9996438 | 163 | 2 |
331 | 243 | 4040 | 31 | 1619 | Dietikon | Zürich | Spreitenbach | Aargau | Dietikon,Zürich | Spreitenbach,Aargau | 47.4053885,8.39977 | 47.4221702,8.3638854 | 332 | 2 |
172 | 5890 | 1701 | 2258 | 740 | Vevey | Waadt | Baar | Zug | Vevey,Waadt | Baar,Zug | 46.4628333,6.8419192 | 47.1953729,8.526087 | 173 | 2 |
289 | 5130 | 4271 | 1902 | 1446 | Tegna | Tessin | Aarburg | Aargau | Tegna,Tessin | Aarburg,Aargau | 46.186706,8.7443382 | 47.3205914,7.9066923 | 290 | 2 |
141 | 161 | 1322 | 170 | 674 | Zollikon | Zürich | Freienbach | Schwyz | Zollikon,Zürich | Freienbach,Schwyz | 47.3412096,8.5772146 | 47.2064107,8.7565933 | 142 | 2 |
400 | 2701 | 6023 | 1040 | 2319 | Basel | Basel | Conthey | Wallis | Basel,Basel | Conthey,Wallis | 47.5595986,7.5885761 | 46.2244777,7.303512 | 401 | 2 |
201 | 4253 | 2476 | 1549 | 972 | Magden | Aargau | Hofstetten-Flüh | Solothurn | Magden,Aargau | Hofstetten-Flüh,Solothurn | 47.5266505,7.814835 | 47.4769723,7.5117799 | 202 | 2 |
56 | 3901 | 8 | 1267 | 88 | Chur | Graubünden | Maschwanden | Zürich | Chur,Graubünden | Maschwanden,Zürich | 46.8507835,9.5319859 | 47.2348501,8.425838 | 57 | 2 |
31 | 1322 | 134 | 674 | 72 | Freienbach | Schwyz | Hütten | Zürich | Freienbach,Schwyz | Hütten,Zürich | 47.2064107,8.7565933 | 47.1755749,8.664826 | 32 | 2 |
307 | 1702 | 4310 | 741 | 1536 | Cham | Zug | Koblenz | Aargau | Cham,Zug | Koblenz,Aargau | 47.181225,8.4592089 | 47.60954,8.23842 | 308 | 2 |
379 | 5886 | 5724 | 2142 | 2154 | Montreux | Waadt | Nyon | Waadt | Montreux,Waadt | Nyon,Waadt | 46.4312213,6.9106799 | 46.3832683,6.2347852 | 380 | 2 |
281 | 2939 | 3921 | 1129 | 1274 | Schaffhausen | Schaffhausen | Arosa | Graubünden | Schaffhausen,Schaffhausen | Arosa,Graubünden | 47.6958897,8.6380489 | 46.7823704,9.6799111 | 282 | 2 |
123 | 5586 | 1058 | 1914 | 601 | Lausanne | Waadt | Horw | Luzern | Lausanne,Waadt | Horw,Luzern | 46.5196535,6.6322734 | 47.0184461,8.3079399 | 124 | 2 |
290 | 4021 | 4323 | 1455 | 1454 | Baden | Aargau | Bad Zurzach | Aargau | Baden,Aargau | Bad Zurzach,Aargau | 47.47288,8.30809 | 47.5877895,8.2933248 | 291 | 2 |
432 | 6628 | 6628 | 2511 | 2511 | Lancy | Genf | Lancy | Genf | Lancy,Genf | Lancy,Genf | 46.1885168,6.1144546 | 46.1885168,6.1144546 | 433 | 2 |
90 | 2895 | 690 | 1121 | 233 | Waldenburg | Basel Land | Court | Bern | Waldenburg,Basel Land | Court,Bern | 47.3815278,7.7469396 | 47.2395861,7.3368922 | 91 | 2 |
394 | 5484 | 5890 | 2074 | 2258 | Gollion | Waadt | Vevey | Waadt | Gollion,Waadt | Vevey,Waadt | 46.5852808,6.5067932 | 46.4628333,6.8419192 | 395 | 2 |
332 | 158 | 4040 | 135 | 1619 | Stäfa | Zürich | Spreitenbach | Aargau | Stäfa,Zürich | Spreitenbach,Aargau | 47.2392343,8.7351356 | 47.4221702,8.3638854 | 333 | 2 |
205 | 5130 | 2581 | 1902 | 1013 | Tegna | Tessin | Olten | Solothurn | Tegna,Tessin | Olten,Solothurn | 46.186706,8.7443382 | 47.3499624,7.9037034 | 206 | 2 |
273 | 5724 | 3298 | 2154 | 1258 | Nyon | Waadt | Walenstadt | Sankt Gallen | Nyon,Waadt | Walenstadt,Sankt Gallen | 46.3832683,6.2347852 | 47.12398,9.31603 | 274 | 2 |
96 | 354 | 739 | 330 | 312 | Kirchlindach | Bern | Ipsach | Bern | Kirchlindach,Bern | Ipsach,Bern | 46.9997652,7.4140521 | 47.1143109,7.232491 | 97 | 2 |
407 | 261 | 6421 | 1 | 2458 | Zürich | Zürich | La Chaux-de-Fonds | Neuchâtel | Zürich,Zürich | La Chaux-de-Fonds,Neuchâtel | 47.3768866,8.541694 | 47.1034892,6.8327838 | 408 | 2 |
198 | 2772 | 2618 | 1101 | 970 | Pfeffingen | Basel Land | Himmelried | Solothurn | Pfeffingen,Basel Land | Himmelried,Solothurn | 47.4586328,7.5900291 | 47.42219,7.59808 | 199 | 2 |
137 | 4121 | 1341 | 1641 | 670 | Villigen | Aargau | Altendorf | Schwyz | Villigen,Aargau | Altendorf,Schwyz | 47.5262164,8.2147881 | 47.1914822,8.8299043 | 138 | 2 |
398 | 6436 | 5938 | 2465 | 2286 | Le Locle | Neuchâtel | Yverdon-les-Bains | Waadt | Le Locle,Neuchâtel | Yverdon-les-Bains,Waadt | 47.0577195,6.7487354 | 46.7784736,6.641183 | 399 | 2 |
335 | 217 | 4551 | 39 | 1666 | Elgg | Zürich | Aadorf | Thurgau | Elgg,Zürich | Aadorf,Thurgau | 47.4910721,8.8665461 | 47.4884348,8.9035411 | 336 | 2 |
180 | 5886 | 2321 | 2142 | 753 | Montreux | Waadt | Attalens | Fribourg | Montreux,Waadt | Attalens,Fribourg | 46.4312213,6.9106799 | 46.5103309,6.8485685 | 181 | 2 |
25 | 2937 | 29 | 1144 | 49 | Neuhausen am Rheinfall | Schaffhausen | Flurlingen | Zürich | Neuhausen am Rheinfall,Schaffhausen | Flurlingen,Zürich | 47.6837423,8.6126098 | 47.685357,8.6294367 | 26 | 2 |
73 | 197 | 197 | 131 | 131 | Schwerzenbach | Zürich | Schwerzenbach | Zürich | Schwerzenbach,Zürich | Schwerzenbach,Zürich | 47.3825634,8.6577503 | 47.3825634,8.6577503 | 74 | 2 |
185 | 4253 | 2471 | 1549 | 926 | Magden | Aargau | Bättwil | Solothurn | Magden,Aargau | Bättwil,Solothurn | 47.5266505,7.814835 | 47.4901324,7.5105407 | 186 | 2 |
34 | 6297 | 134 | 2424 | 72 | Visp | Wallis | Hütten | Zürich | Visp,Wallis | Hütten,Zürich | 46.2947277,7.8821204 | 47.1755749,8.664826 | 35 | 2 |
309 | 2546 | 4204 | 957 | 1570 | Grenchen | Solothurn | Niederlenz | Aargau | Grenchen,Solothurn | Niederlenz,Aargau | 47.1922876,7.3958907 | 47.4015698,8.1761165 | 310 | 2 |
366 | 5586 | 5721 | 1914 | 2073 | Lausanne | Waadt | Gland | Waadt | Lausanne,Waadt | Gland,Waadt | 46.5196535,6.6322734 | 46.4203001,6.2698809 | 367 | 2 |
169 | 2701 | 1701 | 1040 | 740 | Basel | Basel | Baar | Zug | Basel,Basel | Baar,Zug | 47.5595986,7.5885761 | 47.1953729,8.526087 | 170 | 2 |
294 | 2888 | 4023 | 1083 | 1461 | Langenbruck | Basel Land | Bergdietikon | Aargau | Langenbruck,Basel Land | Bergdietikon,Aargau | 47.3483495,7.7686817 | 47.3934257,8.390457 | 295 | 2 |
72 | 1704 | 140 | 743 | 130 | Menzingen | Zug | Schönenberg (ZH) | Zürich | Menzingen,Zug | Schönenberg (ZH),Zürich | 47.1778831,8.5912483 | 47.1932312,8.644027 | 73 | 2 |
111 | 1051 | 1061 | 562 | 561 | Adligenswil | Luzern | Luzern | Luzern | Adligenswil,Luzern | Luzern,Luzern | 47.071186,8.3647405 | 47.0501682,8.3093072 | 112 | 2 |
275 | 3251 | 3238 | 1183 | 1262 | Altstätten | Sankt Gallen | Widnau | Sankt Gallen | Altstätten,Sankt Gallen | Widnau,Sankt Gallen | 47.3774633,9.5469133 | 47.4055145,9.6375563 | 276 | 2 |
310 | 4671 | 4204 | 1706 | 1570 | Kreuzlingen | Thurgau | Niederlenz | Aargau | Kreuzlingen,Thurgau | Niederlenz,Aargau | 47.6447397,9.1707858 | 47.4015698,8.1761165 | 311 | 2 |
#create a new column
data['num_words_title_2'] = data.apply(lambda x : num_elements(x['coordinates']), axis=1)
data.head()
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | coordinates | 11 | 12 | num_words_title_2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
73 | 197 | 197 | 131 | 131 | Schwerzenbach | Zürich | Schwerzenbach | Zürich | Schwerzenbach,Zürich | Schwerzenbach,Zürich | 47.3825634,8.6577503 | 47.3825634,8.6577503 | 74 | 2 |
182 | 2701 | 2066 | 1040 | 773 | Basel | Basel | Chapelle | Fribourg | Basel,Basel | Chapelle,Fribourg | 47.5595986,7.5885761 | 46.5857175,6.8392134 | 183 | 2 |
5 | 5606 | 261 | 2119 | 1 | Lutry | Waadt | Zürich | Zürich | Lutry,Waadt | Zürich,Zürich | 46.5088803,6.6827638 | 47.3768866,8.541694 | 6 | 2 |
273 | 5724 | 3298 | 2154 | 1258 | Nyon | Waadt | Walenstadt | Sankt Gallen | Nyon,Waadt | Walenstadt,Sankt Gallen | 46.3832683,6.2347852 | 47.12398,9.31603 | 274 | 2 |
129 | 1703 | 1064 | 742 | 610 | Hünenberg | Zug | Meierskappel | Luzern | Hünenberg,Zug | Meierskappel,Luzern | 47.1771936,8.4271865 | 47.1244436,8.4432688 | 130 | 2 |
# #create a new column
# data['num_words_title'] = data.apply(lambda x : len(x['coordinates'].split(",")),axis=1)
# data.head()
Let’s use the lambda function#
def get_results( result_api ):
try:
lat = result_api[0]['geometry']['location']['lat']
lon = result_api[0]['geometry']['location']['lng']
except:
lat = np.nan
lon = np.nan
return ( lat, lon )
data["results"] = data.apply( lambda x: get_results( gmaps.geocode( x["town"], region = "ch") ) , axis = 1 )
data
Show code cell output
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | coordinates | 11 | 12 | num_words_title_2 | results | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
278 | 3392 | 3901 | 1216 | 1267 | Kirchberg (SG) | Sankt Gallen | Chur | Graubünden | Kirchberg (SG),Sankt Gallen | Chur,Graubünden | 47.4113533,9.0401819 | 46.8507835,9.5319859 | 279 | 2 | (46.8507835, 9.5319859) |
116 | 5046 | 1123 | 1894 | 566 | Semione | Tessin | Altishofen | Luzern | Semione,Tessin | Altishofen,Luzern | 46.4075638,8.9702528 | 47.2022847,7.9669609 | 117 | 2 | (47.2022847, 7.966960899999999) |
122 | 246 | 1058 | 107 | 601 | Oetwil an der Limmat | Zürich | Horw | Luzern | Oetwil an der Limmat,Zürich | Horw,Luzern | 47.4274949,8.394824 | 47.0184461,8.3079399 | 123 | 2 | (47.0184461, 8.3079399) |
140 | 6297 | 1321 | 2424 | 673 | Visp | Wallis | Feusisberg | Schwyz | Visp,Wallis | Feusisberg,Schwyz | 46.2947277,7.8821204 | 47.1869781,8.7469796 | 141 | 2 | (47.1869781, 8.7469796) |
85 | 247 | 231 | 128 | 169 | Schlieren | Zürich | Zell (ZH) | Zürich | Schlieren,Zürich | Zell (ZH),Zürich | 47.3982611,8.448795 | 47.4442589,8.7984569 | 86 | 2 | (47.44425890000001, 8.7984569) |
162 | 4253 | 1613 | 1549 | 725 | Magden | Aargau | Linthal | Glarus | Magden,Aargau | Linthal,Glarus | 47.5266505,7.814835 | 46.9218287,8.9996438 | 163 | 2 | (46.9218287, 8.9996438) |
331 | 243 | 4040 | 31 | 1619 | Dietikon | Zürich | Spreitenbach | Aargau | Dietikon,Zürich | Spreitenbach,Aargau | 47.4053885,8.39977 | 47.4221702,8.3638854 | 332 | 2 | (47.4221702, 8.3638854) |
172 | 5890 | 1701 | 2258 | 740 | Vevey | Waadt | Baar | Zug | Vevey,Waadt | Baar,Zug | 46.4628333,6.8419192 | 47.1953729,8.526087 | 173 | 2 | (47.1953729, 8.526087) |
289 | 5130 | 4271 | 1902 | 1446 | Tegna | Tessin | Aarburg | Aargau | Tegna,Tessin | Aarburg,Aargau | 46.186706,8.7443382 | 47.3205914,7.9066923 | 290 | 2 | (47.3205914, 7.9066923) |
141 | 161 | 1322 | 170 | 674 | Zollikon | Zürich | Freienbach | Schwyz | Zollikon,Zürich | Freienbach,Schwyz | 47.3412096,8.5772146 | 47.2064107,8.7565933 | 142 | 2 | (47.20641070000001, 8.7565933) |
400 | 2701 | 6023 | 1040 | 2319 | Basel | Basel | Conthey | Wallis | Basel,Basel | Conthey,Wallis | 47.5595986,7.5885761 | 46.2244777,7.303512 | 401 | 2 | (46.2244777, 7.303512) |
201 | 4253 | 2476 | 1549 | 972 | Magden | Aargau | Hofstetten-Flüh | Solothurn | Magden,Aargau | Hofstetten-Flüh,Solothurn | 47.5266505,7.814835 | 47.4769723,7.5117799 | 202 | 2 | (47.4769723, 7.511779900000001) |
56 | 3901 | 8 | 1267 | 88 | Chur | Graubünden | Maschwanden | Zürich | Chur,Graubünden | Maschwanden,Zürich | 46.8507835,9.5319859 | 47.2348501,8.425838 | 57 | 2 | (47.2348501, 8.425837999999999) |
31 | 1322 | 134 | 674 | 72 | Freienbach | Schwyz | Hütten | Zürich | Freienbach,Schwyz | Hütten,Zürich | 47.2064107,8.7565933 | 47.1755749,8.664826 | 32 | 2 | (47.1755749, 8.664826) |
307 | 1702 | 4310 | 741 | 1536 | Cham | Zug | Koblenz | Aargau | Cham,Zug | Koblenz,Aargau | 47.181225,8.4592089 | 47.60954,8.23842 | 308 | 2 | (50.3569429, 7.5889959) |
379 | 5886 | 5724 | 2142 | 2154 | Montreux | Waadt | Nyon | Waadt | Montreux,Waadt | Nyon,Waadt | 46.4312213,6.9106799 | 46.3832683,6.2347852 | 380 | 2 | (46.3832683, 6.2347852) |
281 | 2939 | 3921 | 1129 | 1274 | Schaffhausen | Schaffhausen | Arosa | Graubünden | Schaffhausen,Schaffhausen | Arosa,Graubünden | 47.6958897,8.6380489 | 46.7823704,9.6799111 | 282 | 2 | (46.7823704, 9.6799111) |
123 | 5586 | 1058 | 1914 | 601 | Lausanne | Waadt | Horw | Luzern | Lausanne,Waadt | Horw,Luzern | 46.5196535,6.6322734 | 47.0184461,8.3079399 | 124 | 2 | (47.0184461, 8.3079399) |
290 | 4021 | 4323 | 1455 | 1454 | Baden | Aargau | Bad Zurzach | Aargau | Baden,Aargau | Bad Zurzach,Aargau | 47.47288,8.30809 | 47.5877895,8.2933248 | 291 | 2 | (47.5877895, 8.293324799999999) |
432 | 6628 | 6628 | 2511 | 2511 | Lancy | Genf | Lancy | Genf | Lancy,Genf | Lancy,Genf | 46.1885168,6.1144546 | 46.1885168,6.1144546 | 433 | 2 | (46.1885168, 6.114454599999999) |
90 | 2895 | 690 | 1121 | 233 | Waldenburg | Basel Land | Court | Bern | Waldenburg,Basel Land | Court,Bern | 47.3815278,7.7469396 | 47.2395861,7.3368922 | 91 | 2 | (nan, nan) |
394 | 5484 | 5890 | 2074 | 2258 | Gollion | Waadt | Vevey | Waadt | Gollion,Waadt | Vevey,Waadt | 46.5852808,6.5067932 | 46.4628333,6.8419192 | 395 | 2 | (46.4628333, 6.8419192) |
332 | 158 | 4040 | 135 | 1619 | Stäfa | Zürich | Spreitenbach | Aargau | Stäfa,Zürich | Spreitenbach,Aargau | 47.2392343,8.7351356 | 47.4221702,8.3638854 | 333 | 2 | (47.4221702, 8.3638854) |
205 | 5130 | 2581 | 1902 | 1013 | Tegna | Tessin | Olten | Solothurn | Tegna,Tessin | Olten,Solothurn | 46.186706,8.7443382 | 47.3499624,7.9037034 | 206 | 2 | (47.3499624, 7.9037033) |
273 | 5724 | 3298 | 2154 | 1258 | Nyon | Waadt | Walenstadt | Sankt Gallen | Nyon,Waadt | Walenstadt,Sankt Gallen | 46.3832683,6.2347852 | 47.12398,9.31603 | 274 | 2 | (47.12398, 9.31603) |
96 | 354 | 739 | 330 | 312 | Kirchlindach | Bern | Ipsach | Bern | Kirchlindach,Bern | Ipsach,Bern | 46.9997652,7.4140521 | 47.1143109,7.232491 | 97 | 2 | (47.1143109, 7.232491) |
407 | 261 | 6421 | 1 | 2458 | Zürich | Zürich | La Chaux-de-Fonds | Neuchâtel | Zürich,Zürich | La Chaux-de-Fonds,Neuchâtel | 47.3768866,8.541694 | 47.1034892,6.8327838 | 408 | 2 | (47.1034892, 6.832783800000001) |
198 | 2772 | 2618 | 1101 | 970 | Pfeffingen | Basel Land | Himmelried | Solothurn | Pfeffingen,Basel Land | Himmelried,Solothurn | 47.4586328,7.5900291 | 47.42219,7.59808 | 199 | 2 | (47.42219, 7.59808) |
137 | 4121 | 1341 | 1641 | 670 | Villigen | Aargau | Altendorf | Schwyz | Villigen,Aargau | Altendorf,Schwyz | 47.5262164,8.2147881 | 47.1914822,8.8299043 | 138 | 2 | (47.1914822, 8.829904299999999) |
398 | 6436 | 5938 | 2465 | 2286 | Le Locle | Neuchâtel | Yverdon-les-Bains | Waadt | Le Locle,Neuchâtel | Yverdon-les-Bains,Waadt | 47.0577195,6.7487354 | 46.7784736,6.641183 | 399 | 2 | (46.7784736, 6.641183) |
335 | 217 | 4551 | 39 | 1666 | Elgg | Zürich | Aadorf | Thurgau | Elgg,Zürich | Aadorf,Thurgau | 47.4910721,8.8665461 | 47.4884348,8.9035411 | 336 | 2 | (47.4884348, 8.9035411) |
180 | 5886 | 2321 | 2142 | 753 | Montreux | Waadt | Attalens | Fribourg | Montreux,Waadt | Attalens,Fribourg | 46.4312213,6.9106799 | 46.5103309,6.8485685 | 181 | 2 | (46.5103309, 6.8485685) |
25 | 2937 | 29 | 1144 | 49 | Neuhausen am Rheinfall | Schaffhausen | Flurlingen | Zürich | Neuhausen am Rheinfall,Schaffhausen | Flurlingen,Zürich | 47.6837423,8.6126098 | 47.685357,8.6294367 | 26 | 2 | (47.685357, 8.6294367) |
73 | 197 | 197 | 131 | 131 | Schwerzenbach | Zürich | Schwerzenbach | Zürich | Schwerzenbach,Zürich | Schwerzenbach,Zürich | 47.3825634,8.6577503 | 47.3825634,8.6577503 | 74 | 2 | (47.3825634, 8.6577504) |
185 | 4253 | 2471 | 1549 | 926 | Magden | Aargau | Bättwil | Solothurn | Magden,Aargau | Bättwil,Solothurn | 47.5266505,7.814835 | 47.4901324,7.5105407 | 186 | 2 | (47.4901324, 7.510540700000001) |
34 | 6297 | 134 | 2424 | 72 | Visp | Wallis | Hütten | Zürich | Visp,Wallis | Hütten,Zürich | 46.2947277,7.8821204 | 47.1755749,8.664826 | 35 | 2 | (47.1755749, 8.664826) |
309 | 2546 | 4204 | 957 | 1570 | Grenchen | Solothurn | Niederlenz | Aargau | Grenchen,Solothurn | Niederlenz,Aargau | 47.1922876,7.3958907 | 47.4015698,8.1761165 | 310 | 2 | (47.4015698, 8.1761165) |
366 | 5586 | 5721 | 1914 | 2073 | Lausanne | Waadt | Gland | Waadt | Lausanne,Waadt | Gland,Waadt | 46.5196535,6.6322734 | 46.4203001,6.2698809 | 367 | 2 | (46.4203001, 6.2698809) |
169 | 2701 | 1701 | 1040 | 740 | Basel | Basel | Baar | Zug | Basel,Basel | Baar,Zug | 47.5595986,7.5885761 | 47.1953729,8.526087 | 170 | 2 | (47.1953729, 8.526087) |
294 | 2888 | 4023 | 1083 | 1461 | Langenbruck | Basel Land | Bergdietikon | Aargau | Langenbruck,Basel Land | Bergdietikon,Aargau | 47.3483495,7.7686817 | 47.3934257,8.390457 | 295 | 2 | (47.39342569999999, 8.390457) |
72 | 1704 | 140 | 743 | 130 | Menzingen | Zug | Schönenberg (ZH) | Zürich | Menzingen,Zug | Schönenberg (ZH),Zürich | 47.1778831,8.5912483 | 47.1932312,8.644027 | 73 | 2 | (47.1932312, 8.644027) |
111 | 1051 | 1061 | 562 | 561 | Adligenswil | Luzern | Luzern | Luzern | Adligenswil,Luzern | Luzern,Luzern | 47.071186,8.3647405 | 47.0501682,8.3093072 | 112 | 2 | (47.05016819999999, 8.3093072) |
275 | 3251 | 3238 | 1183 | 1262 | Altstätten | Sankt Gallen | Widnau | Sankt Gallen | Altstätten,Sankt Gallen | Widnau,Sankt Gallen | 47.3774633,9.5469133 | 47.4055145,9.6375563 | 276 | 2 | (47.4055145, 9.6375563) |
310 | 4671 | 4204 | 1706 | 1570 | Kreuzlingen | Thurgau | Niederlenz | Aargau | Kreuzlingen,Thurgau | Niederlenz,Aargau | 47.6447397,9.1707858 | 47.4015698,8.1761165 | 311 | 2 | (47.4015698, 8.1761165) |
data['results'] = data.apply( lambda x: get_results( gmaps.geocode( x[ 'town' ] , region='ch' ) ) , axis = 1 )
data[ [ 'lat' , 'lng' ] ] = pd.DataFrame( data.results.tolist() , index = data.index)
data.head()
0 | 1 | 2 | 3 | 4 | 5 | town | 7 | 8 | 9 | coordinates | 11 | 12 | num_words_title_2 | results | lat | lng | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
73 | 197 | 197 | 131 | 131 | Schwerzenbach | Zürich | Schwerzenbach | Zürich | Schwerzenbach,Zürich | Schwerzenbach,Zürich | 47.3825634,8.6577503 | 47.3825634,8.6577503 | 74 | 2 | (47.3825634, 8.6577504) | 47.382563 | 8.657750 |
182 | 2701 | 2066 | 1040 | 773 | Basel | Basel | Chapelle | Fribourg | Basel,Basel | Chapelle,Fribourg | 47.5595986,7.5885761 | 46.5857175,6.8392134 | 183 | 2 | (nan, nan) | NaN | NaN |
5 | 5606 | 261 | 2119 | 1 | Lutry | Waadt | Zürich | Zürich | Lutry,Waadt | Zürich,Zürich | 46.5088803,6.6827638 | 47.3768866,8.541694 | 6 | 2 | (47.3768866, 8.541694) | 47.376887 | 8.541694 |
273 | 5724 | 3298 | 2154 | 1258 | Nyon | Waadt | Walenstadt | Sankt Gallen | Nyon,Waadt | Walenstadt,Sankt Gallen | 46.3832683,6.2347852 | 47.12398,9.31603 | 274 | 2 | (47.12398, 9.31603) | 47.123980 | 9.316030 |
129 | 1703 | 1064 | 742 | 610 | Hünenberg | Zug | Meierskappel | Luzern | Hünenberg,Zug | Meierskappel,Luzern | 47.1771936,8.4271865 | 47.1244436,8.4432688 | 130 | 2 | (47.1244436, 8.4432688) | 47.124444 | 8.443269 |
Directions API features:#
1. Find directions for various modes of transportation, including transit, driving, walking, or cycling.
2. Returns multi-part addresses using a series of reference points.
3. Specify origins, destinations, and waypoints as text strings (for example, “Chicago, IL” or “Darwin, NT, Australia”), as Place IDs, or as latitude / longitude coordinates.
The API returns the most efficient routes when calculating addresses. Travel time is the main optimized factor, but the API can also take into account other factors such as distance, number of turns and many more when deciding which route is the most efficient.
8.4.1. Building your Directions API requests#
https://developers.google.com/maps/documentation/directions/get-directions#required-parameters
Required Parameters#
Origin = The place ID, address, or textual latitude/longitude
origin = place_id:ChIJ3S-JXmauEmsRUcIaWtf4MzE
origin = 24+Sussex+Drive+Ottawa+ON
origin = 41.43206,-81.38992
Destination = The place ID, address, or textual latitude/longitude (Todo lo mismo)
key = You already have this!!!
OPTIONAL Parameters (the ones I used most)#
mode = driving, walking, bicycling, transit
language
region
departure_time = tienen que especificar la fecha en segundos seconds_converter
traffic_model = best_guess, pessimistic, optimistic
8.4.2. Request Example#
Go To Toledo a Madrid!!!
https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM
re1 = requests.get( "https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM")
data_json = re1.json()
data_json
Show code cell output
{'geocoded_waypoints': [{'geocoder_status': 'OK',
'place_id': 'ChIJ8f21C60Lag0R_q11auhbf8Y',
'types': ['locality', 'political']},
{'geocoder_status': 'OK',
'place_id': 'ChIJgTwKgJcpQg0RaSKMYcHeNsQ',
'types': ['locality', 'political']}],
'routes': [{'bounds': {'northeast': {'lat': 40.4165207, 'lng': -3.7026134},
'southwest': {'lat': 39.862808, 'lng': -4.0294059}},
'copyrights': 'Map data ©2023 Inst. Geogr. Nacional',
'legs': [{'distance': {'text': '74.3 km', 'value': 74322},
'duration': {'text': '59 mins', 'value': 3513},
'end_address': 'Madrid, Spain',
'end_location': {'lat': 40.4165207, 'lng': -3.705076},
'start_address': 'Toledo, Spain',
'start_location': {'lat': 39.862808, 'lng': -4.0273727},
'steps': [{'distance': {'text': '0.6 km', 'value': 615},
'duration': {'text': '2 mins', 'value': 108},
'end_location': {'lat': 39.8681019, 'lng': -4.029378299999999},
'html_instructions': 'Head <b>northwest</b> on <b>Av. de la Reconquista</b> toward <b>C. de la Diputación</b>',
'polyline': {'points': 'quhrF`rqWCBQJUJm@PQFg@Ni@JeBh@}@XaD|@{@Vk@Ns@RMDG@oA^u@Rs@TKBwA`@WHMBG@C?E?GAC?IC'},
'start_location': {'lat': 39.862808, 'lng': -4.0273727},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 174},
'duration': {'text': '1 min', 'value': 24},
'end_location': {'lat': 39.8675297, 'lng': -4.0275807},
'html_instructions': 'At the roundabout, take the <b>1st</b> exit onto <b>C. Duque de Lerma</b>',
'maneuver': 'roundabout-right',
'polyline': {'points': 'svirFr~qW?AAEAEACACACCCACF_@H[FQNi@j@cB`@qAHW'},
'start_location': {'lat': 39.8681019, 'lng': -4.029378299999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.6 km', 'value': 594},
'duration': {'text': '2 mins', 'value': 95},
'end_location': {'lat': 39.8688577, 'lng': -4.021535},
'html_instructions': 'At the roundabout, take the <b>3rd</b> exit onto <b>Av. Gral. Villalba</b><div style="font-size:0.9em">Go through 1 roundabout</div>',
'maneuver': 'roundabout-right',
'polyline': {'points': 'asirFjsqW@?@??A@?@A@A@?DI@C@C@A@C@C@CDS?A@O?G@G?GAKAA?AAAAA?CAAA?AAAAAAA?AAA?A?AAA?A?A?C@A?A?A@A@A??@A@CBQMIIEEACISCIIWEQEMI[Oi@?CYy@@E?K?A?A?AAA?A?AA??A?AAAAA?AA??AA??AA?A??AA?A?A?A?UcAOi@Mi@Mk@I]AMCOAQAQCWCeA?A?k@EuCCaCA{@?O'},
'start_location': {'lat': 39.8675297, 'lng': -4.0275807},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 198},
'duration': {'text': '1 min', 'value': 30},
'end_location': {'lat': 39.8700417, 'lng': -4.0208568},
'html_instructions': 'At the roundabout, take the <b>3rd</b> exit onto <b>Av. de Madrid</b>',
'maneuver': 'roundabout-right',
'polyline': {'points': 'k{irFrmpW@A@A@A@A@A?A@A@A?A@A?A@A?C?A@A?C?C?C?A?CAC?AAC?AAAACAAA??AAAAAC?AAA?A?A?A?AAA@A?A?A?]W_@U{@a@o@YGACAKBE@A@A@EDCFAH?F?H'},
'start_location': {'lat': 39.8688577, 'lng': -4.021535},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.4 km', 'value': 415},
'duration': {'text': '1 min', 'value': 58},
'end_location': {'lat': 39.8737356, 'lng': -4.0207605},
'html_instructions': 'Turn <b>right</b> to stay on <b>Av. de Madrid</b>',
'maneuver': 'turn-right',
'polyline': {'points': 'wbjrFjipWEFCBABC@E@E@G?M?a@Aq@CsBCK?s@As@CcCE{@?{AEo@AGAOECAMA'},
'start_location': {'lat': 39.8700417, 'lng': -4.0208568},
'travel_mode': 'DRIVING'},
{'distance': {'text': '1.1 km', 'value': 1065},
'duration': {'text': '1 min', 'value': 65},
'end_location': {'lat': 39.8830007, 'lng': -4.0190202},
'html_instructions': 'At the roundabout, take the <b>2nd</b> exit onto the <b>A-42</b> ramp to <b>Madrid</b>',
'maneuver': 'roundabout-right',
'polyline': {'points': '{yjrFvhpW?C?CAC?AACAAACAAAACAAAAACAC?A?AAA@C?A?A?A@A?C@A?A@C@A@ABA@AB?@ABE?A?KDGDG@I@KBo@AWAoCEQEW?[A[Ai@A]?u@CiBEi@EKCyAMiAM[G_@I[Mk@S_@Qa@QICWKQGKEICICYGIAIAKAQCUCO?Q?OAS?]?I?G?g@@EAG?GAG?IAIAGCKAYI[KCAo@WmAe@q@SMCiAS_@B'},
'start_location': {'lat': 39.8737356, 'lng': -4.0207605},
'travel_mode': 'DRIVING'},
{'distance': {'text': '19.2 km', 'value': 19159},
'duration': {'text': '11 mins', 'value': 651},
'end_location': {'lat': 40.0333486, 'lng': -3.925665899999999},
'html_instructions': 'Merge onto <b>A-42</b>',
'maneuver': 'merge',
'polyline': {'points': 'wslrFz}oWKA]C[CS?UA[@u@@kBFaBFsBBS@A?a@?A?iA?mCAG?Y?eACS?I?{@ESCK?QCKASAGAMAIC_@Ea@GUE_AQSEOC[GICSEOEMC[I]I]I[I_@KGACACAYGMCUG[I_@Ka@KuBg@]IC?i@Ok@Mu@OiAUKAMCA?C?eAQc@G]E{@MWCUEg@IAA[GSEOCwA[s@Qu@So@Oc@Ke@KKC_@Io@Qu@Q]ISGMC]I[GoBe@_Cm@kAYyA]i@QaBc@CA_A[gDuAGCy@]mAe@eCcAa@QQGw@]u@Y{Am@aAe@i@WKG_@S}@i@UOi@_@UOIEa@Ye@Ye@WOIu@]o@WSKMCSKEAsBu@YK[McC}@iE_BYMwDwAOGKESGsHsCgE}AWKg@QeC_AqIaDgC}@gC_AoBu@oAe@{Ak@qCeAeBq@cE{AmCcAkAc@QGQG[MmAe@qAg@MEqAg@_A]a@MeA]}@SICsAYw@M}B]cCa@UEKA}@OaGaAwASg@KOE[Ge@MICe@MGCs@UMEGA[M[KyAe@GCQEoAc@c@OwAc@_DeAYKUGeA]eAYICa@KA?s@Mg@Ia@Iq@ImBYaB_@UGEC}@Yg@QMGMEg@Uk@Wo@YECMIQIo@a@{@g@SOKGg@[mCmBaAs@SM{@o@]UmAu@q@[e@U{@e@SMKIQKGCGESKs@g@{B_BgGmEwCuBKI{AcAYQEA_@Sm@WgAc@IEEAw@W_Be@oBm@yAa@EAe@OaAYo@Su@Wc@Uq@_@EAe@Yg@[iDwBWQOKOK]UuBqA_@U}@m@gAs@[QaBiAq@e@WOECMIA?GGs@e@a@Yi@_@_@Y[WYUYWYWe@a@eB}Ae@_@c@[]WYQm@_@UOc@W_@SCA[QKGMGk@Y}@c@q@]yAs@UMIE_@UWO]S]WcAq@k@c@a@]QKc@][WUQ]Yo@g@}AkAiCgBcC_BgCcBa@WSKg@]g@[MKKE_Am@OKiAq@uBoAm@]qAy@w@g@y@i@gAu@w@i@iCkB}B}AYSCAEE_@U}AeA_@U}@m@eAq@w@i@IGIG_BcAwA}@yBwAuGiEmUgOaMeIq@c@e@[ECKG_C}AmCeBmCeBcC_BiBkAmAy@wBuAwGkEkBmAQK_BeASMgAs@yDgCy@i@s@c@ECIGs@e@iCaBoAw@i@_@OKIEYQqAw@kBcAOIm@YKG[OSKICoB}@y@[uAg@u@YyAe@y@U]KgAYs@SwAY{@QICc@GOCwAU{@MwAQ{@IwAOa@C_AG{@Ee@AYA]A]A]?_@A]?y@?M?c@?}@@G?s@@M?Q@Y@K?W@e@@}@DSBM?O@aCPcAHmAJQ@[BWBy@Fu@FC?[BC@]B[@a@BYB]@c@By@BW@u@BcA?]?]?_@A]A]Ca@A[C]E[C]E_@E]G]G[G_@I]I]I[K_@KYKYK_@M[OYK]Q[O[QYO[SYQYQ[SYSYUWS[WWUYWUUWYWWWYWYUYUYU]UYU]S[U]S]Q]S]S_@Q_@Q]Qa@Q_@O_@Oa@Q_@Wq@GQMa@Qe@]cAM_@K_@Qg@M_@K]?CQi@IY[iAK_@Og@W}@EKACIYEK?CSq@k@mBi@iBK_@Oe@Og@e@aBi@kB[eAi@iBeAqDi@eBMc@}@uCm@oBSq@Ww@Wu@Us@M]Wq@[}@a@iAa@_AeAcCSe@c@_Ac@aA_AoB}@kBg@}@c@}@c@w@Ua@S[S]S]e@y@U]e@u@W_@QWk@{@_AsAk@u@OUW[W]MOIKOS[_@_AkAGGEEa@e@UWY[UWCEQQWY_@a@e@e@WWA?ACSQYYq@o@USWWYYYUEEcB{Au@m@wBgBOMgA{@AAm@g@m@e@k@c@eAy@o@i@YU[UYU}@s@m@e@]W}BiBkByA'},
'start_location': {'lat': 39.8830007, 'lng': -4.0190202},
'travel_mode': 'DRIVING'},
{'distance': {'text': '47.1 km', 'value': 47071},
'duration': {'text': '30 mins', 'value': 1825},
'end_location': {'lat': 40.3957623, 'lng': -3.7039499},
'html_instructions': 'Keep <b>left</b> to stay on <b>A-42</b>',
'maneuver': 'keep-left',
'polyline': {'points': 'm_jsFlv}ViEkDWQsEqDu@m@]Yk@c@oAaAa@]IGKIa@[}@s@IIUQQMi@e@{@q@]YwAiAa@[e@_@UQyBeBw@o@m@e@oAaAu@m@yAkA]W?A]Wo@g@aF}Dq@i@oAcAWSQMAAMKWUq@g@mJuHo@g@q@i@eG}Ea@[CC]YoAcA}@q@g@c@[UWSo@i@YSWUOMKIWSWUYSQMKKKGKKQOWSWQWUo@e@YWWSYUUSYSi@c@YUYU}@u@}@s@WSWS[WKKWSUQSQs@g@_@[q@i@m@g@u@k@m@g@w@m@o@i@g@a@OKMMw@m@cBsAoDqCk@e@m@g@c@a@MKm@k@y@u@KIgAiA{A{AeBkBwCyCoBqBkAoAWWkBmBcAeAWWgAiAmAoAeAgA{@}@s@w@USa@a@w@y@e@g@u@w@QQ_@]KMKKoAqAaBeB}A_BGIAA}@_A_BaByA}AgAiAeAeACCk@q@SUS[U[Ua@Wc@Q_@Ui@Se@Qg@Og@K_@Me@Ki@Ie@EWMw@Gk@UoBSeBYmCMiAMeA[qCYmCIu@YyBE[UmBc@_EIy@_AeIK}@c@cE]sCa@sDAK]wCK_AQqASuBGc@yAuMk@cFCSE]?A?AACASAG?GCMESW_CAISkBUwB?CIi@MgAGa@Kq@WqA_@gBOm@_@gA_@iAc@iAISAASe@CIg@aAi@aAw@sA_@k@i@u@W[EEY_@OOs@w@i@k@c@_@e@a@SOm@c@[Uq@c@a@S_@SUMuAo@uBcA_@Qq@[wMoGYMOIwAq@_LiFCCkEsBgD_BqBaAuFmC_CgAeFgCq@_@sAu@iBcAgC_B_@W}@k@uBuAgCaBc@YWQa@WCC]UgDuBcBiAq@a@cBiAGCOK_@UWQQKc@YwDeCuA}@u@e@]UCCaCiBu@k@[YQQw@s@kAmA[]SUw@_Aq@}@o@}@U[g@w@i@_Ae@y@o@iA]o@_CwE[m@i@_Ak@_A{A{Bi@s@UYCCu@{@GEe@g@EEk@k@w@s@YWu@q@iA_AmA{@iAw@sAy@iCsAu@[qAs@}CcAaCq@aCk@w@OaAWa@MgBc@cEeAUGSGcAUqA[_AUeDy@aDy@cLwCoBi@aG{A]IqA]sD{@EAu@Sg@Mi@O]KsCq@qA]e@MkBe@yEoAu@SgBi@_A[sAe@MEaBk@uAe@y@Y{@YGA{@[CAyBs@SGaBm@yDoAeBo@i@QyCaAUIcBq@yAm@uB{@wFeCqAi@aBq@w@Y[KqBs@[KuAc@sBm@gAWiCm@wAYs@M_AOWEa@GSCQCWEWEqAQk@G{@K_@GyAY}A[}A]a@K_Be@ECy@Y_A_@e@MSI[K_A]mDsAcA_@cBo@A?_@OkEaBmAe@KCiAe@}As@iB}@y@e@WMOIg@WoCiAsBw@s@WQIm@UgBq@m@Sy@[yCiAkAc@aA_@q@WwAg@uBy@}@[oAc@mA_@EAu@SQEmAY{@Sk@Oq@Sa@Mi@SEAaC}@qAe@uAi@A?kBq@wAk@kAi@cCmAi@Ww@]wAo@cBs@aC}@aC_ASGsCeAsCeA]Ma@Oe@Q]KmAe@OGOGQGgC_AaBm@gDoASIa@OiG{BiAa@mCcAYK]M{EgB}B{@]MmFoBWKYK_FiBKECAOGkCaAqDsA}FwBGCWKSGKEUIgAc@]K_@OcBo@]MA?]Mi@SGCMEMEYMcE{AsAi@kAa@kAe@CAEAWKGEi@Sw@_@c@UOIGEQKKIOIc@[e@_@i@e@OOUUa@c@Y]i@q@U]e@w@IOGMKO[m@Yq@Se@ACUk@Qg@KWSm@a@kAMa@k@eBCKy@cCM_@Qi@gAeDwAiEmAuD_@gAqDcLKYIWSk@{@mCk@aBk@cBKUEIKUAEQ]CGGM_@o@U]Y_@[a@]a@e@e@YWWSWUSMA?QMIEKGk@Yk@Uc@QUEWGg@KEAk@Gq@IaAEI@u@?W@{@Di@Ds@JA?E@oAR_APc@Fu@N}@NyAX{AV{@N{AXyAV{AXyB^uCf@sDn@{AXq@Lu@N}B^YFoAPkANs@BC@u@?m@CWAMAM?_AIw@Mk@MEAw@Ua@OOGc@QKGg@Uo@a@SO}@q@CCq@i@a@[yFqEg@a@eEeDm@g@o@i@q@i@g@_@_@YSOCCOKIGEEWQGEUQIEWWq@i@iCoB_BcAaB{@aBq@_A]]MqA_@YGa@KQEOCA?}@Oc@IE?A?QCmAM{@Gy@GA?_@CeFWkCOkBIyBKgBKyOy@G?MAYAs@ESCUA}DScCOa@Cc@EwAM}BYuB[yAY_Ce@yBg@}D_A{Cs@m@Mo@OoEeA}@UuCo@wCs@EAICMCYGiBa@eLiC}HiBmBc@_Bc@cAYm@Uu@[CA{@a@c@Ua@U[UECYQIG_@[g@c@][c@c@WYSW_@c@S[W_@S[S[O[U_@O]Q[M]O[ACK[Sg@EKGSK_@M_@GS]sAMk@Mm@CMKg@SeAI_@O{@Kq@GYu@kEUoAMu@e@iCSiA]kBWkAMc@Mg@Om@Y{@?AQi@_@{@e@aAuAgC{@mAsA{Aw@y@uAgAm@a@w@a@KGeBs@AA[KsAe@{Bo@GCc@Ma@KYIOEYIuCaA[M_@Qi@Uk@Yi@Yi@[}A}@MI_@UMIaAk@e@YqC_BsBmAUMeDqB{@g@i@[uCeB_@UaDmBgEeC_@U_Ak@_@Ue@Yy@e@iGsDeBcAs@c@i@]e@Ue@[IEiEgC_@U_@U_CuAwA{@SKMG_BaAuCeBGEyA{@MIcDmBmBiAaBaA}FiDaBaAi@]u@c@_@UeAo@uEoCcBaAwA}@sAw@yA{@aBaAaCwAcEcCu@a@OKeAq@iC_ByCaB_CuA{Aw@gB_AaDcBy@e@cB_AmEiCmBiA[SWO{A}@{A}@qAw@sAw@CA]UA?_@UiC{AKGWOGCSMy@a@w@]]Og@Ma@Ig@K]EOAa@C_@AO?[?c@Bw@Fc@DW@aAPkB^gDf@kEp@oInAcBX{@JiBZ_@F_@Fm@JgANiBZiBXc@FKBy@LoDj@G?eG`Am@Je@Fa@Fk@Jm@FsAHk@Bq@Am@Ak@Cs@Ia@IYI]K[Mi@YYSWOa@Yq@k@m@g@}@u@g@a@eByA}BkB{@s@MKc@]_Aw@}OsMaBsAuBcB]Y{AoA_@Yy@s@KG?AWSsBeBeCsBwBeBwAmA}BmBuBiBsAiAgByAa@_@wBeBcBuAGGAA_Aw@g@_@e@_@{AqAk@g@g@_@mAcAk@c@g@[c@Uc@Sm@S[I]I[G_@Ec@CCA_@AGAuDEgEWaBKgCOe@EyAIgAIs@Go@CkCQq@E{BIgAEa@A[AMAM?oBIs@EOAu@EGAI?s@G{@EoAIgAIA?G?aBKm@Ee@Cy@IWAYCyCSC?WCcAEKAC?OAsBOYCWAuDWIAMAE?u@G{@GKAuCW}Gm@o@GkAKc@EKAE?y@Im@GiAOiAOu@IgBSo@G_AIwAKqAIq@Ei@EsAIcAImCO{CUmCQSAWAe@CwBOWCWAKAc@CeAI[CG?EA]CaAGSAiEYw@GMAYAcAIwIm@A?IAIAmDS?AsBMI?{@Gk@EcAGsAKWAgBMQAk@Eg@Eg@E_@A_@CGA[CG?QAKAoAGeBEoAGoCK]?q@EUAiBIWCkAG}BMmF[aAGm@EkBMMAK?}DWSAq@Ec@EKAC?a@CIAG?E?iAIaAGEA_CMs@EsAKWAkAIKAe@CcCOGA{BMgDSeBMe@E_@EI?QCYAa@AWAQ?M?MAK?KAOA[CYCy@KUEMAKAKC[EgAWWGoAWYG{Co@q@MMEA?s@QYIWIq@[m@]EAa@W]S]WWYMO[[a@c@e@e@o@q@SSUWEEUUUWa@c@UWQQcAeAg@k@mAoAIKGG_@c@SSw@}@QSQWOSe@w@e@y@q@cBm@mBs@eCe@_BWy@[eA_@qAg@cBM_@M[O_@O_@Sc@IOAAS_@QWGKOWMOMQW[SWSSKIIG{BqBQQMKCCAAA?SQSS_Ay@u@q@_@]CAAACCCCi@e@KKYWAAs@k@[Y][a@_@WUm@g@'},
'start_location': {'lat': 40.0333486, 'lng': -3.925665899999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '1.7 km', 'value': 1693},
'duration': {'text': '2 mins', 'value': 110},
'end_location': {'lat': 40.4001319, 'lng': -3.7183967},
'html_instructions': 'Take exit <b>2A</b> to merge onto <b>M-30</b> toward <b>A-5</b>/<wbr/><b>Badajoz</b>/<wbr/><b>A-6</b>',
'maneuver': 'ramp-right',
'polyline': {'points': 'oxpuFtlrUIWEGGIEGAGEOAKAA?EAI?G@G?A?IBK@IBI?ADIDIDKJOHKLKHIJGDAFEDAFADADAP@H@BB@?HDDBFFBB@D@BBFBF@H?L?N@b@EHGFUd@Ud@CHg@tAQr@EPGTGRMj@?@Id@ABQ|@?l@?TETETEVCNADMl@i@vCKb@ENMn@ABEL]|AEPA?AHA@Ol@ENI\\Ql@On@ENGXA@Of@Qj@Yx@ELSd@Sf@Sf@KXGJUb@CFQ^CDCDEFEJEJyAxBa@l@MTYb@W`@Wb@MPINQXEHQ\\CFOd@A@Oh@AB[|BAHIl@EREVIl@Ij@Il@Il@EPER?j@@\\?HDn@@`@Fz@@LB~@FlA'},
'start_location': {'lat': 40.3957623, 'lng': -3.7039499},
'travel_mode': 'DRIVING'},
{'distance': {'text': '1.2 km', 'value': 1160},
'duration': {'text': '1 min', 'value': 74},
'end_location': {'lat': 40.40876859999999, 'lng': -3.7214006},
'html_instructions': 'Keep <b>left</b> to stay on <b>M-30</b>',
'maneuver': 'keep-left',
'polyline': {'points': 'ysquF~fuU?\\@T?H@V?V?HAd@?@Cj@Gf@E\\AFCPAFAHCLELCJWr@Uj@a@n@YX[X[XOLMHa@Ti@Tm@Ru@NOBYF[DO?SCKDIBGBi@HMBOBcANa@FC@_AHi@FWBe@Du@BQ?c@?i@C]AC?KASCc@Gi@Kc@KYGECk@OoA_@q@UYKICy@UMEo@Iw@EyAA'},
'start_location': {'lat': 40.4001319, 'lng': -3.7183967},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.3 km', 'value': 259},
'duration': {'text': '1 min', 'value': 28},
'end_location': {'lat': 40.4110837, 'lng': -3.721353},
'html_instructions': 'Slight <b>right</b> (signs for <b>Pᵒ V. del Puerto</b>/<wbr/><b>C/<wbr/> Segovia</b>)',
'maneuver': 'turn-slight-right',
'polyline': {'points': 'yisuFvyuUm@QMAk@BQ?Q@A?a@@A?S@M?A?Y?G@c@?U@G?i@@Q?A?O?E?G@S?A?K?UG'},
'start_location': {'lat': 40.40876859999999, 'lng': -3.7214006},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.3 km', 'value': 324},
'duration': {'text': '1 min', 'value': 58},
'end_location': {'lat': 40.4139789, 'lng': -3.7209563},
'html_instructions': 'Merge onto <b>P.º de la Virgen del Puerto</b>',
'maneuver': 'merge',
'polyline': {'points': 'gxsuFlyuUkAAIAu@Co@Ew@GUCk@GGAmBSUAsAKm@G'},
'start_location': {'lat': 40.4110837, 'lng': -3.721353},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.8 km', 'value': 764},
'duration': {'text': '2 mins', 'value': 121},
'end_location': {'lat': 40.413898, 'lng': -3.7119377},
'html_instructions': 'Turn <b>right</b> onto <b>C. de Segovia</b>',
'maneuver': 'turn-right',
'polyline': {'points': 'kjtuF~vuUBu@?m@@_D?q@@kB@y@?e@?a@@{A@iC?C?e@?k@?mA?E?S?M@W?O?mA?]?U?[?u@?sA?y@?i@?K?_@?M?O?C?G?]?I?W?_A?}A?M@a@?A?IAQ'},
'start_location': {'lat': 40.4139789, 'lng': -3.7209563},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.1 km', 'value': 95},
'duration': {'text': '1 min', 'value': 31},
'end_location': {'lat': 40.4144408, 'lng': -3.712543399999999},
'html_instructions': 'Turn <b>left</b> onto <b>C. de la Villa</b>',
'maneuver': 'turn-left',
'polyline': {'points': '{ituFr~sUS?W?A?A?A@ERGZCHEREPELAD?@A@A@A?A@A?A?CAAAAA'},
'start_location': {'lat': 40.413898, 'lng': -3.7119377},
'travel_mode': 'DRIVING'},
{'distance': {'text': '84 m', 'value': 84},
'duration': {'text': '1 min', 'value': 26},
'end_location': {'lat': 40.414991, 'lng': -3.7122205},
'html_instructions': '<b>C. de la Villa</b> turns <b>right</b> and becomes <b>C. del Pretil de los Consejos</b>',
'polyline': {'points': 'gmtuFjbtUEKCECCCCACEAC?iALEm@'},
'start_location': {'lat': 40.4144408, 'lng': -3.712543399999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '26 m', 'value': 26},
'duration': {'text': '1 min', 'value': 9},
'end_location': {'lat': 40.4152243, 'lng': -3.712259699999999},
'html_instructions': 'Turn <b>left</b> onto <b>C. del Sacramento</b>',
'maneuver': 'turn-left',
'polyline': {'points': 'uptuFj`tUm@F'},
'start_location': {'lat': 40.414991, 'lng': -3.7122205},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.6 km', 'value': 626},
'duration': {'text': '3 mins', 'value': 200},
'end_location': {'lat': 40.4165207, 'lng': -3.705076},
'html_instructions': 'Turn <b>right</b> onto <b>C. Mayor</b>',
'maneuver': 'turn-right',
'polyline': {'points': 'crtuFr`tUCMIaACYAOE]C[AAI{@?CMoAEYGk@ESE[UuAEQ?AAGCKIg@EWIm@Ge@?GIe@Ga@Ge@AC?IAG?CGo@Ek@Gq@Ek@?ICSEs@CYOiBCa@QkC'},
'start_location': {'lat': 40.4152243, 'lng': -3.712259699999999},
'travel_mode': 'DRIVING'}],
'traffic_speed_entry': [],
'via_waypoint': []}],
'overview_polyline': {'points': 'quhrF`rqWcHzBqKzCkI~BUAMQIOVqAlByF`@yAYi@Q@EDe@Y_A_DYwAMSm@mBs@mEMyMJM@m@_@OuDkBWDMXUd@cHI{K[UYi@GkAh@cJUgFOkEg@}EgBkB_@eFK}FoBcCUcBIkMX_JEcDUaF{@yHkBoHgBiGeAaFw@wIqB_GuAeR_FiPyGiHaDkG{DeHsCys@eXol@sTyFqBsE_AcVyDsNmE_NeEwKmBkGeCyEuC_H_FcE}BeEgCcUyOgNqE}C_AqCoAcM_IgQqLaIyGmEiCcIaE{GyE_CkBsNwJoFiDqPkKiLaIq`Amn@iu@if@aJ}FqIuEqNgFmIiBgH_AuFa@qGIaPh@cPhAeIDqFg@kFqA_FyBsEaD}DcEgDeFoC_GyFgQaIkX_IuWyFeOiIwPkEgHsLuOmIqIyUuRka@y[_n@of@kwAwiAua@cb@cVyVwLgMgDcGeBuH}C_YoJoz@uEsa@yB{NwCoIiDcGaBwBqCsCcCkBuJ_F{f@wUoSwJuMaHaQ_Lk\\cTwEsDqDqDmDqEmCmEiF_K{EoHgFmFgFeE}IaFoFwBcG}AcGyAkWqGub@wKaU}FqPqFmPsF_ImCkPaHgGaCwIqCkNoCuJwA}HkBeDkAgNgFoJqDyGeDwOmGoSwHsLiDyMuEoQ{HcVcJed@oPqeAm`@cHqCsDaCqBoB_CeD_CcFwTgq@oEmMkCiEuDeD_E}AkC_@yCAqH~@al@dKiFl@_CCsCYkCu@mF_DkU{QiGyEiFsDcEmBiEsAoDo@iRmAw[_B}PgAmMuBaOiDiSyEgZ}G_IwBwFwC_F}E{CiFyAaEsB}ImDcSoCyLmDoHoCiDmCaCwE_CmFcBcIgCuIuEsReLci@o[gf@mYsq@ca@iNiI_LaG}UkNeIyEmCqAoCs@oBMgCJq_@|Fkd@dH{BZ_FH{Ca@}BgAcN{Ka]{Xub@e^oMoKmEoD}CyA}Di@gNk@oIi@cPw@mG[sV_Bo_@sCw[yCq_AkGoV_B{a@mBsv@_FyIk@yK{BuBe@qCmAcBeAcBiBsE{EsGcHoB}BmCiFqGiTsBiE_CwCaEoDyI{HeCyB]q@KeAHm@jAyAbAKb@^J\\CjA_CnG_@fBSdC{AbIuCpLgEpKgHjLeAdFcA`HCfBPzCNdG[zDOp@iBhDuAjAoDnAgCZ{G|@qFFuDq@yGqBoFc@}ABkBDuCBkEMiK}@m@GBu@@mEB}FBqL@gF?aP@{@UQY?Qp@U|@KLW[OIiALEm@q@EUiCO}AcAoHq@uEqAsOQkC'},
'summary': 'A-42',
'warnings': [],
'waypoint_order': []}],
'status': 'OK'}
dist_km = data_json['routes'][0]['legs'][0]['distance']['text']
dist_km
'74.3 km'
dist_m = data_json['routes'][0]['legs'][0]['distance']['value']
dist_m
74322
time_min = data_json['routes'][0]['legs'][0]['duration']['text']
time_min
'59 mins'
time_sec = data_json['routes'][0]['legs'][0]['duration']['value']
time_sec
3513
I do not specify the region
https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM
re1 = requests.get( "https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&key=AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE")
data_json = re1.json()
data_json
{'geocoded_waypoints': [{'geocoder_status': 'OK',
'place_id': 'ChIJeU4e_C2HO4gRRcM6RZ_IPHw',
'types': ['locality', 'political']},
{'geocoder_status': 'OK',
'place_id': 'ChIJgTwKgJcpQg0RaSKMYcHeNsQ',
'types': ['locality', 'political']}],
'routes': [],
'status': 'ZERO_RESULTS'}
dist_km = data_json['routes'][0]['legs'][0]['distance']['text']
dist_km
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/2363758695.py in <module>
----> 1 dist_km = data_json['routes'][0]['legs'][0]['distance']['text']
2 dist_km
IndexError: list index out of range
dist_m = data_json['routes'][0]['legs'][0]['distance']['value']
dist_m
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/3069841086.py in <module>
----> 1 dist_m = data_json['routes'][0]['legs'][0]['distance']['value']
2 dist_m
IndexError: list index out of range
time_min = data_json['routes'][0]['legs'][0]['duration']['text']
time_min
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/163641103.py in <module>
----> 1 time_min = data_json['routes'][0]['legs'][0]['duration']['text']
2 time_min
IndexError: list index out of range
time_sec = data_json['routes'][0]['legs'][0]['duration']['value']
time_sec
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/2935558060.py in <module>
----> 1 time_sec = data_json['routes'][0]['legs'][0]['duration']['value']
2 time_sec
IndexError: list index out of range
Example from students!#
# Google MapsDdirections API endpoint
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
## Fixed Parameters
# Paramaters
traffic_model = 'best_guess'
# Departure time
departure_time= 'now'
# driving, walking, biclycling, transit
mode = 'driving'
# key
api_key = 'AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE'
# region to look for (spain= es , germany = de , Switzerland= swiss)
region = 'pe'
## Parameters
# Origin
origin = "Lima"
# Destinations
destination = "Callao"
#Building the URL for the request
nav_request = 'origin={}&destination={}&departure_time={}&traffic_model={}&mode={}®ion={}&key={}'.format(origin ,
destination , departure_time , traffic_model , mode, region, api_key)
# https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE
# Concatenate strings
request = endpoint + nav_request
#Sends the request and reads the response.
response = urllib.request.urlopen(request).read()
#Loads response as JSON
directions = json.loads(response)
legs = directions['routes'][0]['legs'][0]
legs
Show code cell output
{'distance': {'text': '11.7 km', 'value': 11682},
'duration': {'text': '31 mins', 'value': 1836},
'duration_in_traffic': {'text': '34 mins', 'value': 2031},
'end_address': 'Callao, Peru',
'end_location': {'lat': -12.0505067, 'lng': -77.1261377},
'start_address': 'Lima, Peru',
'start_location': {'lat': -12.0463675, 'lng': -77.0426847},
'steps': [{'distance': {'text': '0.6 km', 'value': 637},
'duration': {'text': '1 min', 'value': 56},
'end_location': {'lat': -12.0406582, 'lng': -77.04315969999999},
'html_instructions': 'Head <b>north</b> on <b>Av. Alfonso Ugarte</b>',
'polyline': {'points': 'xxohAvkfuMuCLS@qDLc@BQ@qAB_CJ_CJmAB}@BaAD[BmCPYC'},
'start_location': {'lat': -12.0463675, 'lng': -77.0426847},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.3 km', 'value': 290},
'duration': {'text': '1 min', 'value': 39},
'end_location': {'lat': -12.0380579, 'lng': -77.0433631},
'html_instructions': 'Continue straight onto <b>Av. Alfonso Ugarte</b>/<wbr/><b>Puente del Ejército</b>',
'maneuver': 'straight',
'polyline': {'points': 'bunhAvnfuMM?U@a@Bq@BY@aCDM@K?G?I?A?_@@w@Fu@D[@[@'},
'start_location': {'lat': -12.0406582, 'lng': -77.04315969999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 226},
'duration': {'text': '1 min', 'value': 60},
'end_location': {'lat': -12.0360434, 'lng': -77.04351989999999},
'html_instructions': 'Take the ramp on the <b>left</b>',
'maneuver': 'ramp-left',
'polyline': {'points': 'zdnhA~ofuMK@M@Q?W@K?G@G@ODm@EgAFI?U@W?U@[@a@Ba@B'},
'start_location': {'lat': -12.0380579, 'lng': -77.0433631},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.5 km', 'value': 454},
'duration': {'text': '1 min', 'value': 79},
'end_location': {'lat': -12.0361124, 'lng': -77.04444640000001},
'html_instructions': 'Keep <b>right</b>',
'maneuver': 'keep-right',
'polyline': {'points': 'fxmhA~pfuMQEICGEMOCEACCKCM?K@QHWLYTi@LWHMFIJIHADAFAD?R@HBHFDBFHBDBJ?J?HAJ?JSz@S`AADABCPAFIb@GVADCLAHI`@Q|@'},
'start_location': {'lat': -12.0360434, 'lng': -77.04351989999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.3 km', 'value': 334},
'duration': {'text': '1 min', 'value': 53},
'end_location': {'lat': -12.0370174, 'lng': -77.04377099999999},
'html_instructions': 'Keep <b>right</b> at the fork, follow signs for <b>AV. A. Ugrate</b>',
'maneuver': 'fork-right',
'polyline': {'points': 'txmhAxvfuMM\\EHGFMFA?IBK?KAIAICICEEEGACGOEOCKAK?K?I@G@IBI@?BG?ABCFEDEHEPGt@CTAHAF?~@E|@EH?`@?'},
'start_location': {'lat': -12.0361124, 'lng': -77.04444640000001},
'travel_mode': 'DRIVING'},
{'distance': {'text': '41 m', 'value': 41},
'duration': {'text': '1 min', 'value': 8},
'end_location': {'lat': -12.0373781, 'lng': -77.0437154},
'html_instructions': 'Continue straight (signs for <b>Av. A Ugarte</b>)',
'maneuver': 'straight',
'polyline': {'points': 'j~mhAprfuMv@GNA'},
'start_location': {'lat': -12.0370174, 'lng': -77.04377099999999},
'travel_mode': 'DRIVING'},
{'distance': {'text': '50 m', 'value': 50},
'duration': {'text': '1 min', 'value': 12},
'end_location': {'lat': -12.037823, 'lng': -77.0436922},
'html_instructions': 'Keep <b>right</b> to continue toward <b>Av. Alfonso Ugarte</b>/<wbr/><b>Puente del Ejército</b>',
'maneuver': 'keep-right',
'polyline': {'points': 'r`nhAfrfuMN?F?F?NCf@A'},
'start_location': {'lat': -12.0373781, 'lng': -77.0437154},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.6 km', 'value': 581},
'duration': {'text': '2 mins', 'value': 97},
'end_location': {'lat': -12.0430063, 'lng': -77.0432956},
'html_instructions': 'Keep <b>right</b> to continue on <b>Av. Alfonso Ugarte</b>/<wbr/><b>Puente del Ejército</b><div style="font-size:0.9em">Continue to follow Av. Alfonso Ugarte</div>',
'maneuver': 'keep-right',
'polyline': {'points': 'jcnhA`rfuMhAGf@GXCFAZCJAFAJ?^AHAH?B?T@D?jBCL?^AR?J?fAAh@Cd@CVCrBO`@ChAITAf@Cf@CL?L@NBFBDB'},
'start_location': {'lat': -12.037823, 'lng': -77.0436922},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.8 km', 'value': 841},
'duration': {'text': '3 mins', 'value': 156},
'end_location': {'lat': -12.0439141, 'lng': -77.0509347},
'html_instructions': 'At <b>Pl. Ramón Castilla</b>, take the <b>1st</b> exit onto <b>Av. Argentina</b>',
'maneuver': 'roundabout-right',
'polyline': {'points': 'xcohArofuMFJJNDJDJ@J?F@F?B?\\DfADb@@TDnA@LNjB?t@VbFBb@Bb@?D@PLbE@HJbBLtB@ZDd@HfBBr@@b@@BBN'},
'start_location': {'lat': -12.0430063, 'lng': -77.0432956},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.2 km', 'value': 153},
'duration': {'text': '1 min', 'value': 34},
'end_location': {'lat': -12.0442516, 'lng': -77.0522864},
'html_instructions': 'Keep <b>left</b> to stay on <b>Av. Argentina</b>',
'maneuver': 'keep-left',
'polyline': {'points': 'liohAh_huMHNRj@BFH^DVBN@NBZFvA'},
'start_location': {'lat': -12.0439141, 'lng': -77.0509347},
'travel_mode': 'DRIVING'},
{'distance': {'text': '0.8 km', 'value': 841},
'duration': {'text': '1 min', 'value': 81},
'end_location': {'lat': -12.0449979, 'lng': -77.0599814},
'html_instructions': 'Continue straight to stay on <b>Av. Argentina</b>',
'maneuver': 'straight',
'polyline': {'points': 'pkohAxghuMLhCHzA?\\XxFPdGB^@\\XfEVrFXbG'},
'start_location': {'lat': -12.0442516, 'lng': -77.0522864},
'travel_mode': 'DRIVING'},
{'distance': {'text': '7.2 km', 'value': 7168},
'duration': {'text': '19 mins', 'value': 1152},
'end_location': {'lat': -12.0506397, 'lng': -77.1256013},
'html_instructions': 'Continue straight to stay on <b>Av. Argentina</b>',
'maneuver': 'straight',
'polyline': {'points': 'fpohAzwiuMTxFVfFDrAN|CDlAHbCBf@DtAH~ARfFP`E@HH`CRrENvERhF@P@d@Bb@@ZNtDNjEn@|L?VHnBFvBLrCJhCDp@`@lKDfA?@`@vJZtHDxAXjH@ZNvC\\dJBb@Bd@@b@Bb@@d@Bd@NvDj@~N@PFfBFtAP~EDbAFzAHlCB^@RRtEF`BFvBHlBHxAD`AHbBRvE@j@JxBH`DTtE?T^dJNfET`FJlB?BJlCDfAFvAZnHJrCB`ABX@\\@T@VPrEVrGBp@D`ALvCDn@NpDBh@FdB@Z@\\RjFNjDDfAHlBHzB@N@L@N?LANCLGJGF'},
'start_location': {'lat': -12.0449979, 'lng': -77.0599814},
'travel_mode': 'DRIVING'},
{'distance': {'text': '66 m', 'value': 66},
'duration': {'text': '1 min', 'value': 9},
'end_location': {'lat': -12.0505067, 'lng': -77.1261377},
'html_instructions': 'Enter the roundabout',
'polyline': {'points': 'nsphA~qvuMCBEBCBCBABCDABCDAFAHAF?H?H@FBHBF'},
'start_location': {'lat': -12.0506397, 'lng': -77.1256013},
'travel_mode': 'DRIVING'}],
'traffic_speed_entry': [],
'via_waypoint': []}
8.4.3. Examples#
# Import library
import pandas as pd
import os
import urllib.request, json
import csv
import numpy as np
from tqdm import tqdm_notebook as tqdm
import re
# Revisamos qué tipo de ENCODING tiene nuestra data
import chardet
rawdata = open('../_data/ID_Routes_firms_gps_final.csv', 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']
print(charenc)
UTF-8-SIG
# Importamos el csv file
geodata = pd.read_csv( r'../_data/ID_Routes_firms_gps_final.csv' , delimiter = ';' , header = None , encoding = charenc)
# Cambiamos el nombre de las variables relevantes
geodata = geodata.rename( columns = { geodata.columns[ 0 ] : 'combination', \
geodata.columns[ 10 ] : 'origin', \
geodata.columns[ 11 ] : 'destination', \
} )
geodata
combination | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | origin | destination | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1401 | 261 | 699 | 1 | Alpnach | Obwalden | Zürich | Zürich | NaN | 46.9380412,8.2701754 | 47.3768866,8.541694 |
1 | 2 | 1507 | 261 | 712 | 1 | Hergiswil (NW) | Nidwalden | Zürich | Zürich | NaN | 46.9905821,8.3083735 | 47.3768866,8.541694 |
2 | 3 | 3943 | 261 | 1347 | 1 | Mastrils | Graubünden | Zürich | Zürich | NaN | 46.96628,9.54229 | 47.3768866,8.541694 |
3 | 4 | 5236 | 261 | 1802 | 1 | Collina d'Oro | Tessin | Zürich | Zürich | NaN | 45.9821607,8.917103 | 47.3768866,8.541694 |
4 | 5 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | NaN | 46.0036778,8.951052 | 47.3768866,8.541694 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
433 | 434 | 5635 | 6630 | 2043 | 2514 | Ecublens (VD) | Waadt | Meyrin | Meyrin | NaN | 46.5296363,6.5615252 | 46.2283204,6.070988 |
434 | 435 | 6621 | 6632 | 2485 | 2516 | Genève | Genf | Perly-Certoux | Perly-Certoux | NaN | 46.2043907,6.1431577 | 46.1553483,6.0945809 |
435 | 436 | 6615 | 6643 | 2500 | 2527 | Collex-Bossy | Genf | Vernier | Vernier | NaN | 46.2715983,6.125981 | 46.2122638,6.1052686 |
436 | 437 | 6608 | 6742 | 2493 | 2567 | Carouge (GE) | Genf | Les Bois | Les Bois | NaN | 46.1829674,6.1378539 | 47.1774878,6.9052937 |
437 | 438 | 6741 | 6742 | 2565 | 2567 | Le Bémont | Jura | Les Bois | Les Bois | NaN | 46.5202721,6.678129 | 47.1774878,6.9052937 |
438 rows × 12 columns
# Only 5% of data
geodata_10p = geodata.sample(frac=0.05, replace=True, random_state=1)
geodata_10p.shape
(22, 12)
# Generate lists
combination = geodata_10p['combination'].tolist()
origin = geodata_10p['origin'].tolist()
destination = geodata_10p['destination'].tolist()
destination
['47.4272742,8.6903376',
'47.4012701,7.5156451',
'46.7484013,6.9129687',
'47.1932312,8.644027',
'47.4244818,9.3767173',
'46.310046,6.1735347',
'47.4713115,7.6928374',
'47.0338792,8.425278',
'47.4884348,8.9035411',
'47.0593246,8.8019535',
'47.1244436,8.4432688',
'47.1932312,8.644027',
'47.6958897,8.6380489',
'46.57147,6.77879',
'46.7823704,9.6799111',
'47.100183,8.5162335',
'47.4055145,9.6375563',
'47.4244818,9.3767173',
'46.7265588,6.8955942',
'46.9899874,6.9292732',
'46.71921,6.89887',
'47.45371,9.55054']
# Generate dictionary to store data
data_distance = {}
for c,o,d in tqdm(list(zip(combination,origin, destination))):
print(c,o,d)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/2332559342.py:1: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for c,o,d in tqdm(list(zip(combination,origin, destination))):
38 46.7293301,6.5323588 47.4272742,8.6903376
236 47.41885,7.5427693 47.4012701,7.5156451
397 46.2339777,6.0557663 46.7484013,6.9129687
73 47.1778831,8.5912483 47.1932312,8.644027
256 47.181225,8.4592089 47.4244818,9.3767173
394 46.2043907,6.1431577 46.310046,6.1735347
204 47.5595986,7.5885761 47.4713115,7.6928374
134 47.0458287,8.3724158 47.0338792,8.425278
336 47.4910721,8.8665461 47.4884348,8.9035411
145 46.5196535,6.6322734 47.0593246,8.8019535
130 47.1771936,8.4271865 47.1244436,8.4432688
72 47.19717,8.71338 47.1932312,8.644027
238 47.3270602,8.801356 47.6958897,8.6380489
391 47.5595986,7.5885761 46.57147,6.77879
282 47.6958897,8.6380489 46.7823704,9.6799111
179 47.2949282,8.5644799 47.100183,8.5162335
277 47.4055145,9.6375563 47.4055145,9.6375563
255 47.3971476,8.6180128 47.4244818,9.3767173
358 46.2339777,6.0557663 46.7265588,6.8955942
403 47.5595986,7.5885761 46.9899874,6.9292732
396 46.2339777,6.0557663 46.71921,6.89887
253 47.1914822,8.8299043 47.45371,9.55054
# Loop to generate info about geolocations
distance_info = np.zeros(shape=(len(combination),7), dtype =float)
i=0
for c,o,d in tqdm(list(zip(combination,origin, destination))):
try:
# Google MapsDdirections API endpoint
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
## Fixed Parameters
# Paramaters
traffic_model = 'best_guess'
# Departure time
departure_time= 'now'
# driving, walking, biclycling, transit
mode = 'driving'
# key
api_key = 'AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE'
# region to look for (spain= es , germany = de , Switzerland= swiss)
region = 'ch'
## Parameters
# Origin
origin = o
# Destinations
destination = d
#Building the URL for the request
nav_request = 'origin={}&destination={}&departure_time={}&traffic_model={}&mode={}®ion={}&key={}'.format(origin ,
destination , departure_time , traffic_model , mode, region, api_key)
# https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid®ion=es&key=AIzaSyD_4E6Hd-fYECy3mZ4asxN23JjIstvLdoE
# Concatenate strings
request = endpoint + nav_request
#Sends the request and reads the response.
response = urllib.request.urlopen(request).read()
#Loads response as JSON
directions = json.loads(response)
#print(json.dumps(directions, indent = 2))
legs = directions['routes'][0]['legs'][0]
distance_info[i][0] = c
distance_info[i][1] = float(re.sub("[^0-9.]", "", legs['distance']['text']))
distance_info[i][2] = legs['distance']['value']
distance_info[i][3] = float(re.sub("[^0-9.]", "", legs['duration']['text']))
distance_info[i][4] = legs['duration']['value']
distance_info[i][5] = float(re.sub("[^0-9.]", "", legs['duration_in_traffic']['text']))
distance_info[i][6] = legs['duration_in_traffic']['value']
i=i+1
my_keys = ['distance', 'duration', 'duration_in_traffic']
info = { my_key: legs[my_key] for my_key in my_keys }
data_distance[c] = info
except Exception as e:
distance_info[i][0] = c
distance_info[i][1] = "nan"
distance_info[i][2] = "nan"
distance_info[i][3] = "nan"
distance_info[i][4] = "nan"
distance_info[i][5] = "nan"
distance_info[i][6] = "nan"
i=i+1
#data_distance[c] = {'distance': {'text': 'nan', 'value': 0}, 'duration': {'text': 'nan', 'value': 0}, 'duration_in_traffic': {'text': 'nan', 'value': 0}}
print(c)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/1758599573.py:5: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`
for c,o,d in tqdm(list(zip(combination,origin, destination))):
distance_info
Show code cell output
array([[3.80000e+01, 2.19000e+02, 2.19426e+05, 2.16000e+02, 8.17800e+03,
2.70000e+01, 7.59100e+03],
[2.36000e+02, 3.80000e+00, 3.78000e+03, 5.00000e+00, 3.10000e+02,
6.00000e+00, 3.31000e+02],
[3.97000e+02, 1.03000e+02, 1.03399e+05, 1.18000e+02, 4.68100e+03,
1.13000e+02, 4.35100e+03],
[7.30000e+01, 7.90000e+00, 7.91400e+03, 9.00000e+00, 5.46000e+02,
9.00000e+00, 5.27000e+02],
[2.56000e+02, 1.25000e+02, 1.24639e+05, 1.22000e+02, 4.89900e+03,
1.15000e+02, 4.49600e+03],
[3.94000e+02, 1.28000e+01, 1.27640e+04, 2.60000e+01, 1.56200e+03,
2.30000e+01, 1.35100e+03],
[2.04000e+02, 2.57000e+01, 2.56940e+04, 2.80000e+01, 1.68000e+03,
2.70000e+01, 1.60300e+03],
[1.34000e+02, 1.36000e+01, 1.35670e+04, 1.90000e+01, 1.16700e+03,
1.80000e+01, 1.08900e+03],
[3.36000e+02, 3.60000e+00, 3.59200e+03, 5.00000e+00, 3.01000e+02,
5.00000e+00, 2.90000e+02],
[1.45000e+02, 2.75000e+02, 2.74599e+05, 3.30000e+01, 1.09630e+04,
2.51000e+02, 1.02650e+04],
[1.30000e+02, 8.50000e+00, 8.47100e+03, 1.10000e+01, 6.34000e+02,
1.00000e+01, 6.09000e+02],
[7.20000e+01, 6.60000e+00, 6.64500e+03, 1.10000e+01, 6.45000e+02,
9.00000e+00, 5.69000e+02],
[2.38000e+02, 5.95000e+01, 5.95270e+04, 4.70000e+01, 2.80000e+03,
4.40000e+01, 2.61300e+03],
[3.91000e+02, 1.78000e+02, 1.77991e+05, 2.20000e+01, 7.33600e+03,
1.55000e+02, 6.89000e+03],
[2.82000e+02, 1.76000e+02, 1.75854e+05, 2.33000e+02, 9.15500e+03,
2.24000e+02, 8.64800e+03],
[1.79000e+02, 3.12000e+01, 3.11990e+04, 3.90000e+01, 2.31400e+03,
3.60000e+01, 2.16600e+03],
[2.77000e+02, 1.00000e+00, 0.00000e+00, 1.00000e+00, 0.00000e+00,
1.00000e+00, 0.00000e+00],
[2.55000e+02, 7.98000e+01, 7.98180e+04, 5.50000e+01, 3.28200e+03,
5.10000e+01, 3.04100e+03],
[3.58000e+02, 1.02000e+02, 1.01782e+05, 1.17000e+02, 4.64200e+03,
1.11000e+02, 4.28400e+03],
[4.03000e+02, 1.28000e+02, 1.27923e+05, 1.39000e+02, 5.93800e+03,
1.31000e+02, 5.44800e+03],
[3.96000e+02, 1.03000e+02, 1.03200e+05, 1.18000e+02, 4.68500e+03,
1.12000e+02, 4.33800e+03],
[2.53000e+02, 1.20000e+02, 1.20317e+05, 1.18000e+02, 4.66300e+03,
1.15000e+02, 4.50700e+03]])
distance_api = pd.DataFrame(distance_info, columns = ['Combination', 'Distance_Km','Distance_meters','Duration_min', 'Duration_seconds', \
'Duration_min_traf', 'Duration_seconds_traf'])
distance_api
Combination | Distance_Km | Distance_meters | Duration_min | Duration_seconds | Duration_min_traf | Duration_seconds_traf | |
---|---|---|---|---|---|---|---|
0 | 38.0 | 219.0 | 219426.0 | 216.0 | 8178.0 | 27.0 | 7591.0 |
1 | 236.0 | 3.8 | 3780.0 | 5.0 | 310.0 | 6.0 | 331.0 |
2 | 397.0 | 103.0 | 103399.0 | 118.0 | 4681.0 | 113.0 | 4351.0 |
3 | 73.0 | 7.9 | 7914.0 | 9.0 | 546.0 | 9.0 | 527.0 |
4 | 256.0 | 125.0 | 124639.0 | 122.0 | 4899.0 | 115.0 | 4496.0 |
5 | 394.0 | 12.8 | 12764.0 | 26.0 | 1562.0 | 23.0 | 1351.0 |
6 | 204.0 | 25.7 | 25694.0 | 28.0 | 1680.0 | 27.0 | 1603.0 |
7 | 134.0 | 13.6 | 13567.0 | 19.0 | 1167.0 | 18.0 | 1089.0 |
8 | 336.0 | 3.6 | 3592.0 | 5.0 | 301.0 | 5.0 | 290.0 |
9 | 145.0 | 275.0 | 274599.0 | 33.0 | 10963.0 | 251.0 | 10265.0 |
10 | 130.0 | 8.5 | 8471.0 | 11.0 | 634.0 | 10.0 | 609.0 |
11 | 72.0 | 6.6 | 6645.0 | 11.0 | 645.0 | 9.0 | 569.0 |
12 | 238.0 | 59.5 | 59527.0 | 47.0 | 2800.0 | 44.0 | 2613.0 |
13 | 391.0 | 178.0 | 177991.0 | 22.0 | 7336.0 | 155.0 | 6890.0 |
14 | 282.0 | 176.0 | 175854.0 | 233.0 | 9155.0 | 224.0 | 8648.0 |
15 | 179.0 | 31.2 | 31199.0 | 39.0 | 2314.0 | 36.0 | 2166.0 |
16 | 277.0 | 1.0 | 0.0 | 1.0 | 0.0 | 1.0 | 0.0 |
17 | 255.0 | 79.8 | 79818.0 | 55.0 | 3282.0 | 51.0 | 3041.0 |
18 | 358.0 | 102.0 | 101782.0 | 117.0 | 4642.0 | 111.0 | 4284.0 |
19 | 403.0 | 128.0 | 127923.0 | 139.0 | 5938.0 | 131.0 | 5448.0 |
20 | 396.0 | 103.0 | 103200.0 | 118.0 | 4685.0 | 112.0 | 4338.0 |
21 | 253.0 | 120.0 | 120317.0 | 118.0 | 4663.0 | 115.0 | 4507.0 |
distance_api.to_csv (r"distance_info_1.csv", index = False, header=True)
8.5. References#
https://developers.google.com/maps/documentation/directions/get-directions#required-parameters
Let´s combine Class-API#
class google_distance:
def __init__( self, api_key = None ):
if api_key is None:
raise TypeError(f'`api_key` should not be None.')
elif isinstance( api_key , str ):
self.api_key = api_key
else:
raise TypeError( f'api_key` should be a str.' )
def results_directions( self, result ):
if len( result ) != 0:
distance_meters = result[0]['legs'][0]['distance']['value']
time_seconds = result[0]['legs'][0]['duration']['value']
else:
distance_meters = ''
time_seconds = ''
return ( distance_meters , time_seconds)
def directions( self, data , lat_orig, lon_orig , lat_dest, lon_dest, output = 'all' ):
# The output variable you can use the following values : "driving" , "walking" , "bicycling", "transit"
gmaps = googlemaps.Client( key= self.api_key )
mode_directions = [ "driving" , "walking" , "bicycling", "transit" ]
data1 = data.copy()
if output != 'all':
mode_directions = [ output ]
for mode in mode_directions:
# We use the lambda funtion
result = data1.apply( lambda row: self.results_directions( gmaps.directions( \
origin = ( row[f'{lat_orig}'] , row[ f'{lon_orig}'] ) , \
destination = ( row[ f'{lat_dest}'] , row[ f'{lon_dest}'] ) , \
mode = mode ,
alternatives = False ) ), \
axis=1
)
data1[[ f'{mode}_dist_mt', f'{mode}_time_sec' ]] = pd.DataFrame( result.tolist(), index = data1.index )
return data1
geodata[['lat_orig', 'lon_orig']] = geodata['origin'].str.split(',', 1, expand=True)
geodata[['lat_dest', 'lon_dest']] = geodata['destination'].str.split(',', 1, expand=True)
geodata
Show code cell output
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/829315845.py:1: FutureWarning: In a future version of pandas all arguments of StringMethods.split except for the argument 'pat' will be keyword-only.
geodata[['lat_orig', 'lon_orig']] = geodata['origin'].str.split(',', 1, expand=True)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_33620/829315845.py:2: FutureWarning: In a future version of pandas all arguments of StringMethods.split except for the argument 'pat' will be keyword-only.
geodata[['lat_dest', 'lon_dest']] = geodata['destination'].str.split(',', 1, expand=True)
combination | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | origin | destination | lat_orig | lon_orig | lat_dest | lon_dest | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1401 | 261 | 699 | 1 | Alpnach | Obwalden | Zürich | Zürich | NaN | 46.9380412,8.2701754 | 47.3768866,8.541694 | 46.9380412 | 8.2701754 | 47.3768866 | 8.541694 |
1 | 2 | 1507 | 261 | 712 | 1 | Hergiswil (NW) | Nidwalden | Zürich | Zürich | NaN | 46.9905821,8.3083735 | 47.3768866,8.541694 | 46.9905821 | 8.3083735 | 47.3768866 | 8.541694 |
2 | 3 | 3943 | 261 | 1347 | 1 | Mastrils | Graubünden | Zürich | Zürich | NaN | 46.96628,9.54229 | 47.3768866,8.541694 | 46.96628 | 9.54229 | 47.3768866 | 8.541694 |
3 | 4 | 5236 | 261 | 1802 | 1 | Collina d'Oro | Tessin | Zürich | Zürich | NaN | 45.9821607,8.917103 | 47.3768866,8.541694 | 45.9821607 | 8.917103 | 47.3768866 | 8.541694 |
4 | 5 | 5192 | 261 | 1837 | 1 | Lugano | Tessin | Zürich | Zürich | NaN | 46.0036778,8.951052 | 47.3768866,8.541694 | 46.0036778 | 8.951052 | 47.3768866 | 8.541694 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
433 | 434 | 5635 | 6630 | 2043 | 2514 | Ecublens (VD) | Waadt | Meyrin | Meyrin | NaN | 46.5296363,6.5615252 | 46.2283204,6.070988 | 46.5296363 | 6.5615252 | 46.2283204 | 6.070988 |
434 | 435 | 6621 | 6632 | 2485 | 2516 | Genève | Genf | Perly-Certoux | Perly-Certoux | NaN | 46.2043907,6.1431577 | 46.1553483,6.0945809 | 46.2043907 | 6.1431577 | 46.1553483 | 6.0945809 |
435 | 436 | 6615 | 6643 | 2500 | 2527 | Collex-Bossy | Genf | Vernier | Vernier | NaN | 46.2715983,6.125981 | 46.2122638,6.1052686 | 46.2715983 | 6.125981 | 46.2122638 | 6.1052686 |
436 | 437 | 6608 | 6742 | 2493 | 2567 | Carouge (GE) | Genf | Les Bois | Les Bois | NaN | 46.1829674,6.1378539 | 47.1774878,6.9052937 | 46.1829674 | 6.1378539 | 47.1774878 | 6.9052937 |
437 | 438 | 6741 | 6742 | 2565 | 2567 | Le Bémont | Jura | Les Bois | Les Bois | NaN | 46.5202721,6.678129 | 47.1774878,6.9052937 | 46.5202721 | 6.678129 | 47.1774878 | 6.9052937 |
438 rows × 16 columns
geodata_10p = geodata.sample(frac=0.05, replace=True, random_state=1)
geodata_10p
Show code cell output
combination | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | origin | destination | lat_orig | lon_orig | lat_dest | lon_dest | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
37 | 38 | 5757 | 174 | 2160 | 74 | Orbe | Waadt | Illnau-Effretikon | Illnau-Effretikon | NaN | 46.7293301,6.5323588 | 47.4272742,8.6903376 | 46.7293301 | 6.5323588 | 47.4272742 | 8.6903376 |
235 | 236 | 2782 | 2792 | 1059 | 1120 | Brislach | Basel Land | Wahlen | Wahlen | NaN | 47.41885,7.5427693 | 47.4012701,7.5156451 | 47.41885 | 7.5427693 | 47.4012701 | 7.5156451 |
396 | 397 | 2223 | 5830 | 836 | 2272 | Le Glèbe | Fribourg | Villarzel | Villarzel | NaN | 46.2339777,6.0557663 | 46.7484013,6.9129687 | 46.2339777 | 6.0557663 | 46.7484013 | 6.9129687 |
72 | 73 | 1704 | 140 | 743 | 130 | Menzingen | Zug | Schönenberg (ZH) | Schönenberg (ZH) | NaN | 47.1778831,8.5912483 | 47.1932312,8.644027 | 47.1778831 | 8.5912483 | 47.1932312 | 8.644027 |
255 | 256 | 1702 | 3203 | 741 | 1182 | Cham | Zug | St. Gallen | St. Gallen | NaN | 47.181225,8.4592089 | 47.4244818,9.3767173 | 47.181225 | 8.4592089 | 47.4244818 | 9.3767173 |
393 | 394 | 6621 | 5729 | 2485 | 2241 | Genève | Genf | Tannay | Tannay | NaN | 46.2043907,6.1431577 | 46.310046,6.1735347 | 46.2043907 | 6.1431577 | 46.310046 | 6.1735347 |
203 | 204 | 2701 | 2478 | 1040 | 1005 | Basel | Basel | Nuglar-St.Pantaleon | Nuglar-St.Pantaleon | NaN | 47.5595986,7.5885761 | 47.4713115,7.6928374 | 47.5595986 | 7.5885761 | 47.4713115 | 7.6928374 |
133 | 134 | 1063 | 1069 | 609 | 642 | Meggen | Luzern | Weggis | Weggis | NaN | 47.0458287,8.3724158 | 47.0338792,8.425278 | 47.0458287 | 8.3724158 | 47.0338792 | 8.425278 |
335 | 336 | 217 | 4551 | 39 | 1666 | Elgg | Zürich | Aadorf | Aadorf | NaN | 47.4910721,8.8665461 | 47.4884348,8.9035411 | 47.4910721 | 8.8665461 | 47.4884348 | 8.9035411 |
144 | 145 | 5586 | 1375 | 1914 | 694 | Lausanne | Waadt | Unteriberg | Unteriberg | NaN | 46.5196535,6.6322734 | 47.0593246,8.8019535 | 46.5196535 | 6.6322734 | 47.0593246 | 8.8019535 |
129 | 130 | 1703 | 1064 | 742 | 610 | Hünenberg | Zug | Meierskappel | Meierskappel | NaN | 47.1771936,8.4271865 | 47.1244436,8.4432688 | 47.1771936 | 8.4271865 | 47.1244436 | 8.4432688 |
71 | 72 | 1323 | 140 | 697 | 130 | Wollerau | Schwyz | Schönenberg (ZH) | Schönenberg (ZH) | NaN | 47.19717,8.71338 | 47.1932312,8.644027 | 47.19717 | 8.71338 | 47.1932312 | 8.644027 |
237 | 238 | 121 | 2939 | 162 | 1129 | Wetzikon (ZH) | Zürich | Schaffhausen | Schaffhausen | NaN | 47.3270602,8.801356 | 47.6958897,8.6380489 | 47.3270602 | 8.801356 | 47.6958897 | 8.6380489 |
390 | 391 | 2701 | 5799 | 1040 | 2232 | Basel | Basel | Servion | Servion | NaN | 47.5595986,7.5885761 | 46.57147,6.77879 | 47.5595986 | 7.5885761 | 46.57147 | 6.77879 |
281 | 282 | 2939 | 3921 | 1129 | 1274 | Schaffhausen | Schaffhausen | Arosa | Arosa | NaN | 47.6958897,8.6380489 | 46.7823704,9.6799111 | 47.6958897 | 8.6380489 | 46.7823704 | 9.6799111 |
178 | 179 | 141 | 1710 | 140 | 749 | Thalwil | Zürich | Walchwil | Walchwil | NaN | 47.2949282,8.5644799 | 47.100183,8.5162335 | 47.2949282 | 8.5644799 | 47.100183 | 8.5162335 |
276 | 277 | 3238 | 3238 | 1262 | 1262 | Widnau | Sankt Gallen | Widnau | Widnau | NaN | 47.4055145,9.6375563 | 47.4055145,9.6375563 | 47.4055145 | 9.6375563 | 47.4055145 | 9.6375563 |
254 | 255 | 191 | 3203 | 35 | 1182 | Dübendorf | Zürich | St. Gallen | St. Gallen | NaN | 47.3971476,8.6180128 | 47.4244818,9.3767173 | 47.3971476 | 8.6180128 | 47.4244818 | 9.3767173 |
357 | 358 | 2223 | 5811 | 836 | 1966 | Le Glèbe | Fribourg | Cerniaz (VD) | Cerniaz (VD) | NaN | 46.2339777,6.0557663 | 46.7265588,6.8955942 | 46.2339777 | 6.0557663 | 46.7265588 | 6.8955942 |
402 | 403 | 2701 | 6458 | 1040 | 2432 | Basel | Basel | Neuchâtel | Neuchâtel | NaN | 47.5595986,7.5885761 | 46.9899874,6.9292732 | 47.5595986 | 7.5885761 | 46.9899874 | 6.9292732 |
395 | 396 | 2223 | 5829 | 836 | 2261 | Le Glèbe | Fribourg | Villars-Bramard | Villars-Bramard | NaN | 46.2339777,6.0557663 | 46.71921,6.89887 | 46.2339777 | 6.0557663 | 46.71921 | 6.89887 |
252 | 253 | 1341 | 3038 | 670 | 1175 | Altendorf | Schwyz | Wolfhalden | Wolfhalden | NaN | 47.1914822,8.8299043 | 47.45371,9.55054 | 47.1914822 | 8.8299043 | 47.45371 | 9.55054 |
google_dir_api = google_distance( api_key = 'AIzaSyAXb1CyMDuAKkbk25LPIo9_XGSMGioLhEU' )
dir_results = google_dir_api.directions( geodata_10p , lat_orig='lat_orig', lon_orig='lon_orig' , lat_dest='lat_dest', lon_dest='lon_dest', output = 'all')
dir_results
Show code cell output
combination | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | lat_dest | lon_dest | driving_dist_mt | driving_time_sec | walking_dist_mt | walking_time_sec | bicycling_dist_mt | bicycling_time_sec | transit_dist_mt | transit_time_sec | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
37 | 38 | 5757 | 174 | 2160 | 74 | Orbe | Waadt | Illnau-Effretikon | Illnau-Effretikon | NaN | ... | 47.4272742 | 8.6903376 | 219428 | 8298 | 203994 | 151936 | 219371 | 41572 | 220550 | 12103 |
235 | 236 | 2782 | 2792 | 1059 | 1120 | Brislach | Basel Land | Wahlen | Wahlen | NaN | ... | 47.4012701 | 7.5156451 | 3780 | 305 | 3710 | 2824 | 3780 | 875 | 3710 | 2824 |
396 | 397 | 2223 | 5830 | 836 | 2272 | Le Glèbe | Fribourg | Villarzel | Villarzel | NaN | ... | 46.7484013 | 6.9129687 | 103400 | 4684 | 98474 | 74041 | 102805 | 21814 | 120707 | 11292 |
72 | 73 | 1704 | 140 | 743 | 130 | Menzingen | Zug | Schönenberg (ZH) | Schönenberg (ZH) | NaN | ... | 47.1932312 | 8.644027 | 7914 | 549 | 7702 | 5625 | 7913 | 1634 | 44674 | 5104 |
255 | 256 | 1702 | 3203 | 741 | 1182 | Cham | Zug | St. Gallen | St. Gallen | NaN | ... | 47.4244818 | 9.3767173 | 124643 | 5037 | 92114 | 69798 | 98836 | 22519 | 121881 | 8557 |
393 | 394 | 6621 | 5729 | 2485 | 2241 | Genève | Genf | Tannay | Tannay | NaN | ... | 46.310046 | 6.1735347 | 12765 | 1540 | 12623 | 9556 | 12686 | 2434 | 13616 | 2530 |
203 | 204 | 2701 | 2478 | 1040 | 1005 | Basel | Basel | Nuglar-St.Pantaleon | Nuglar-St.Pantaleon | NaN | ... | 47.4713115 | 7.6928374 | 25698 | 1631 | 15801 | 13217 | 23521 | 5404 | 22599 | 3023 |
133 | 134 | 1063 | 1069 | 609 | 642 | Meggen | Luzern | Weggis | Weggis | NaN | ... | 47.0338792 | 8.425278 | 13567 | 1055 | 12750 | 9413 | 12750 | 2544 | 13570 | 1821 |
335 | 336 | 217 | 4551 | 39 | 1666 | Elgg | Zürich | Aadorf | Aadorf | NaN | ... | 47.4884348 | 8.9035411 | 3592 | 304 | 3249 | 2414 | 3325 | 647 | 4182 | 902 |
144 | 145 | 5586 | 1375 | 1914 | 694 | Lausanne | Waadt | Unteriberg | Unteriberg | NaN | ... | 47.0593246 | 8.8019535 | 277352 | 11091 | 221203 | 168312 | 249279 | 51673 | 267819 | 13543 |
129 | 130 | 1703 | 1064 | 742 | 610 | Hünenberg | Zug | Meierskappel | Meierskappel | NaN | ... | 47.1244436 | 8.4432688 | 7851 | 632 | 7158 | 5376 | 7966 | 1768 | 11492 | 2200 |
71 | 72 | 1323 | 140 | 697 | 130 | Wollerau | Schwyz | Schönenberg (ZH) | Schönenberg (ZH) | NaN | ... | 47.1932312 | 8.644027 | 6645 | 658 | 6585 | 5339 | 6585 | 2058 | 21588 | 3158 |
237 | 238 | 121 | 2939 | 162 | 1129 | Wetzikon (ZH) | Zürich | Schaffhausen | Schaffhausen | NaN | ... | 47.6958897 | 8.6380489 | 57959 | 2797 | 49386 | 36274 | 53924 | 10252 | 74307 | 5979 |
390 | 391 | 2701 | 5799 | 1040 | 2232 | Basel | Basel | Servion | Servion | NaN | ... | 46.57147 | 6.77879 | 177992 | 7372 | 160543 | 119689 | 174110 | 35168 | 217112 | 12516 |
281 | 282 | 2939 | 3921 | 1129 | 1274 | Schaffhausen | Schaffhausen | Arosa | Arosa | NaN | ... | 46.7823704 | 9.6799111 | 184223 | 9342 | 168577 | 131248 | 200098 | 42589 | 188869 | 11668 |
178 | 179 | 141 | 1710 | 140 | 749 | Thalwil | Zürich | Walchwil | Walchwil | NaN | ... | 47.100183 | 8.5162335 | 31483 | 2381 | 27524 | 20789 | 30302 | 6151 | 26923 | 2431 |
276 | 277 | 3238 | 3238 | 1262 | 1262 | Widnau | Sankt Gallen | Widnau | Widnau | NaN | ... | 47.4055145 | 9.6375563 | 0 | 0 | 0 | 0 | 0 | 0 | ||
254 | 255 | 191 | 3203 | 35 | 1182 | Dübendorf | Zürich | St. Gallen | St. Gallen | NaN | ... | 47.4244818 | 9.3767173 | 79819 | 3414 | 68643 | 51678 | 76651 | 16111 | 77978 | 4907 |
357 | 358 | 2223 | 5811 | 836 | 1966 | Le Glèbe | Fribourg | Cerniaz (VD) | Cerniaz (VD) | NaN | ... | 46.7265588 | 6.8955942 | 101782 | 4618 | 96683 | 72931 | 100490 | 21674 | 115911 | 9584 |
402 | 403 | 2701 | 6458 | 1040 | 2432 | Basel | Basel | Neuchâtel | Neuchâtel | NaN | ... | 46.9899874 | 6.9292732 | 127924 | 5850 | 104735 | 82289 | 121597 | 23781 | 107717 | 6996 |
395 | 396 | 2223 | 5829 | 836 | 2261 | Le Glèbe | Fribourg | Villars-Bramard | Villars-Bramard | NaN | ... | 46.71921 | 6.89887 | 103200 | 4681 | 95569 | 72340 | 101282 | 21976 | 114876 | 9419 |
252 | 253 | 1341 | 3038 | 670 | 1175 | Altendorf | Schwyz | Wolfhalden | Wolfhalden | NaN | ... | 47.45371 | 9.55054 | 120316 | 4715 | 78178 | 59674 | 87850 | 20359 | 121949 | 9180 |
22 rows × 24 columns
dir_results['data1']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
3360 try:
-> 3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
~\anaconda3\lib\site-packages\pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
~\anaconda3\lib\site-packages\pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 'data1'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
C:\Users\ALEXAN~1\AppData\Local\Temp/ipykernel_27948/410383010.py in <module>
----> 1 dir_results['data1']
~\anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
3456 if self.columns.nlevels > 1:
3457 return self._getitem_multilevel(key)
-> 3458 indexer = self.columns.get_loc(key)
3459 if is_integer(indexer):
3460 indexer = [indexer]
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
3361 return self._engine.get_loc(casted_key)
3362 except KeyError as err:
-> 3363 raise KeyError(key) from err
3364
3365 if is_scalar(key) and isna(key) and not self.hasnans:
KeyError: 'data1'
class google_distance:
def _init_(self, api_key = None):
if api_key is None:
raise TypeError(f'`api_key` should not be None')
elif instance( api_key, str ):
self.api_key = api_key
else:
raise TypeError(f'`api_ley` should be string')
def results_directions( self, result )