[PYTHON] Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).

Bei der Berechnung der Entfernung von Breiten- und Längengrad ist es nicht schwierig, wenn die Rundheit der Erde berücksichtigt wird und die Erde einer wahren Kugel angenähert werden kann.

from math import sin, cos, acos, radians
earth_rad = 6378.137

def latlng_to_xyz(lat, lng):
    rlat, rlng = radians(lat), radians(lng)
    coslat = cos(rlat)
    return coslat*cos(rlng), coslat*sin(rlng), sin(rlat)

def dist_on_sphere(pos0, pos1, radius=earth_rad):
    xyz0, xyz1 = latlng_to_xyz(*pos0), latlng_to_xyz(*pos1)
    return acos(sum(x * y for x, y in zip(xyz0, xyz1)))*radius

Osaka = 34.702113, 135.494807
Tokyo = 35.681541, 139.767103
London = 51.476853, 0.0

print(dist_on_sphere(Osaka, Tokyo)) # 403.63km
print(dist_on_sphere(London, Tokyo)) # 9571.22km

Wenn Sie genauer berechnen möchten, müssen Sie es mit einer rotierenden Ellipse approximieren, und die "acos" -Funktion bietet Raum für Verbesserungen wie Fehler oder große Fehler in der Nähe von 1, aber für gelegentliche Zwecke frage ich mich, ob dies einigermaßen gut möglich ist.

Auf jeden Fall ist es nicht so kompliziert, selbst wenn man die Rundheit berücksichtigt. Als Referenz, wenn APIs und Bibliotheken nicht verwendet werden können.

Recommended Posts

Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Finden Sie den Wegpunkt aus dem Breiten- und Längengrad (unter Berücksichtigung der Rundheit der Erde).
[Python] Finde Koordinaten aus zwei Winkeln und Entfernungen
Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Holen Sie sich die Adresse von Längen- und Breitengrad
So erhalten Sie den Pixelwert des Punkts aus dem Satellitenbild, indem Sie den Breiten- und Längengrad angeben
Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor
[GPS] Berechnen Sie Entfernung, Azimutwinkel und Höhenwinkel aus GPS-Breiten- und Längengrad mit pyproj
[Python] Finde Koordinaten aus zwei Winkeln und Entfernungen
Laden Sie die Kacheln des Geographical Institute von Längen- und Breitengrad herunter
[Rust] Lesen Sie CSV-Daten von Breiten- und Längengraden, um den Abstand zwischen zwei Punkten zu ermitteln
Geben Sie Breiten- und Längengradpunktsequenzdaten an und versuchen Sie, die Straße anhand von OpenStreetMap-Daten zu identifizieren
DJango Hinweis: Von Anfang an (Vereinfachung und Aufteilung von URLConf)
Finden Sie den kritischen Pfad von PERT mithilfe der Breitenprioritätssuche und der Tiefenprioritätssuche
Informieren Sie sich über das Alter und die Anzahl der Gewinne von Präfekturgouverneuren im ganzen Land
Erfassen Sie GeneratorExit und erkennen Sie das Ende der Iteration von der Generatorseite
Finden Sie die mysteriöse Veränderung der Pokemon-Bilderbuchbeschreibung nach Levenstein-Entfernung heraus
Finden Sie den Schnittpunkt eines Kreises und einer geraden Linie (Sympymatrix)
Finden Sie die Definition des Wertes von errno
Die Geschichte von Python und die Geschichte von NaN
Existenz aus Sicht von Python
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Ungefährer Abstand zwischen zwei Punkten auf der Oberfläche eines rotierenden Ellipsoids (auf der Erdoberfläche)
Visualisierung von Breiten- / Längenkoordinatendaten (unter der Annahme meteorologischer Daten) unter Verwendung von Cartopy und Matplotlib
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Den Namen der Methode, die ihn aufgerufen hat, finden Sie in der Python-Methode
Internes / externes Urteil mit Python: Erhalten Sie den Namen der Stadt / des Dorfes aus den Breiten- / Längengradinformationen eines beliebigen Punktes