/ / Comment comparer la distance entre grands cercles et la distance euclidienne de deux points de sphère avec python? - python, numpy, euclidien-distance, grand cercle

Comment comparer la distance du grand cercle avec la distance euclidienne de deux points de la sphère en utilisant python? - python, numpy, euclidien-distance, grand cercle

J'essaie de vérifier l'erreur introduitelorsque vous calculez la distance de deux points sur la terre avec la distance euclidienne au lieu d'utiliser la distance du grand cercle (gcd). J'ai deux points qui sont définis par leur lattitude et leur longtitude. J'ai utilisé le framework geopy python pour la grande distance de cercle. Voici le code pour le gcd:

def measure(self, a, b):
a, b = Point(a), Point(b)

lat1, lng1 = radians(degrees=a.latitude), radians(degrees=a.longitude)
lat2, lng2 = radians(degrees=b.latitude), radians(degrees=b.longitude)

sin_lat1, cos_lat1 = sin(lat1), cos(lat1)
sin_lat2, cos_lat2 = sin(lat2), cos(lat2)

delta_lng = lng2 - lng1
cos_delta_lng, sin_delta_lng = cos(delta_lng), sin(delta_lng)

d = atan2(sqrt((cos_lat2 * sin_delta_lng) ** 2 +
(cos_lat1 * sin_lat2 -
sin_lat1 * cos_lat2 * cos_delta_lng) ** 2),
sin_lat1 * sin_lat2 + cos_lat1 * cos_lat2 * cos_delta_lng)

return self.RADIUS * d

Donc ou deux points:

p1 = [39,8616, -75,0748], p2 = [- 7,30933,112,76]

la

gcd = 78.8433004543197 klm

en utilisant le great_circle(p1,p2).kilometers fonction de geopy

J'ai ensuite transformé ces deux points en coordonnées cartésiennes en utilisant cette formule:

  def spherical_to_cartesian(r,la,lo):
x=r*np.sin(90-la)*np.cos(lo)
y=r*np.sin(90-la)*np.sin(lo)
z=r*np.cos(90-la)
return (x,y,z)

r=6372.795, ce qui donne les coordonnées cartésiennes suivantes

p1=[ -765.81579368,  -256.69640558,  6321.40405587],
p2=[480.8302149,-168.64726394,-6352.39140142]

Puis en tapant: np.linalg.norm(p2-p1) Je reçois 1103.4963114787836 comme leur norme euclidienne qui ne semble pas raisonnable comparée à ~ 78klm du gcd. Est-ce que je prétends avoir tort?

Réponses:

1 pour la réponse № 1

Python inclut deux fonctions dans le package mathématique; radians convertit les degrés en radians et degrés convertit les radians en degrés.

La méthode sin () renvoie le sinus de x, en radians.

import math
def spherical_to_cartesian(r,la,lo):
rlo = math.radians(lo)
rla = math.radians(90-la)
x=r*np.sin(rla)*np.cos(rlo)
y=r*np.sin(rla)*np.sin(rlo)
z=r*np.cos(rla)
return (x,y,z)