Environnement d'exploitation
Xeon E5-2620 v4 (8 noyaux) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 et ses-devel
mpich.x86_64 3.1-5.el6 et ses-devel
gcc version 4.4.7 (Et gfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.Utilisez 1.
Python 3.6.0 on virtualenv
Comme décrit dans [Comment] de *** @ knoguchi (https://qiita.com/7of9/items/4ea7356a8806eaa08d5e/#comment-8b584fc3d15249477719), la méthode de formule Haversine est légèrement différente de la valeur mesurée de la montre GPS. Il semble y avoir. Voir le commentaire pour des calculs plus précis. *** ***
Calculez la distance entre la latitude et la longitude (en tenant compte de la rondeur de la terre). J'ai changé le code pour la version de formule Haversine.
Référence Trier en fonction de l'emplacement à l'aide de la formule Haversine Référence https://en.wikipedia.org/wiki/Haversine_formula
calc_distance_170331a.py
from math import sin, cos, radians, sqrt, asin
EARTH_RADIUS_km = 6378.137
def dist_on_sphere(pos0, pos1, radius=EARTH_RADIUS_km):
'''
distance based on Haversine formula
Ref: https://en.wikipedia.org/wiki/Haversine_formula
'''
latang1, lngang1 = pos0
latang2, lngang2 = pos1
phi1, phi2 = radians(latang1), radians(latang2)
lam1, lam2 = radians(lngang1), radians(lngang2)
term1 = sin((phi2 - phi1) / 2.0) ** 2
term2 = sin((lam2 - lam1) / 2.0) ** 2
term2 = cos(phi1) * cos(phi2) * term2
wrk = sqrt(term1 + term2)
wrk = 2.0 * radius * asin(wrk)
return wrk
Osaka = 34.702113, 135.494807
Tokyo = 35.681541, 139.767103
London = 51.476853, 0.0
print(dist_on_sphere.__doc__)
print("%.2f km" % dist_on_sphere(Osaka, Tokyo)) # 403.63km
print("%.2f km" % dist_on_sphere(London, Tokyo)) # 9571.22km
Courir
$ python calc_distance_170331a.py
distance based on Haversine formula
Ref: https://en.wikipedia.org/wiki/Haversine_formula
403.63 km
9571.22 km
v0.2
Déplacement de la définition du rayon dans la fonction. Vous pouvez modifier le rayon en le spécifiant avec un argument de mot-clé.
calc_distance_170331a.py
from math import sin, cos, radians, sqrt, asin
def dist_on_sphere(pos0, pos1, radius=None):
'''
distance based on Haversine formula
Ref: https://en.wikipedia.org/wiki/Haversine_formula
'''
if radius is None:
radius = 6378.137 # km (Earth's radius)
latang1, lngang1 = pos0
latang2, lngang2 = pos1
phi1, phi2 = radians(latang1), radians(latang2)
lam1, lam2 = radians(lngang1), radians(lngang2)
term1 = sin((phi2 - phi1) / 2.0) ** 2
term2 = sin((lam2 - lam1) / 2.0) ** 2
term2 = cos(phi1) * cos(phi2) * term2
wrk = sqrt(term1 + term2)
wrk = 2.0 * radius * asin(wrk)
return wrk
Osaka = 34.702113, 135.494807
Tokyo = 35.681541, 139.767103
London = 51.476853, 0.0
print(dist_on_sphere.__doc__)
print("%.2f km" % dist_on_sphere(Osaka, Tokyo)) # 403.63km
print("%.2f km" % dist_on_sphere(London, Tokyo)) # 9571.22km
Recommended Posts