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 :

fonction distance php


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut fonction distance php
    Bonjour,

    Cette fonction ne semble pas fonctionner pouvez mais elle ne crée pas d'erreur non plus .( fonction trouvée sur le net ) avez vous une idée sur son fonctionnement

    Merci

    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
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    $lat1 = 47.363246;
    $lng1 = 1.748489;
     
    $lat2 = 47.590305;
    $lng2 = 1.336872;
     
    function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
    	$pi80 = M_PI / 180;
    	$lat1 *= $pi80;
    	$lng1 *= $pi80;
    	$lat2 *= $pi80;
    	$lng2 *= $pi80;
     
    	$r = 6372.797; // mean radius of Earth in km
    	$dlat = $lat2 - $lat1;
    	$dlng = $lng2 - $lng1;
    	$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    	$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    	$km = $r * $c;
     
    	return ($miles ? ($km * 0.621371192) : $km);
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $lat1 = 47.363246;
    $lng1 = 1.748489;
    $lat2 = 47.590305;
    $lng2 = 1.336872;
    echo distance($lat1, $lng1, $lat2, $lng2, FALSE);

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 211
    Points : 4 690
    Points
    4 690
    Par défaut
    Bravo @sabo

    j'avais pas vu

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    et ?

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 211
    Points : 4 690
    Points
    4 690
    Par défaut
    Citation Envoyé par loribac Voir le message
    et ?
    et elle retourne une distance entre 2 points ! ou est le probleme ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Comment fais-tu l'appel de la fonction ? Sabotage te donne l'appel de la fonction que lui utiliserait.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    Ok merci je comprend mieux mon erreur .... désolé

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    Je fais un test comme 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
     
     
    function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
    	$pi80 = M_PI / 180;
    	$lat1 *= $pi80;
    	$lng1 *= $pi80;
    	$lat2 *= $pi80;
    	$lng2 *= $pi80;
     
    	$r = 6372.797; // mean radius of Earth in km
    	$dlat = $lat2 - $lat1;
    	$dlng = $lng2 - $lng1;
    	$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    	$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    	$km = $r * $c;
     
    	return ($miles ? ($km * 0.621371192) : $km);
     
     
     
     
    }
     
     
     
     
     
     
    $lat1 = 47.363246;
    $lng1 = 1.748489;
     
     
    $lat2 = 47.367548;
    $lng2 = 1.797954;
     
    $km = (distance($lat1, $lng1, $lat2, $lng2, FALSE));
     
    echo"Calcul d'une distance qui doit être inf a 25 kms <br>";
     
    echo "Voici la distance entre les deux point  :  $km  kms<br>";
     
     
    $dis ="25";
     
     
     
    if ( $km <= 25)
    {
     
    echo "La distance entre les deux point est inferieur a 25 kms";
     
    }
     
     
    else
     
    {
     
    echo" La distance est trop longue";
     
     
    }


    Pensez vois qu'il soit raisonnablement envisageable de comparer une serie de lat et long entre elles pour ne garder que celle qui sont dans un unité se distance défini comme ici par exemple 25 kms. Je suppose que faut employer une boucle.... mais j 'ai du mal avec le principe de comparaison des points entre eux avec vous des exemple ou tuto sur ce sujet car je n 'ai rien trouvé sur le net ... Merci

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 211
    Points : 4 690
    Points
    4 690
    Par défaut
    Tu n'es pas dans le bon forum pour remettre en cause le mode de calcul.

    Cherche un forum spécifique, car ta question n'a aucun rapport avec la programmation.

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    Impossible de faire cela en php ?

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as plusieurs coordonnés et tu veux connaitre leur distance par rapport à un autre point ?

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    bonsoir Sabotage,

    en réalité je voudrais faire une sorte de clusterisation de mes coordonnées. en clair si une coordonnée LatLong est (par exemple a 25 km d'une autre je garde les coordonnées) ceci me permettrai de ne conserver que les coordonnées proche les une des autres d'au moins 25 km .. Je ne sais pas si je suis très clair

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as 3 points A, B et C
    AB = 20km
    BC = 20km
    AC = 40km

    Tu veux faire quoi ?

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    ok oui tu a le don de faire simple ce qui me fait défaut


    Si tu as 3 points A, B et C
    AB = 20km
    BC = 20km
    AC = 40km

    Tu veux faire quoi ? je gardes AB et BC

  15. #15
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 211
    Points : 4 690
    Points
    4 690
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $coordonnees= array(
    	array("lat1" => 40.363246 , "lng1" => 1.448489, "lat2" => 47.790305 , "lng2" => 1.236872),
    	array("lat1" => 47.363246 , "lng1" => 1.748489, "lat2" => 47.590305 , "lng2" => 1.336872),
    	array("lat1" => 48.363246 , "lng1" => 1.448489, "lat2" => 47.790305 , "lng2" => 1.236872)
    );
     
    $resultats= array();
    foreach($coordonnees as $coordonnee) {
    	$resultat= distance($coordonnee['lat1'], $coordonnee['lng1'], $coordonnee['lat2'], $coordonnee['lng2'], false);
    	$resultats[$resultat] = $coordonnee; // sauvegarde 4 points
    }
    unset($coordonnees);
    ksort($resultats); // trier datas par cle=distance
    echo '<pre>'.print_r($resultats,true).'</pre>';
    les 2 premiers sont + courtes distances

  16. #16
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Points : 74
    Points
    74
    Par défaut
    voici le script qui me permet de recupérer les données et de savoir si elle



    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
    	$pi80 = M_PI / 180;
    	$lat1 *= $pi80;
    	$lng1 *= $pi80;
    	$lat2 *= $pi80;
    	$lng2 *= $pi80;
     
    	$r = 6372.797; // mean radius of Earth in km
    	$dlat = $lat2 - $lat1;
    	$dlng = $lng2 - $lng1;
    	$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    	$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    	$km = $r * $c;
     
    	return ($miles ? ($km * 0.621371192) : $km);
    }
    // ouverture du fichier des lat et long
    $handle = fopen('http://www.xxxx/data.txt', 'r');
    /*Si on a réussi à ouvrir le fichier*/
    if ($handle)
    {
    	/*Tant que l'on est pas à la fin du fichier*/
    	while (!feof($handle))
    	{
    		/*On lit la ligne courante*/
    		$buffer= fgets($handle);
    		/*On l'affiche*/
    ///////////////////////////////////////////////////////////////////////////////////  BLOC DE RECHERCHE DES COORD DANS UN TABLEAU
       $liste = split(" , ",$buffer);
       // On identifie les valeurs intéressantes
       $dat1 = $liste[1];
       $dat2 = $liste[2];
    $lat1=  $dat1 ;
    $lng1=  $dat2;
    $lat2 = 47.367548;
    $lng2 = 1.797954;
    $km = (distance($lat1, $lng1, $lat2, $lng2, FALSE));
    echo "Voici la distance entre les deux point  :  $km  kms<br>";
    if ( $km <= 800)
    {
    echo "La distance est ok";
    }
    else
    {
    echo" La distance est trop longue";
    }
    echo"<br>";
    }
    	/*On ferme le fichier*/
    	fclose($handle);
    }
    ?>



    Voici un exemple du fichier des coordonnées


    timestamp lat long autre

    1381253722 , 41.240 , 12.650 , 2
    1381253726 , 43.830 , 9.870 , 2
    1381253889 , 41.210 , 17.740 , 2
    1381253969 , 41.250 , 10.990 , 2
    1381254272 , 44.200 , 9.520 , 2
    1381254424 , 43.750 , 9.710 , 2
    1381254425 , 41.500 , 12.700 , 2
    1381254448 , 43.450 , 9.780 , 3

Discussions similaires

  1. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  2. Sendmail et fonction mail php !!
    Par Mike91 dans le forum Apache
    Réponses: 1
    Dernier message: 18/06/2006, 14h41
  3. [Mail] Fonction mail php-bdd
    Par pod1978 dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 17h54
  4. fonction rand() php
    Par taka10 dans le forum Langage
    Réponses: 5
    Dernier message: 12/04/2006, 13h35
  5. [PHP-JS] fonction .innerHTML="" + PHP
    Par sigmar_avenger dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/01/2006, 12h20

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