Calcul d'une distance orthodromique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 878 fois - Téléchargée 18 fois

Contenu du snippet

Cette petite fonction permet de calculer une distance enter deux points grâce à leurs latitudes et longitudes.
J'ai réalisé cette fonction pour calculer la distance "à vol d'oiseau" entre deux villes.

Les deux derniers champs sont des options ce qui permet d'utiliser la fonction sommairement

echo distance_orthonormique(48.833, 2.333, 43.300, 5.367)." km séparent Paris de Marseille.";

Ce qui nous donnera :
658.86 km séparent Paris de Marseille.

Source / Exemple :


<?php

function distance_orthonormique($x1, $y1, $x2, $y2, $precision = 3, $r = 6378.14)
{
	// La variable $r correspond au rayon de la Terre.
	// $x1, $x2 sont les latitudes de chaques points respectifs.
	// $y1, $y2 sont les longitudes de chaques points respectifs.
	// $precision permet d'obtenir le nombre de chiffre après la virgule. 
	// Elle est définit à 3 par défaut permettant d'obtenir une précision au mètre. Il vous suffira de la multiplier par 1000.
	
	// On convertit les latitudes et longitudes en radian.
	$x1 = deg2rad($x1);
	$x2 = deg2rad($x2);
	$y1 = deg2rad($y1);
	$y2 = deg2rad($y2);

	// Calcule des distances entre les deux points.
	$dlat = $x2 - $x1;
	$dlong = $y2 - $y1;
	
	// On applique la formule.
	$a = sin($dlat/2)*sin($dlat/2) + cos($x1)*cos($x2)*sin($dlong/2)*sin($dlong/2);
	$c = 2 * atan2(sqrt($a), sqrt(1-$a));
	
	// On récupère la valeur du résutat arrondi avec la précision.
	$d =  round($r*$c,  $precision);

	// On renvoit la distance en km
	return $d;
}
?>

A voir également

Ajouter un commentaire

Commentaires

neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
Salut,

Pas grand chose à dire sur le code.
Sur le principe, j'aime beaucoup ce genre de source qui se démarque des autres (les grands classiques du genre formulaire de contact, espace membre, etc). Ca fait plaisir, quoi.
Merci donc.
bossfoot
Messages postés
13
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
7 avril 2009
-
Salut et merci ^^
J'aime bien moi aussi pas de superflue, juste ce qu'on a besoin ^^
tpoinsot
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3 -
Bonjour,
je n'ai pas les mêmes formules mais je suppose que cela revient au même. Cependant, Tu as un rayon de 6378.14 qui est différent du mien, et j'aimerai savoir comment tu l'as obtenu.

J'utilise (40000km) / (2*PI) = 6366.198
D'où l'écart avec ton programme, car j'obtiens 657.626

Ma formule :
d = (arccos(Cos(latA) * Cos(latB) * Cos(LongA-LongB) + Sin(latA) * Sin(latB))) * 20000/PI

avec, pour c dans ]-1,1[ : arccos(c) = Atn(-c / Sqr(-c * c + 1)) + PI / 2
bossfoot
Messages postés
13
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
7 avril 2009
-
Je cherchais justement à avoir les données les plus justes tant qu'à faire ^^
Je suis allez faire un tour sur wikipédia.
J'ai utiliser le rayon équatoriale alors que toi le rayon polaire avec une formule arrondie ^^

http://fr.wikipedia.org/wiki/Terre

Rayon équatorial 6 378,137 km
Rayon polaire 6 356,7523142 km
Périmètre équatorial 40 075,017 km
Périmètre méridional "polaire" = 40 007,864 km

40 000/(2*PI)= 6366.198
40 007.864/(2*PI)= 6367.449
40 075.017/(2*PI)=6378.137

J'espère que sa t'aura aidé ^^
tpoinsot
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3 -
Merci beaucoup. Ce n'est pas "utile" mais très intéressant. Je suis allé recherché un code que j'avais fait en vb il y a 10 ans pour voir comment j'avais fait.
Il s'agissait d'ailleurs de distance orthodromique, mais le vocabulaire ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (bossfoot)