[PYTHON] Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.

Lors du calcul de la distance de la latitude et de la longitude, il n'est pas difficile de prendre en compte la rondeur de la terre et de la rapprocher de la vraie sphère.

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

Si vous voulez calculer plus précisément, vous devez l'approcher avec une ellipse rotative, et il y a place pour des améliorations telles que l'erreur ou grande au voisinage de 1 pour la fonction ʻacos`, mais à des fins occasionnelles, cela suffit.

Bref, ce n'est pas si compliqué même si l'on considère la rondeur. Pour référence lorsque les API et les bibliothèques ne peuvent pas être utilisées.

Recommended Posts

Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.
Trouvez le waypoint à partir de la latitude et de la longitude (en tenant compte de la rondeur de la terre).
[Python] Trouver des coordonnées sous deux angles et une distance
Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.
Obtenez l'adresse à partir de la latitude et de la longitude
Comment obtenir la valeur en pixels du point à partir de l'image satellite en spécifiant la latitude et la longitude
Trouvez la broche inertielle et le moment d'inertie principal à partir du tenseur inertiel avec NumPy
[GPS] Calculez la distance, l'angle azimutal et l'angle d'élévation à partir de la latitude et de la longitude GPS à l'aide de pyproj
[Python] Trouver des coordonnées sous deux angles et une distance
Télécharger les tuiles de l'Institut géographique à partir de la latitude et de la longitude
[Rust] Lire les données csv de latitude et de longitude pour trouver la distance entre deux points
Donnez les données de séquence de points de latitude et de longitude et essayez d'identifier la route à partir des données d'OpenStreetMap
Remarque DJango: depuis le début (Simplification et fractionnement d'URLConf)
Trouvez le chemin critique de PERT en utilisant la recherche de priorité de largeur et la recherche de priorité de profondeur
Découvrez l'âge et le nombre de gains des gouverneurs de préfecture dans tout le pays
Capturer GeneratorQuitter et détecter la fin de l'itération du côté du générateur
Découvrez le changement mystérieux de la description du livre illustré Pokemon par Levenstein Distance
Trouver l'intersection d'un cercle et d'une droite (matrice sympy)
Trouvez la définition de la valeur de errno
L'histoire de Python et l'histoire de NaN
Existence du point de vue de Python
Trouvez la distance d'édition (distance de Levenshtein) avec python
Distance approximative entre deux points à la surface d'un ellipsoïde en rotation (à la surface de la terre)
Visualisation des données de coordonnées de latitude / longitude (en supposant des données météorologiques) à l'aide de cartopy et matplotlib
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
Découvrez le nom de la méthode qui l'a appelée à partir de la méthode qui est python
Jugement interne / externe avec Python: obtenez le nom de la ville / ville / village à partir des informations de latitude / longitude de n'importe quel point