IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Traduire une fonction js en php : distance en km entre deux longitudes/latitudes


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    756
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 756
    Points : 402
    Points
    402
    Par défaut Traduire une fonction js en php : distance en km entre deux longitudes/latitudes
    salut,
    j'ai trouvé une fonction javascript qui permet de calculer la distance en km entre deux points définit par leur longitude/latitude
    Code en JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /*
     * Calculate distance (in km) between two points specified by
     latitude/longitude with Haversine formula
     */
    LatLong.distHaversine = function(p1, p2) {
      var R = 6371; // earth's mean radius in km
      var dLat  = p2.lat - p1.lat;
      var dLong = p2.lon - p1.lon;
     
      var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
              Math.cos(p1.lat) * Math.cos(p2.lat) * Math.sin(dLong/2) * Math.sin(dLong/2);
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      var d = R * c;
     
      return d;
    }
    URL : http://www.movable-type.co.uk/scripts/LatLong.html

    En PHP j'ai fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function distance($lat1, $lon1, $lat2, $lon2) 
    {
    	$lat1 = deg2rad($lat1);
    	$lat2 = deg2rad($lat2);
    	$lon1 = deg2rad($lon1);
    	$lon2 = deg2rad($lon2);
     
    	$R = 6371;
    	$dLat = $lat2 - $lat1;
    	$dLong = $lon2 - $lon1;
    	$var1= $dLong/2;
    	$var2= $dLat/2;
    	$a= pow(sin($dLat/2), 2) + cos($lat1) * cos($lat2) * pow(sin($dLong/2), 2);
    	$c= 2 * atan2(sqrt($a),sqrt(1-$a));
    	$d= $R * $c;
    	return $d;
    }
    j'ai testé avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Marseille : 43.3 (long) / 5.4 (lat)
    Toulon : 43.116667 / 5.933333
    avec le JS ça me donne 47,79 km, mais avec ma fonctione PHP ça donne 300 km !!!
    je ne trouve pas le pb dans ma fonction !!!

  2. #2
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    C'est normal que dans ta fonction JS tu ne convertit pas les latitudes et longitudes en radian ?

    Une erreur ici :
    $a= pow(sin($dLat/2), 2) + cos($lat1) * cos($lat2) * pow(sin($dLong/2), 2);
    c'est pas plutôt ca :
    $a= pow(sin($dLat/2), 2) + cos($lat1) * cos($lat2) + pow(sin($dLong/2), 2);

  3. #3
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    756
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 756
    Points : 402
    Points
    402
    Par défaut
    non la formule de A est bien correcte, on a bien un seul + (c'est expliqué dans l'url ci-dessus)
    concernant la conversion en radian, la fonction JS effectue bien la conversion (voir source en JS à la fin de l'url ci-dessus)

  4. #4
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Dans la source donnée il existe une fonction en JS qui à l'air bien compliqué pour convertir les lattitudes/longitudes de degrés en radian et en php tu fais une conversion qui parait beaucoup plus simple.
    A-tu essayé de faire un echo dans le script php et un alert dans le script JS pour voir si pour des memes lattitudes/longitudes tu obtiens la même conversion ?

  5. #5
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    756
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 756
    Points : 402
    Points
    402
    Par défaut
    très bonne idée pour débugger mais ça donne exactement le meme résultat !
    en fait maintenant ça marche !!!! tt à l'heure j'ai fais des tests avec des coordonnées erronées
    merci quand meme

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 270
    Points : 163
    Points
    163
    Par défaut
    cette fonction est parfaite si on veut la distance à vol d'oiseau.

    Si on veut la distance en kilomètres par la route, il vaut mieux utiliser l'api de google maps, cf cet article : http://www.astucesdewebmaster.com/de...directions-261

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Je débute! Comment utiliser l'api google maps dans un programme en C ou en VB.net???
    Qu'est-ce qu'il faut télécharger sur le site etc?

    Merci d'avance

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par douze_12 Voir le message
    Bonjour,

    Je débute! Comment utiliser l'api google maps dans un programme en C ou en VB.net???
    Qu'est-ce qu'il faut télécharger sur le site etc?

    Merci d'avance
    quel est le rapport avec PHP ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/02/2009, 23h01
  2. TRADUIRE une fonction algorithmique en java
    Par mouss4rs dans le forum Langage
    Réponses: 1
    Dernier message: 08/05/2008, 01h35
  3. Réponses: 1
    Dernier message: 19/10/2007, 08h53
  4. [PHP-JS] appel d'une fonction javascript en php
    Par notour dans le forum Langage
    Réponses: 7
    Dernier message: 13/04/2007, 13h47
  5. [Oracle] PB recuperer une valeur d'une fonction Oracle dans PHP
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/07/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo