Rayon distance php depuis bdd

Bonjour,

je suis entrain essayé de réalisé un menu déroulant depuis ma base de données, affiché le contenant de ma table avec des coordonné longitude et latitude, j'aimerais savoir si c'est possible de faire un rayon de 8km par exemple d'un point de départ déterminé au paravant
merci,

6 réponses

  1. Contributeur
    bonjour, je pense que c'est possible.
    0
    1. j'ai réalisé deux code qui combiné mais je bloc
      <!doctype html>
      <html>
      <head>
      <meta charset="utf-8">
      </head>
      <body>
      <?php
      require('Connect.php');
      $sql="SELECT * FROM `villes_france_free` WHERE `ville_departement` ='91' ";
      if(!$pdo->query($sql)) echo "Pb d'accès au CARNET";
      else {
      ?>
      <form>
      <select name="ville_id">
      <?php
      foreach ($pdo->query($sql) as $row)
      if(!empty($row['ville_nom']))
      echo "<option value='".$row['ville_longitude_deg']." ".$row['ville_latitude_deg']."'>"
      .$row['ville_code_postal']." ".$row['ville_nom']."</option>\n";
      ?>
      </select>
      <?
      function get_distance_m($lat1, $lng1, $lat2, $lng2) {
      $earth_radius = 6378137; // Terre = sphère de 6378km de rayon
      $rlo1 = deg2rad($lng1);
      $rla1 = deg2rad($lat1);
      $rlo2 = deg2rad($lng2);
      $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);
      }
      echo (round(get_distance_m(48.856667, 2.350987, echo "['ville_longitude_deg']", echo "['ville_latitude_deg']") / 1000, 3)). ' km';
      ?>
      </form>
      <?php
      }
      ?>
      </body>
      </html>

      je voudrais, lorsque je choisit une ville du département qui m'affiche la distance entre le point a qui sera fixe (la longitude et la latitude) et le point b qui seront les ville du département quand je sélectionne une ville rien s'affiche es ce que c'est la bonne écriture pou affiché depuis la base de donnée?
      merci pour vous réponse
      cordialement,
      0
      1. Contributeur
        peux-tu préciser "php" quand tu utilises les balises de code pour partager du php?
        c'est bien de montrer ton code, mais ce serait mieux d'aussi expliquer comment il se comporte.
        tiens compte de ceci: https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
        au lieu de
        get_distance_m(48.856667, 2.350987, echo "['ville_longitude_deg']", echo "['ville_latitude_deg']")

        je ferais plutôt
        get_distance_m(48.856667, 2.350987, $row['ville_longitude_deg'] , $row['ville_latitude_deg'] )
        0
    2. même avec row sa ne marche pas
      le mécanisme est quand je sélectionne une ville dans la liste déroulante depuis ma bdd pour qu'ensuite, grace au echos, depuis les coordonné de la liste déroulante je voudrais savoir combien de kilomètre sépare ces deux ville
      0
      1. Contributeur
        @yg_besi tu fais ceci, cela donne quoi?
        <?php
        require('Connect.php');
                 function get_distance_m($lat1, $lng1, $lat2, $lng2) {
              $earth_radius = 6378137;   // Terre = sphère de 6378km de rayon
              $rlo1 = deg2rad($lng1);
              $rla1 = deg2rad($lat1);
              $rlo2 = deg2rad($lng2);
              $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);
            }
        $sql="SELECT * FROM `villes_france_free` WHERE `ville_departement` ='91' ";
        if(!$pdo->query($sql)) echo "Pb d'accès au CARNET";
        else {
              foreach ($pdo->query($sql) as $row)
              if(!empty($row['ville_nom'])){
                echo $row['ville_longitude_deg']." ".$row['ville_latitude_deg']."' ".$row['ville_nom'];
              echo (round(get_distance_m(48.856667, 2.350987, $row['ville_longitude_deg'] , $row['ville_latitude_deg'] ) / 1000, 3)). ' km';
        }
        }
        ?>    
        0
    3. quand je m'est les coordonné à la place de mets variable cela fonctionne mais quand je remets les variable plus rien, il y a une page avec ma liste déroulante mais pas le echos avec le km
      0
      1. excuse moi sa me donne
        2.15 48.65' JANVRY6807.3 km2.5 48.7' BRUNOY6777.633 km2.21667 48.55' BOISSY-SOUS-SAINT-YON6795.028 km2.25 48.7' VILLEBON-SUR-YVETTE6800.978 km2.05 48.35' MONNERVILLE6798.571 km2.37806 48.3731' GIRONVILLE-SUR-ESSONNE6769.261 km2.06667 48.4333' SAINT-HILAIRE6802.024 km2.45 48.6333' EVRY6778.261 km2.31667 48.5667' LEUDEVILLE6786.689 km2.31667 48.3833' VALPUISEAUX6775.618 km2.01667 48.5333' DOURDAN6812.728 km2.13333 48.3' ESTOUCHES6787.76 km2.41667 48.6833' DRAVEIL6784.401 km2.2 48.3667' MAROLLES-EN-BEAUCE6785.534 km2.43333 48.5667' MENNECY6775.788 km2.38333 48.65' GRIGNY6785.498 km2.36667 48.55' VERT-LE-PETIT6781.007 km2.47334 48.3831' ONCY-SUR-ECOLE6760.955 km2.1 48.3667' GUILLERVAL6794.894 km2.33333 48.7333' WISSOUS6795.21 km2.35889 48.4328' VAYRES-SUR-ESSONNE6774.656 km2.16667 48.35' ABBEVILLE-LA-RIVIERE6787.648 km2.25 48.5667' AVRAINVILLE6792.921 km2.41667 48.65' RIS-ORANGIS6782.385 km2.16667 48.7' BURES-SUR-YVETTE6808.764 km2.25 48.7167' PALAISEAU6801.988 km2.25 48.5833' ARPAJON6793.923 km2.35306 48.4675' GUIGNEVILLE-SUR-ESSONNE6777.296 km2.33333 48.6667' EPINAY-SUR-ORGE6791.179 km2.25833 48.3167' BLANDY6777.063 km2.53333 48.6833' BOUSSY-SAINT-ANTOINE6773.51 km2.45 48.5833' VILLABE6775.235 km2.26667 48.65' LA VILLE-DU-BOIS6796.397 km2.06667 48.5833' ANGERVILLIERS6811.065 km2.4 48.5667' ECHARCON6778.902 km2.43333 48.5667' ORMOY6775.788 km2.31667 48.4667' CERNY6780.65 km2.26667 48.75' VERRIERES-LE-BUISSON6802.446 km2.28333 48.4667' BOISSY-LE-CUTTE6783.767 km2.45 48.7167' CROSNE6783.312 km2.45695 48.4328' MOIGNY-SUR-ECOLE6765.488 km2.28333 48.6333' LONGPONT-SUR-ORGE6793.83 km2.41667 48.4833' MONDEVILLE6772.304 km2.3 48.6333' SAINT-MICHEL-... et sa continue, sa veut qui faut placé une liste déroulant au niveau du foreach?
        0
        1. Contributeur
          cela montre que le calcul de distance fonctionne bien, non?
          n'était-ce pas le point de départ de cette discussion?
          0
      2. oui et non, oui cela fonctionne et nom car j'essaye de mettre la ville plus le cp dans la liste déroulante et avoir la distance en dessous
        0
        1. Contributeur
          je ne vois pas quelle technique tu essaies d'utiliser pour afficher une information en fonction du choix de la liste déroulante.
          fais-tu cela sur base d'un exemple ou d'un cours?
          peut-être veux-tu utiliser du javascript pour calculer la distance, et que tu fais, pas erreur, en php?
          0
        2. Contributeur
          @yg_bepeux-tu donner suite, ou marquer la discussion comme résolue?
          0