2017-04-11 87 views
0

嘿傢伙,謝謝你的幫助。 我想要做的是使用用戶的緯度和經度,並將其與我在我的數據庫中保存的經度和緯度與相關城市名稱進行比較。我現在的代碼工作正常,但問題是半徑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

我想要做的是從我在我的數據庫中獲得的所有結果;轉換經度和緯度。找到距離用戶最近的城市,並選擇該城市。 @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

我希望它能夠工作,但它會把我帶到隨機的城市;我應該期待的城市是阿克倫/俄亥俄州。這是我默認輸入的座標。 –