7
votes

Calculer la distance entre deux points en utilisant le théorème de Pythagore

J'aimerais créer une fonction qui calcule la distance entre deux paires de Lat / Longs à l'aide du théorème Pythag au lieu de la formule Haversine Grand-Circle. Comme cela sera sur des distances courtes relatives (3 km), je pense que cette version qui suppose une terre plate devrait être correcte. Comment puis-je faire ceci? J'ai demandé à Internet et je n'ai rien trouvé utile. :)

merci.

EDIT:

Voici ce que j'ai proposé (semble fonctionner): xxx


4 commentaires

Meilleure citation de tous les temps: "J'ai demandé à Internet et je n'ai rien trouvé d'utile."


Utilisant définitivement cela pour mon générateur de devis pour mon site.


Je vous suggère de prendre votre meilleur coup et nous irons de là (publier ce que vous avez jusqu'à présent!)


Grande citation en effet. J'ai trouvé un excellent lien avec toutes les différentes équations Calculer la distance


3 Réponses :


16
votes

Vous pouvez utiliser un simple triangle Pythagore si vous vous attendez à ce que les distances impliquées soient petites comparées à la taille de la terre.

Supposons que vous soyez à (Lat0, long0) et vous voulez connaître la distance à un point (LatT1, long1) en "unités de latitude". p>

distance horizontale (EW) est à peu près p >

d = sqrt(d_ew * d_ew + d_ns * d_ns)


6 commentaires

++ 1 - Le vôtre est plus simple que le mien, alors j'ai supprimé la mienne.


Par curiosité, si je reçois la distance horizontale, y a-t-il un moyen de convertir cela au km ou en kilomètres?


CakeForcerberus, vous êtes un maître de tâches sévère. Il y a quelques raisons pour lesquelles cela n'est pas si simple. L'un est que la Terre n'est pas une sphère. Vous pouvez obtenir une estimation brute en prétendant que c'est une sphère. Vous pouvez trouver alors qu'une "unité de latitude" est la distance qui correspond à une latitude d'un degré. C'est 2 * PI * R / 360.0, où R est le rayon de la terre. Pour obtenir une meilleure estimation que cela, le modèle est compliqué rapidement.


Damn Oblate Spheroides! : D Pouvez-vous épeler pour moi s'il vous plaît? Si je suppose une sphère parfaite et que j'ai une distance .0023 en unités de latitude, je peux prendre des kilomètres en faisant quoi?


D'ACCORD. Essayons cela dans Google: 2 * PI * 3959/360 On dirait que c'est 69.0975851 miles. Gardez autant de chiffres significatifs que vous pouvez jusqu'à la dernière étape. Et vous ne trouverez pas le terme «unités de latitude» ailleurs, j'ai fait le mandat. Donc, si votre lat et votre long sont en degrés, multipliez D d'en haut par ce nombre à approximatif la distance en miles. 0,0023 * 69.0975851 miles = 0.158924445 miles. Autour de la même précision que le 0,0023 et c'est 0,16 miles. Ne me poursuivez pas si cela diffère un peu de ce que vous attendiez.


Réglage mineur: Remplacez * COS (LATT0) avec * COS (moyenne (LATT0, LATT1)) . Donne une approximation légèrement meilleure à la distance.



4
votes

Eh bien, car vos points sont proches les uns des autres, la surface de la sphère est presque plate, alors trouvez les coordonnées des points dans l'espace 3D, alors trouvez (x, y, z) pour chacun des points, où xxx

r est le rayon de la sphère. Ou quelque chose comme ça en fonction de la façon dont vous définissez la lat / long. Une fois que vous avez les deux coords XYZ, utilisez simplement sqrt ((x-x2) ^ 2 + (y1-y2) ^ 2 + (z1-z2) ^ 2) . Vous ne pouvez vraiment pas simplement utiliser une théorémie 2D Pythagoreen depuis que vous auriez besoin d'obtenir des coordonnées 2D raisonnables, ce qui est difficile.


2 commentaires

Il serait certainement utile de comparer le résultat de cette approche avec mes 2D Pythagoras avec Cos (Lat). Vous pouvez bien obtenir des résultats plus acceptables comme celui-ci.


@Ewantodd - Pour une sphère, je crois que votre approche (deux distances le long de la surface, traitées comme un triangle droit) entraîne un supérieure lié ​​à la bonne réponse (la distance estimée est trop grande si vous déplacez de manière significative Dans Lat and Long), alors que Direct 3D Calc ici, qui est une ligne droite à l'intérieur de la sphère, entraîne un inférieur lié. Pas immédiatement évident qui est plus proche, ou dans quelles circonstances.



1
votes

Vous verrez couramment cette notation 'DY, DX' qui représente la différence Y et la différence X. Vous travaillez simplement les différences sur les deux axes, la racine carrée des deux différences carrées au carré par le théorum. (La somme du battage médiatique est égale au carré des deux autres côtés).

var dx:Number = x1-x2;
var dy:Number = y1-y2;
var distance:Number = Math.sqrt(dx*dx + dy*dy);


0 commentaires