Eine kleine Schnupperkunde wie man die Entfernung von zwei Adressen mit der Hilfe von Python und der Google Maps API ausrechnet…
Bevors losgeht müsst ihr euch einen (sorry!) Google Account erstellen und einen API-Key anfordern. Das kostet natürlich nichts (außer dass ihr eure Seele an Google verkauft…).
Der Key taugt dann für 2.500 Requests alle 24 Stunden.
Habt ihr einen Key? Gut. Dann gehts weiter!
Jetzt braucht ihr (neben Python Version 3) noch das Python Modul ‚json‘ (das sollte schon dabei sein), ‚requests‘ (sollte man sowieso haben) und ‚geopy‘.
(solltet ihr etwas nachinstallieren müssen, unter Ubuntu ist die Installationsfolge:
‚apt-get install python3-pip‘, ‚pip3 install requests‘ und ‚pip3 install geopy‘)
Wir möchten also wissen wie weit es von der Polizeiinspektion Süd in Nürnberg (Oppelner Str. 229, 90473 Nürnberg) zur Sparkasse in der Nähe ist (Wettersteinstraße 45, 90471 Nürnberg). Und zwar mit dem Auto und Luftlinie.
(Google Maps kann uns leider nicht miteinberechnen ob man mit Blaulicht schneller fährt 🙂 )
Werft also Python an und lasst euch die geparste Adresse und die Koordinaten der beiden Punkte ermitteln. (Google korrigiert hier sogar Rechtschreibfehler!)
#!/usr/bin/python3 import geopy import json import requests import geopy.distance key = 'AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxGZQ' add1 = 'Opeler Str. 229, 90473 Nürnberg' add2 = 'Weterseinstraße 45, 90471 Nürnberg' # Geocoordinaten holen (geopy Modul) (nutzt intern die Google Maps Geocoding API) gc = geopy.geocoders.GoogleV3(api_key = key) add1coords = gc.geocode(add1) add2coords = gc.geocode(add2) print(add1coords.address + ': ' + str(add1coords.latitude) + ', ' + str(add1coords.longitude)) print(add2coords.address + ': ' + str(add2coords.latitude) + ', ' + str(add2coords.longitude))
Nun wollen wir die Luftdistanz berechnen lassen, auch das kann das geopy Modul:
# Die Luftdistanz mithilfe der Vincenty Formel und dem Koordinaten Format WGS84 in Meter holen (geopy Modul) point1 = (add1coords.latitude, add1coords.longitude) point2 = (add2coords.latitude, add2coords.longitude) print(str(geopy.distance.vincenty(point1, point2).m) + ' Meter')
Leider kann das Geopy Modul nicht die Google Maps Distance API verwenden – diese müssen wir also direkt mittels dem Requests Modul abfragen:
# Wie lange dauert es mit dem Auto? Die Google Maps Distance API hilft coords1 = str(add1coords.latitude) + ',' + str(add1coords.longitude) coords2 = str(add2coords.latitude) + ',' + str(add2coords.longitude) type = 'driving' targeturl = 'https://maps.googleapis.com/maps/api/distancematrix/json?key=' + key + '&origins=' + coords1 + '&destinations=' + coords2 + '&mode=' + type mydata = requests.get(targeturl) erg = json.loads(mydata.text) print('Mit dem Auto ' + str(erg['rows'][0]['elements'][0]['distance']['text']) + ': ' + str(erg['rows'][0]['elements'][0]['duration']['text']))
Und das Ergebnis? Wie gewünscht:
Oppelner Str. 229, 90473 Nürnberg, Germany: 49.4002214, 11.1362912
Wettersteinstraße 45, 90471 Nürnberg, Germany: 49.4114197, 11.121273
1655.0341517643415 Meter
Mit dem Auto 2.4 km: 6 mins
Ich war überrascht wie einfach das ist.
Und wenn jetzt noch jemand wissen will wie wir da eine Google Map mit verschiedenen Adressen markiert basteln, oder aber diese Daten in eine Datenbank bringen, dann meldet euch in den Kommentaren 🙂
Schreibe einen Kommentar