Modul erstellen

Es ist nicht sehr praktisch, Jupyter jedes Mal zu starten und alle Zellen des Web-API zu durchlaufen, nur um die Funktionen verwenden zu können. Stattdessen sollten wir unsere Funktionen in einem separaten Modul speichern, wie in nominatim.py:

  1. Hierfür habe ich in Jupyter an derselben Stelle, wie diese Notebooks eine neue Textdatei erstellt, ihr den Namen nominatim.py gegeben.

  2. Anschließend habe ich die Importe, die Methode nominatim_search und deren Decorator lru_cache hineinkopiert und die Datei gespeichert.

  3. Nun können wir zu unserem Notebook zurückkehren und den Code aus dieser Datei importieren und unsere Suchen ausführen:

[1]:
from nominatim import nominatim_search
[2]:
nominatim_search('Alexanderplatz, Berlin, Germany')
[2]:
[{'place_id': 234847916,
  'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
  'osm_type': 'relation',
  'osm_id': 131761,
  'boundingbox': ['52.5200695', '52.5232601', '13.4103097', '13.4160798'],
  'lat': '52.521670650000004',
  'lon': '13.413278026558228',
  'display_name': 'Alexanderplatz, Mitte, Berlin, 10178, Deutschland',
  'class': 'highway',
  'type': 'pedestrian',
  'importance': 0.6914982526373583}]
[3]:
nominatim_search(address=None, street='8, Marienburger Straße', city='Berlin',
    country='Germany')
[3]:
[{'place_id': 22277694,
  'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright',
  'osm_type': 'node',
  'osm_id': 2270572699,
  'boundingbox': ['52.5346778', '52.5347778', '13.4241714', '13.4242714'],
  'lat': '52.5347278',
  'lon': '13.4242214',
  'display_name': '8, Marienburger Straße, Kollwitzkiez, Prenzlauer Berg, Pankow, Berlin, 10405, Deutschland',
  'class': 'place',
  'type': 'house',
  'importance': 0.42099999999999993}]

Das Auslagern des Codes von Notebooks in Module erleichtert nicht nur dessen Wiederverwendbarkeit, es macht auch die Notebooks lesbarer.

Damit der Code jedoch funktioniert, muss sich geocode.py im selben Ordner wie ein Jupyter-Notizbuch befinden. Wenn Sie dieses Modul von einer anderen Stelle aus aufrufen möchten, müsste die Pfadangabe im importgeändert werden. In diesem Fall sollte besser ein eigenes Paket erstellt werden, wie dies in Packetierung beschrieben ist.