2017-04-11 14 views
0

皆さん、ありがとうございました。 私がしようとしているのは、ユーザーからの緯度と経度を使って、DBに保存されている緯度と経度と都市の関連する名前を比較することです。私が今使っているコードはうまくいきますが、問題は半径30マイル以内に複数の行がある可能性があることです。私のコードを見て、できるなら助けてください。最小値を選択するPHP mysqli_fetch_array

<?php function distance($lat1, $lon1, $lat2, $lon2) { 

    $pi80 = M_PI/180; 
    $lat1 *= $pi80; 
    $lon1 *= $pi80; 
    $lat2 *= $pi80; 
    $lon2 *= $pi80; 

    $r = 6372.797; // mean radius of Earth in km 
    $dlat = $lat2 - $lat1; 
    $dlon = $lon2 - $lon1; 
    $a = sin($dlat/2) * sin($dlat/2) + cos($lat1) * cos($lat2) * sin($dlon/2) * sin($dlon/2); 
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); 
    $km = $r * $c; 

    //echo '<br/>'.$km; 
    $km = $km * 0.621371; 
    return $km; 
} 
    include_once("dbconnect.php"); 
    /* check connection */ 
    if ($mysqli->connect_errno) { 
     printf("Connect failed: %s\n", $mysqli->connect_error); 
     exit(); 
    } 
    $grabCities = "SELECT * FROM cities"; 
    $result = $mysqli->query($grabCities); 
    while($row = mysqli_fetch_array($result)){ 
    $distance = distance(41.08866717,-81.4780426,$row['lat'],$row['longitude']); 
    if ($distance < 30){ 
     echo $myCity = $row['City'] . "<BR>"; 
    } 

    } 
    $mysqli->close(); 
?> 
+0

あなたがここで求めていることは本当に明確ではありません。 – Augwa

+0

私がしようとしていることは、自分のDBにあるすべての結果からです。緯度と経度を変換します。ユーザーとの距離が最も近い都市を探し、その都市を選択します。 @Augwa –

+0

これはSQLで行うことができ、結果は1のままで注文できます。 – Augwa

答えて

2

MYSQLを使用してこれを行うことができます。希望の結果が1つ返されます。

sprintf(' 
    SELECT 
     *, 
     (((acos(sin((%1$d*pi()/180)) * 
      sin((`lat`*pi()/180))+cos((%1$d*pi()/180)) * 
      cos((`lat`*pi()/180))*cos(((%2$d-`longitude`) * 
      pi()/180))))*180/pi()) 
     ) as distance 
     FROM `cities` 
    ORDER BY 
     distance ASC 
    LIMIT 1 
    ', 
    $latitude, 
    $longitude 
); 
+0

ありがとうございます。あなたは正しかった! –

0

これはなんですか?テストされていない。

$smallestDistance = null; 

while($row = mysqli_fetch_array($result)){ 
    $distance = distance(41.08866717,-81.4780426,$row['lat'],$row['longitude']); 
    if ($distance < $smallestDistance){ 
     $myCity = $row['City']; 
    } 
    $smallestDistance = $distance; 
} 

echo $myCity; 
+0

私はそれがうまくいくと思っていたが、それはランダムな都市に私を連れて来る。私はアクロン/オハイオ州カントンオアシスです。それは私がデフォルトで入力した座標です。 –

関連する問題