J'ai trouvé la distance linéaire sur la terre Au fait, j'ai joué avec pendant un moment.
from math import sin, cos, acos, asin, atan2, radians, degrees
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 xyz_to_latlng(x, y, z):
rlat = asin(z)
coslat = cos(rlat)
return degrees(rlat), degrees(atan2(y/coslat, x/coslat))
def halfway_on_sphere(pos0, pos1, z=0.5):
xyz0, xyz1 = latlng_to_xyz(*pos0), latlng_to_xyz(*pos1)
theta = acos(sum(x * y for x, y in zip(xyz0, xyz1)))
sin_th = sin(theta)
v0 = sin(theta * (1-z)) / sin_th
v1 = sin(theta * z) / sin_th
return xyz_to_latlng(*(x * v0 + y * v1 for x, y in zip(xyz0, xyz1)))
Tokyo = 35.68, 139.77
Atlanta = 33.755, -84.39
print(halfway_on_sphere(Tokyo, Atlanta)) # (61.51, -150.67)
J'ai trouvé que le point médian exact entre Tokyo et Atlanta était à environ 40 km au nord-ouest de la ville d'Ankalesi.
Comme vous pouvez le deviner, le troisième argument de la fonction halfway_on_sphere
peut être utilisé pour calculer n'importe quel point de division interne. Vous pouvez tracer l'itinéraire global en trouvant les coordonnées par petites étapes. Je pense que le point de division extérieur peut probablement être calculé sans aucun problème.
Recommended Posts