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

PHP & Base de données Discussion :

Distance et azimut d'un point


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 42
    Points : 16
    Points
    16
    Par défaut Distance et azimut d'un point
    Bonjour,

    J'ai fait un site qui référence tous les relais pouvant servir au radioamateurs : www.relais-radio.fr

    J'ai rajouté une fonction qui permet de savoir quelle est la distance et l'azimut entre cette installation et la Tour Eiffel ( comme exemple ) .

    On attend qu'il compare la latitude et la longitude pour chaque ligne de la base de données avec celle de la Tour Eiffel et qui les reporte dans une colonne.

    J'ai donc un champ Mysql latitude et un champ longitude pour chaque ligne . Donc cela devrait me faire un calcul différent à chaque ligne comme les données ne sont pas les mêmes.

    Lors qu'on clique sur chaque fiche, on retrouve bien les données et on a bien le calcul. En bas de chaque fiche, en gras pour l'instant vous avez bien les kms et l'azimut depuis la Tour Eiffel.

    Je souhaite avoir le même résultat mais directement sur le tableau de la page liste2.php

    Accessible ici : www.relais-radio.fr/liste2.php



    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
    66
    67
    68
    69
    70
    71
    72
    73
     
       <h3 align="center">Liste des relais radioamateurs en France</h3>  
                    <br />  
                    <div class="table-responsive">  
                         <table id="liste2" class="table table-striped table-bordered">  
                              <thead>  
                                   <tr>  
     
    <td>Indicatif</td>  
                                        <td>Ville</td>  
                                        <td>Département</td>  
                                        <td>Fréquence</td>  
    				<td>Offset</td>
                                        <td>Technologie</td>
    <td>Distance</td>
     
     
                                   </tr>  
                              </thead>  
     
     
     
     
     
     
     
     
     
     
    <?php  
    $LonA='-2.294518';
    $LatA='48.858383';
    $LonB=-$donnees['longitude'];
    $LatB=$donnees['latitude'];
    #$resultat1=6378*acos(sin($LatA*PI()/180)*sin(($LatB+0.0001)*pi()/180)+cos($LatA*pi()/180)*cos(($LatB+0.0001)*pi()/180)*cos((($LonB+0.00001)*pi()/180)-($LonA*PI()/180)));
     
                              while($row = mysqli_fetch_array($result))  
                              { 
     
                                   echo '  
      
                                   <tr>
     
    					
    
                             <td><center><b><a href="test.php?indicatif='.$row["indicatif"].'">'.$row["indicatif"].'</a></b></td>
    
    
    
    
    
    
    
    
    
                                        <td>'.$row["ville"].'</td>  
                                        <td>'.$row["departement"].'</td>  
                                        <td>'.$row["frequence"].'</td>  
    					<td>'.$row["offset"].'</td> 
    
     <td>'.$row["technologie"].'</td>
                                        
    
     				
    <td>'.$resultat1.'</td>		
    
    
    
                                         
                                   </tr>  
                                   ';  
                              }  
                              ?>
    Voici une partie du code. Dans un premier temps on nomme les colonnes. Et ensuite pour chaque ligne de la base de données, je voudrais qu'il fasse le calcul de $resultat1 mais avec la latitude et longitude de la ligne.

    Merci pour votre aide. J'ai beau essayer dans tous les sens, je trouve pas.

    Sebastien

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Il faut que tu fasse ton calcul dans la boucle while pour chaque ligne de résultat.

    En supposant que tes champs de base de données sont latitude et longitute ça donnerais quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while($row = mysqli_fetch_array($result))  
    { 
        $distance=6378*acos(sin($LatA*PI()/180)*sin(($row['latitude']+0.0001)*pi()/180)+cos($LatA*pi()/180)*cos(($row['latitude']+0.0001)*pi()/180)*cos((($row['longitude']+0.00001)*pi()/180)-($LonA*PI()/180)));
        ...
        ...
        echo '
        ...
        <td>'.$distance.'</td>';
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Merci bien cela fonctionne.

    Tu m'as maché le travail au maximun. J'ai eu juste à copier ta ligne. Mais je vais m'en servir d'exemple.

    Super site.

    Maintenant, il faut que j'arrondisse le résultat à l'unité mais ça c'est pas dur. Je vais gérer.

    Merci encore super forum.

    Sébastien

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Une dernière petite question

    Dans while($row = mysqli_fetch_array($result))

    J'ai besoin de mettre un if et je voudrais comparer deux valeurs.

    Si ma valeur x est plus grande que la valeur de la colonne telle formule ou sinon telle formule

    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
     
     
    while($row = mysqli_fetch_array($result))  
                              { 
    $distance=round(6378*acos(sin($LatA*PI()/180)*sin(($row['latitude']+0.0001)*pi()/180)+cos($LatA*pi()/180)*cos(($row['latitude']+0.0001)*pi()/180)*cos((($row['longitude']+0.00001)*pi()/180)-($LonA*PI()/180))));
    $Angle=-atan((cos(($LonA*pi()/180)-(($row['longitude']+0.00001)*pi()/180))*sin(pi()/2-(($row['latitude']+0.0001)*pi()/180))*sin(pi()/2-($LatA*pi()/180))+cos(pi()/2-(($row['latitude']+0.0001)*pi()/180))*cos(pi()/2-($LatA*pi()/180)))/sqrt(1-(cos(($LonA*pi()/180)-(($row['longitude']+0.00001)*pi()/180))*sin(pi()/2-(($row['latitude']+0.0001)*pi()/180))*sin(pi()/2-($LatA*pi()/180))+cos(pi()/2-(($row['latitude']+0.0001)*pi()/180))*cos(pi()/2-($LatA*pi()/180)))*(cos(($LonA*pi()/180)-(($row['longitude']+0.00001)*pi()/180))*sin(pi()/2-(($row['latitude']+0.0001)*pi()/180))*sin(pi()/2-($LatA*pi()/180))+cos(pi()/2-(($row['latitude']+0.0001)*pi()/180))*cos(pi()/2-($LatA*pi()/180)))))+pi()/2;
     
     
    if ($donnees['longitude'] < $LonA)
    {
    $azimut=round((-ATAN(((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN($Angle)/COS(($LatA*PI()/180)))/(SQRT(1-((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN($Angle)/COS(($LatA*PI()/180)))*((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN($Angle)/COS(($LatA*PI()/180))))))+PI()/2)*180/PI());
    }
    else
    {
     
    #$azimut=360-(-ATAN(((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN(Angle)/COS(($LatA*PI()/180)))/(SQRT(1-((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN(Angle)/COS(($LatA*PI()/180)))*((SIN((($row['latitude']+0.0001)*PI()/180))-SIN(($LatA*PI()/180))*COS($Angle))/SIN($Angle)/COS(($LatA*PI()/180))))))+PI()/2)*180/PI();
     
    }
     
     
     
     
                                   echo '  
     
                                   <tr>
    Dans mon code $LonA est rentrer de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php  
    $LonA='2.294518';
    $LatA='48.858383';
     
    if ($donnees['longitude'] < $LonA)
    On dirait qu'à chaque fois la condition est OK alors que c'est pas le cas.

    La ligne suivante est donc mal écrite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if ($donnees['longitude'] < $LonA)
    Merci d'avance

  5. #5
    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
    ça ne devrait pas plutôt être if ($row['longitude'] < $LonA) ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Tu as raison mais cela ne prend pas en compte cette formule. Je me suis trompé de sens.

    if ($row['longitude'] < $LonA)

    Même corrigé il ne le prend pas en compte.

    Il valide tout le temps le if.

    Merci

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Tu essai de comparer un chaines de caractères $LonA='2.294518'; à probablement un float ou un type spatiale si ta base de données le supporte.
    Il y'a donc un problème.

    Soit ton champs de bdd est un float et donc il faut que tu déclares $LonA et $LatA en float pour que ta comparaison fonctionne.
    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $LonA=2.294518;
    if ($row['longitude'] < $LonA)
    {
     
    }
    Soit ton champs de bdd est une string et il faut alors caster les deux valeur en float
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (floatval($row['longitude']) < floatval($LonA))
    {
     
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Merci pour vos réponses.

    J'ai peut être un problème d'orientation dans ma tête, je pense.

    Vous m'avez donné les solutions.

    J'ai toutes les billes.

    Merci encore.

Discussions similaires

  1. Distance entre deux groupes de points pour faire des binomes
    Par ImagingAllthe dans le forum MATLAB
    Réponses: 3
    Dernier message: 21/09/2012, 17h25
  2. Distance entre deux ensembles de points
    Par sonyc91 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 02/09/2012, 19h59
  3. Mesure de distances dans un nuage de point
    Par mr313 dans le forum ImageJ
    Réponses: 1
    Dernier message: 04/05/2010, 16h13
  4. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29
  5. Conversion distance , angle vers coordonnées de points
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2004, 22h55

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