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#

  1. https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheater+Parkway,+Mountain+View,+CA&key=AIzaSyAJS5pOyd3e3ltMQhi53rfoVL34a0bso44&language=en

  2. https://maps.googleapis.com/maps/api/geocode/json?address=Avenida+Alfonso+Ugarte+1227,+Cercado+de+Lima+15001&key=AIzaSyAJS5pOyd3e3ltMQhi53rfoVL34a0bso44&language=es

  3. https://maps.googleapis.com/maps/api/geocode/json?address=Avenida+Alfonso+Ugarte+1227,+Cercado+de+Lima+15001&key=AIzaSyAJS5pOyd3e3ltMQhi53rfoVL34a0bso44&languageu=es&region=es&region

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&region=pe")
re1
<Response [200]>
re1
<Response [200]>
re1.json()
Hide code cell output
{'error_message': 'The provided API key is expired. ',
 'results': [],
 'status': 'REQUEST_DENIED'}
data_json = re1.json()
data_json
Hide 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))
Hide 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
Hide 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

8.4. Google Directions API#

Information from link.

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#

  1. 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

  1. Destination = The place ID, address, or textual latitude/longitude (Todo lo mismo)

  2. key = You already have this!!!

OPTIONAL Parameters (the ones I used most)#

  1. mode = driving, walking, bicycling, transit

  2. language

  3. region

  4. departure_time = tienen que especificar la fecha en segundos seconds_converter

  5. 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&region=es&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM

re1 = requests.get( "https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&region=es&key=AIzaSyAXkyaFmn5RRfackh9Fe_4TwgkZjljKSPM")

data_json = re1.json()
data_json
Hide 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={}&region={}&key={}'.format(origin , 
                destination , departure_time , traffic_model , mode, region, api_key)

# https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&region=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
Hide 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={}&region={}&key={}'.format(origin , 
                        destination , departure_time , traffic_model , mode, region, api_key)
        
        # https://maps.googleapis.com/maps/api/directions/json?origin=Toledo&destination=Madrid&region=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
Hide 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)

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
Hide 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
Hide 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
Hide 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 )