Script Php de calcul de distances

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


MarvinLeRouge
WRInaute impliqué
WRInaute impliqué
 
Messages: 526
Inscription: 1 Sep 2004

Message le Lun Jan 24, 2005 10:24

Nous sommes donc bien d'accord en fait : j'évoquais un cas théorique, que tu as rapporté à la réalité en le pondérant comme il se devait. 8)

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Lun Jan 24, 2005 10:25

olivieri a écrit:
Tex a écrit:l'algorythme qui permet de trouver le chemin le plus court (dans un reseau complexe, rien a voir avec le vol d'oiseau) et qui est utilisé dans la pluspart de ce genre d'appli s'appelle l'algorythle de Dijkstra (du nom de son inventeur), une petite recherche sur google avec cet mot devrait vous etre utile :)


Qui a dit chemin le plus court ?


comme ça n'etait pas explicité j'ai apporté un complement d'information sur l'autre methode tout simplement :)


Americas
WRInaute accro
WRInaute accro
 
Messages: 3380
Inscription: 24 Sep 2003

Message le Lun Jan 24, 2005 19:20

Boudiou !!! Comme j'ai mal à la tête après toutes ces explications 8O

Bon... pour faire simple... parce que j'ai rien trouver de convainquant si ce n'est un script en perl sur cette page.

Les résultats du script sont assez probants... même si j'ai pas encore réussi à faire le tourner sur mon site :lol:
Bon... mais sur l'adresse indiquée ça fonctionne bien....

Le seul problème c'est que c'est en perl et je cherche un truc en php :roll:

boussole
WRInaute impliqué
WRInaute impliqué
 
Messages: 577
Inscription: 6 Jan 2004

Message le Lun Jan 24, 2005 21:13

Je suis bien d'accord avec toi j'ai lache au bout d'un moment, je ne pensais pas que le calcul de distance etait aussi complexe. Le sujet m"interesse pour retrouver a partir de ma base et dans un rayon de x km a partir d'une ville donnée un professionnel


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Mar Jan 25, 2005 10:52

Bon désolé d'être rentré dans les détails, mais c'était surtout pour dire que non, on ne peut pas se contenter d'une racine carré de la somme x²+y² pour les distances.
En fait, le plus simple tout en restant grosso modo juste, c'est de prendre effectivement le script http://www.indo.com/distance/dist.pl
Il suppose que la Terre est une sphere avec un rayon moyen choisi de 6367 km. Après, la distance elle-même est calculée en mesurant l'arc de cercle sur cette sphère qui sépare les deux points (les villes).

<culture>Juste pour que tu sois conscient des approximations faites, je rappelle que la Terre est un patatoïde, généralement assimilé à une ellipsoïde plutôt qu'à une sphère (ellipsoïde = sphère applatie aux pôles). Les gars qui font des cartes choisissent donc un ellipsoïde qui leur plait, puis l'emplacement de cet ellipsoïde par rapport au centre de la Terre. Le même ellipsoïde peut être placé différemment, pour minimiser les approximations selon l'endroit dont on veut une carte. La donnée de cet ellipsoïde et de son emplacement s'appelle un "datum". Puis les gars choisissent un système de projection: Mercator, Lambert conique ou conforme ou autre... (certaines projections donnent des cartes qui respectent les distances, d'autres les angles). Enfin, ils appliquent tout ça pour obtenir une carte...
</culture>

Dans le script perl, la seule procédure importante est "great_circle_distance". J'ai pris qqs minutes pour te l'écrire en PHP. Les arguments sont les longitudes et latitudes des 2 villes, exprimées en degrés décimaux signés. Donc pour 25°30'00''E tu passes 25,5° ; pour 43°15'30"S tu passes -43,258° (négatif car coordonnées "sud"). Sur le principe, une coordonnée Ouest ou Sud devient négative. Regarde les fonctions "parse_degrees" et "parse_location" du script original pour ces conversions.
Code: Tout sélectionner
function get_distance($long1, $lat1, $long2, $lat2)
{
   $earth_radius = 6367000;   // Terre = sphère de 6367km de rayon
   $rlo1 = deg2rad($long1);
   $rla1 = deg2rad($lat1);
   $rlo2 = deg2rad($long2);
   $rla2 = deg2rad($lat2);

   $dlo = ($rlo2 - $rlo1) / 2;
   $dla = ($rla2 - $rla1) / 2;
   $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo));
   $d = 2 * atan2(sqrt($a), sqrt(1 - $a));

   return ($earth_radius * $d);
}

Remarque: c'est juste un portage du code, je n'ai pas regardé l'exactitude de la formule.

Et si par ailleurs tu as une base avec les coordonnées lat/long des villes, c'est tout bon...

Haq
WRInaute passionné
WRInaute passionné
 
Messages: 2104
Inscription: 29 Aoû 2002

Message le Mar Jan 25, 2005 10:57

Blini, tu cartonnes !

Je vois peut-être bien une utilisation potentielle de ce script...
Merci.

Haq
WRInaute passionné
WRInaute passionné
 
Messages: 2104
Inscription: 29 Aoû 2002

Message le Mar Jan 25, 2005 11:10

Je viens de tester... ça fontionne nickel ! Je te dois désormais une reconnaissance éternelle ;-)


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Mar Jan 25, 2005 11:30

:) Content que ça fonctionne.


Americas
WRInaute accro
WRInaute accro
 
Messages: 3380
Inscription: 24 Sep 2003

Message le Mar Jan 25, 2005 19:13

Super en effet... le seul problème c'est que j'arrive pas à utiliser ce script :lol:

Bon... aK et Blini... concrètement... un code en ordre de marche ... ça donnerait quoi ?

Je vous l'avais déjà dit que je suis une brelle en PHP :oops:

J'ai besoin d'un formulaire qui appelle le script comme dans le script que j'avais indiqué plus haut...

ou l'autre possibilité... deux listes déroulantes de villes prédéterminées pour le départ et l'arrivée :roll:

Haq
WRInaute passionné
WRInaute passionné
 
Messages: 2104
Inscription: 29 Aoû 2002

Message le Mar Jan 25, 2005 19:38

Le script fonctionne nickel comme ça... faut juste entrer des paramètres dans la fonction (les 2 latitudes et les 2 logitudes) et elle te sort la distance.

Donc si t'as les coordonnées géographiques de 2 villes, tu fais:

Code: Tout sélectionner
print get_distance($longitude_paris, $latitude_paris, $longitude_bruxelles, $latitude_bruxelles);


et ça te sort 200 kilomètres et des brouettes (sauf qu'elle te les sort en mètres).


Americas
WRInaute accro
WRInaute accro
 
Messages: 3380
Inscription: 24 Sep 2003

Message le Mar Jan 25, 2005 19:54

D'accord pour des distances prédéterminées... mais je veux laisser la possibilité aux visiteurs de calculer un itinéraires entre les villes d'@mérique L@tine.

Ils sont sur une page "colombi@" par exemple... et ils veulent chercher la distance entre Bogot@, Me@dellin, C@li... etc...

Il me faut donc un formulaire pour les laisser entrer ces villes... ou mieux... trouver la distance entre une ville de Colombi@ et une d'un autre pays latin@ :wink:


Blini
WRInaute impliqué
WRInaute impliqué
 
Messages: 506
Inscription: 29 Nov 2004

Message le Mar Jan 25, 2005 19:57

Je crois qu'Americas attend un script tout fait, une page toute faite, même, avec un formulaire où tu saisies le noms des deux villes.
Bon, sans vouloir faire de pub, mais quand même, il y a www.mappy.com qui est là pour ça (distances réelles par la route) :)
Sinon, il faut trouver une BdD avec le nom des villes et leur position lat/long, un petit <form> dans une page, une requête mysql, et un appel à la fameuse "get_distance"...
Americas, tu peux sûrement trouver un squelette de page PHP avec un formulaire, puis l'adapter, non ?
Sinon, pour une BdD avec les coordonnées des villes, ça m'a tout l'air d'être dispo gratis ici:
http://earth-info.nga.mil/gns/html/cntry_files.html
Bon, il faut lire un peut pour comprendre les champs des fichiers texte, mais ça devrait être faisable...
Sinon, trouvé aussi ici:
http://jyotisha.00it.com/Latitude.htm


Americas
WRInaute accro
WRInaute accro
 
Messages: 3380
Inscription: 24 Sep 2003

Message le Mar Jan 25, 2005 20:05

C'est vrai... je suis un grand paresseux :oops:

Bon... on va essayer de se débrouiller :wink:

Quant à la bdd... je la laisse où elle est... 700 Mo déployée... j'ai pas envie d'installer cette usine à gaz moi :lol:

Script Php de calcul de distances

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Calculer le ratio de liens profonds
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Calculer l'indice de co-occurrence
    Cet outil vous permet de calculer l'indice de co-occurrence de 2 ou 3 termes, ainsi que le ratio E/F. L'indice de co-occurrence mesure le relation entre les termes : plus cet indice est élevé, plus les termes sont reliés. Concrètement, plus l'indice est élevé, plus il est fréquent de trouver des documents qui contiennent les différents termes.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités