In diesem Artikel erläutern wir, wie in Python effizient mit Geodaten gearbeitet werden kann.

Geodaten können verschiedene Objekte symbolisieren - die wichtigsten sind die folgenden drei.

Neben Koordinatenformaten können Geodaten auch als Adressen vorliegen.

Wir erklären in diesem Post:

Geocodierung (Geocoding)

Voraussetzungen

Die benötigten Bibliotheken für diesen Abschnitt lassen sich mit PyPI wie folgt installieren (hier für Python3):

pip3 install geopy
pip3 install ratelimit
pip3 install tqdm # für Fortschrittsbalken

Geocodierung mit GeoPy und Nominatim

Geocodierung bezeichnet die Umwandlung von Adressen in Koordinaten und umgekehrt die Umwandlung von Koordinaten in die dazugehörige Adresse (Reverse Geocoding).

Es gibt eine Reihe an frei verfügbaren Geocoding-APIs, die sich für kleinere Use Cases, also z.B. die Geocodierung von weniger als 10.000 Punkten pro Tag, eignen.

Die APIs manuell aufzurufen ist in den meisten Fällen jedoch gar nicht nötig.geopy ist eine hervorragende Python-Bibliothek für (unter anderem) Geocoding und Reverse Geocoding, die viele APIs unterstützt. Wir nutzen in diesem Beispiel die Nominatim-API, die auf OpenStreetMap (OSM) Daten basiert. Die OSM Daten unterliegen der Open Database License (ODbL).

Eine einzelne Adresse ist in geopy mit minimalem Aufwand geocodiert:

from geopy.geocoders import Nominatim
gc = Nominatim(user_agent="fintu-blog-geocoding-python")
gc.geocode("Unter den Linden 1, Berlin")
# Location(Kommandantenhaus, 1, Unter den Linden, Spandauer Vorstadt, Mitte, Berlin,
# 10117, Deutschland, (52.51720765, 13.3978343993255, 0.0))