Blog

Abstandsberechnung mit Impala (oder Hive)

Aktualisiert Oktober 22, 2025
2 Minuten

Haversine

Die Haversinus-Formel ist eine in der Schifffahrt wichtige Gleichung, die Großkreisentfernungen zwischen zwei Punkten auf einer Kugel anhand ihrer Längen- und Breitengrade angibt. Sie ist ein Spezialfall einer allgemeineren Formel in der sphärischen Trigonometrie, dem Haversinus-Gesetz, das die Seiten und Winkel sphärischer Dreiecke in Beziehung setzt. Die erste Tabelle der Haversinus-Formel in englischer Sprache wurde 1805 von James Andrew veröffentlicht. Florian Cajori schreibt eine frühere Verwendung durch Jose de Mendoza y Ríos im Jahr 1801 zu. Der Begriff Haversine wurde 1835 von Prof. James Inman geprägt.

Mein Kollege Giovanni hat die Formel in einem früheren Beitrag beschrieben und eine Implementierung in Python mit NumPy für schnelle Ergebnisse programmiert. In diesem Beitrag zeige ich Ihnen, wie Sie Impala verwenden

Dies funktioniert auch in Hive. (aber das ist natürlich viel langsamer)

Impala Abfragesprache

Impala verfügt über eine Vielzahl von Mathematik-, String-, Datums- und anderen Funktionen, die Sie sich ansehen sollten. Impala unterstützt alle mathematischen Funktionen, die zur Implementierung der Formel erforderlich sind. Die Abfrage, die ich zusammengestellt habe:

Wählen Sie
  2 * asin(
      sqrt(
        cos(Radiant(lat1)) *
        cos(Radiant(lat2)) *
        pow(Sünde(Radiant((einsam1 - lon2)/2)), 2)
            +
        pow(Sünde(Radiant((lat1 - lat2)/2)), 2)

      )
    ) * 6371 Entfernung_km
  von meine_tabelle;
Hinweis: Für Meilen verwenden Sie 3956 anstelle von 6371.

Test

Ich habe ein Beispiel mit dem Bahnhof Hoofddorp zum Hauptbahnhof Amsterdam erstellt. In HUE können Sie Ihre Abfrageergebnisse mit Breiten- und Längenwerten auf der Karte darstellen. Ich nehme an, Sie wissen nicht, wo Amsterdam liegt, aber Hoofddorp ist bekannt für seine..., nun, jetzt wissen Sie, wo Hoofddorp und Amsterdam liegen.

  • Bahnhof Hoofddorp: 52.2909264998, 4.700868765513
  • Bahnhof Amsterdam: 52.3773759354, 4.896747677825
beide-standorte

Lassen Sie uns diese Variablen in der Abfrage verwenden:

Wählen Sie
  2 * asin(
      sqrt(
        cos(Radiant(52.2909264998)) *
        cos(Radiant(52.3773759354)) *
        pow(Sünde(Radiant((4.700868765513 - 4.896747677825)/2)), 2)
            +
        pow(Sünde(Radiant((52.2909264998 - 52.3773759354)/2)), 2)
      )
    ) * 6371 Entfernung_km;

  -- Ergebnis: 16.415929129056497

Überprüfen Sie das Ergebnis

Mit der Funktion google-maps-calculate-distance können Sie die Entfernung zwischen zwei Punkten auf der Karte messen.

google-measurement

Das ist gut! Kopieren Sie die Formel und verwenden Sie sie in Impala oder Hive, um einige Geodaten zu verarbeiten.

Grüße, Alexander Bij

Contact

Let’s discuss how we can support your journey.