Geodatenabfrage aus Google Maps mittels Python (Software)

Martin Vogel ⌂ @, Dortmund / Bochum, Fri, 31.08.2018, 14:17 (vor 2063 Tagen)

Während klassische Geodatenbankabfragen recht pingelig sind, wenn es darum geht, einen Ort festzulegen, zeigt Google Maps, wie selbst unscharfe Beschreibungen und Tippfehler zur richtigen Fundstelle führen können.

Netterweise gibt es eine Programmierschnittstelle (API), die die Verwendung dieses Komforts in eigenen Programmen erlaubt. Wer diese Schnittstelle intensiv nutzt, wird lediglich gebeten, einen API-Key zu beantragen, um gegebenenfalls die CPU-Zeit in Rechnung gestellt zu bekommen. Für gelegentliche Nutzung kommt man aber auch ganz gut ohne einen API-Key aus. Man muss nur etwas gegen hin und wieder aufkommende Fehlermeldungen tun, die eine zu intensive Nutzung bemängeln. Eine Sekunde zu warten, reicht oft aus.

Das Python-Modul „geopy“ stellt eine ganze Palette an Funktionen zur Verfügung, um neben der Google-Maps-API auch die Programmierschnittstellen vieler anderer Geodatenanbieter abzufragen. Es gehört leider nicht zum Standardinstallationsumfang von Python 3.6, kann aber schnell mittels „pip install geopy“ oder über die Paketverwaltung besserer Betriebssysteme installiert werden.

Die Klasse geopy.GoogleV3 besitzt beispielsweise die Methode geocode, der man nicht mehr als einen ungefähren Ortsnamen („Banohf Bilefelt“) oder eine Beschreibung („höchster Berg in NRW“) übergeben muss, um die exakte Adresse und die Geokoordinaten zu erhalten. Die Klasse geopy.distance.distance berechnet die Entfernung zweier Punkte und berücksichtigt dabei sogar die Erdkrümmung nach verschiedenen Modellen.

Hier ein kleines Python-3.6-Beispielprogramm, das zu einem Ortsnamen oder einer Beschreibung die genaue Adresse heraussucht und gleich noch die nächste Tankstelle, den nächsten Bioladen und den nächsten Aldi-Markt heraussucht :-)

  1. #!/usr/bin/env python3
  2.  
  3. # Info: https://geopy.readthedocs.io/en/stable/
  4.  
  5. # Das geopy-Modul gehört nicht zum Standardumfang und
  6. # muss nachinstalliert werden, z. B. mittels
  7. # pip install geopy
  8.  
  9. import geopy, geopy.distance
  10. import time
  11.  
  12. # Ohne Schlüssel ist die Zahl der Zugriffe pro Zeitintervall begrenzt.
  13. # https://developers.google.com/maps/documentation/geolocation/get-api-key
  14. apikey = None
  15.  
  16. # Aufruf der Google-API. Bei Fehlern wegen API-Quota-Überschreitung
  17. # wird der Versuch nach einer kleinen Wartezeit wiederholt.
  18. def GoSlow(s):
  19. antwort = ""
  20. while antwort == "":
  21. try:
  22. antwort = geopy.GoogleV3(apikey).geocode(s)
  23. except geopy.exc.GeocoderQuotaExceeded:
  24. time.sleep(1)
  25. return antwort
  26.  
  27. o1 = None
  28. while not o1:
  29. o1 = GoSlow(input("Gib einen Ortsnamen oder eine Beschreibung ein: "))
  30. if not o1:
  31. print("\nDiesen Ort kennt Google nicht.\n")
  32.  
  33. print("Die Adresse lautet:",o1.address,
  34. f"\n ({o1.latitude:.6f}, {o1.longitude:.6f})")
  35.  
  36. o2 = GoSlow("Aldi nahe "+o1.address)
  37. d = geopy.distance.distance(o1.point, o2.point)
  38.  
  39. print("\nDer nächste Aldi-Markt ist",round(d.m),
  40. "Meter entfernt:\n",o2.address,
  41. f"\n ({o2.latitude:.6f}, {o2.longitude:.6f})")
  42.  
  43. o2 = GoSlow("Bioladen nahe "+o1.address)
  44. d = geopy.distance.distance(o1.point, o2.point)
  45.  
  46. print("\nDer nächste Bioladen ist",round(d.m),
  47. "Meter entfernt:\n",o2.address,
  48. f"\n ({o2.latitude:.6f}, {o2.longitude:.6f})")
  49.  
  50. o2 = GoSlow("Tankstelle nahe "+o1.address)
  51. d = geopy.distance.distance(o1.point, o2.point)
  52.  
  53. print("\nDie nächste Tankstelle ist",round(d.m),
  54. "Meter entfernt:\n",o2.address,
  55. f"\n ({o2.latitude:.6f}, {o2.longitude:.6f})")

Ein paar Beispiele für Programmläufe:

Der höchste Berg in NRW?
[image]

Bahnhof Bielefeld?
[image]

Internationales Geothermiezentrum an der Hochschule Bochum?
[image]

Weitere Informationen zu geopy gibt es auf der Website des Projektes: https://geopy.readthedocs.io/

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python

Tags:
Python, GIS, Google, Maps

RSS-Feed dieser Diskussion
powered by my little forum